@plasius/schema 1.3.0 → 1.4.0

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 (36) hide show
  1. package/README.md +235 -1
  2. package/THIRD_PARTY_NOTICES.md +75 -0
  3. package/dist/chunk-6FE4FLKF.js +254 -0
  4. package/dist/chunk-6FE4FLKF.js.map +1 -0
  5. package/dist/chunk-AG2NAPDC.js +117 -0
  6. package/dist/chunk-AG2NAPDC.js.map +1 -0
  7. package/dist/chunk-UQHPDQZX.js +2606 -0
  8. package/dist/chunk-UQHPDQZX.js.map +1 -0
  9. package/dist/feedback-diagnostics-BaniQAFS.d.cts +353 -0
  10. package/dist/feedback-diagnostics-CnsI0B9-.d.ts +353 -0
  11. package/dist/feedback-diagnostics-vocabulary.cjs +156 -0
  12. package/dist/feedback-diagnostics-vocabulary.cjs.map +1 -0
  13. package/dist/feedback-diagnostics-vocabulary.d.cts +70 -0
  14. package/dist/feedback-diagnostics-vocabulary.d.ts +70 -0
  15. package/dist/feedback-diagnostics-vocabulary.js +33 -0
  16. package/dist/feedback-diagnostics-vocabulary.js.map +1 -0
  17. package/dist/feedback-diagnostics.cjs +2696 -0
  18. package/dist/feedback-diagnostics.cjs.map +1 -0
  19. package/dist/feedback-diagnostics.d.cts +2 -0
  20. package/dist/feedback-diagnostics.d.ts +2 -0
  21. package/dist/feedback-diagnostics.js +39 -0
  22. package/dist/feedback-diagnostics.js.map +1 -0
  23. package/dist/feedback-unicode-profile.cjs +283 -0
  24. package/dist/feedback-unicode-profile.cjs.map +1 -0
  25. package/dist/feedback-unicode-profile.d.cts +28 -0
  26. package/dist/feedback-unicode-profile.d.ts +28 -0
  27. package/dist/feedback-unicode-profile.js +13 -0
  28. package/dist/feedback-unicode-profile.js.map +1 -0
  29. package/dist/index.cjs +2133 -14
  30. package/dist/index.cjs.map +1 -1
  31. package/dist/index.d.cts +879 -286
  32. package/dist/index.d.ts +879 -286
  33. package/dist/index.js +1516 -2300
  34. package/dist/index.js.map +1 -1
  35. package/package.json +51 -13
  36. package/unicode/feedback-unicode-15.1.0-unassigned.json +13 -0
package/dist/index.d.ts CHANGED
@@ -1,287 +1,7 @@
1
- type PIIClassification = "none" | "low" | "high";
2
- type PIIAction = "encrypt" | "hash" | "clear" | "none";
3
- type PIILogHandling = "redact" | "omit" | "pseudonym" | "plain";
4
- interface PII {
5
- classification: PIIClassification;
6
- action: PIIAction;
7
- logHandling?: PIILogHandling;
8
- purpose?: string;
9
- }
10
-
11
- interface ValidationIssueInput {
12
- code: string;
13
- message: string;
14
- path?: string;
15
- }
16
- interface ValidationIssue {
17
- path: string;
18
- code: string;
19
- message: string;
20
- }
21
- type FieldValidatorResult = boolean | string | ValidationIssueInput | ValidationIssueInput[];
22
- type FieldValidator<T = unknown> = {
23
- bivarianceHack(value: T): FieldValidatorResult;
24
- }["bivarianceHack"];
25
-
26
- type FieldType$1 = "string" | "number" | "boolean" | "object" | "array" | "ref";
27
-
28
- type FieldExposure = "public" | "internal";
29
- declare class FieldBuilder<TExternal = unknown, TInternal = TExternal> {
30
- type: FieldType$1;
31
- _type: TExternal;
32
- _storageType: TInternal;
33
- isSystem: boolean;
34
- isImmutable: boolean;
35
- isRequired: boolean;
36
- _validator?: FieldValidator<TInternal>;
37
- _description: string;
38
- _version: string;
39
- _default?: TInternal | (() => TInternal);
40
- _upgrade?: (value: any, ctx: {
41
- entityFrom: string;
42
- entityTo: string;
43
- fieldTo: string;
44
- fieldName: string;
45
- }) => {
46
- ok: boolean;
47
- value?: any;
48
- error?: string;
49
- };
50
- _shape?: Record<string, FieldBuilder<any>>;
51
- itemType?: FieldBuilder<any>;
52
- refType?: string;
53
- _pii: PII;
54
- _exposure: FieldExposure;
55
- enumValues?: readonly TInternal[];
56
- constructor(type: FieldType$1, options?: {
57
- shape?: Record<string, FieldBuilder<any>>;
58
- itemType?: FieldBuilder<any>;
59
- refType?: string;
60
- });
61
- immutable(): FieldBuilder<TExternal, TInternal>;
62
- system(): FieldBuilder<TExternal, TInternal>;
63
- exposure(exposure: FieldExposure): FieldBuilder<TExternal, TInternal>;
64
- internal(): FieldBuilder<TExternal, TInternal>;
65
- public(): FieldBuilder<TExternal, TInternal>;
66
- required(): FieldBuilder<TExternal, TInternal>;
67
- optional(): FieldBuilder<TExternal, TInternal>;
68
- validator(fn: FieldValidator<TInternal>): FieldBuilder<TExternal, TInternal>;
69
- description(desc: string): FieldBuilder<TExternal, TInternal>;
70
- default(value: TInternal | (() => TInternal)): FieldBuilder<TExternal, TInternal>;
71
- /**
72
- * Configure an upgrader used when validating older entities against a newer schema.
73
- * The upgrader receives the current field value and version context, and should
74
- * return { ok: true, value } with the upgraded value, or { ok: false, error }.
75
- */
76
- upgrade(fn: (value: any, ctx: {
77
- entityFrom: string;
78
- entityTo: string;
79
- fieldTo: string;
80
- fieldName: string;
81
- }) => {
82
- ok: boolean;
83
- value?: any;
84
- error?: string;
85
- }): FieldBuilder<TExternal, TInternal>;
86
- getDefault(): TInternal | undefined;
87
- version(ver: string): FieldBuilder<TExternal, TInternal>;
88
- PID(pii: PII): FieldBuilder<TExternal, TInternal>;
89
- min(min: number): FieldBuilder<TExternal, TInternal>;
90
- max(max: number): FieldBuilder<TExternal, TInternal>;
91
- pattern(regex: RegExp): FieldBuilder<TExternal, TInternal>;
92
- enum<const U extends readonly TInternal[]>(values: U): FieldBuilder<U[number]>;
93
- /**
94
- * Create a shallow clone with a different external type parameter.
95
- * Note: shape and itemType are passed by reference (shallow). If you need
96
- * deep isolation of nested FieldBuilders, clone them explicitly.
97
- */
98
- as<U>(): FieldBuilder<U, TInternal>;
99
- }
100
-
101
- type FieldTypeMap = {
102
- string: string;
103
- number: number;
104
- boolean: boolean;
105
- object: Record<string, unknown>;
106
- "string[]": string[];
107
- "number[]": number[];
108
- "boolean[]": boolean[];
109
- "object[]": Record<string, unknown>[];
110
- ref: RefEntityId;
111
- "ref[]": RefEntityId[];
112
- };
113
- type FieldType = keyof FieldTypeMap;
114
- type PIIEnforcement = "strict" | "warn" | "none";
115
- /** Result returned by a schema upgrade function. */
116
- type SchemaUpgradeResult = {
117
- ok: boolean;
118
- /** Upgraded entity (must include all required fields for the new schema). */
119
- value?: Record<string, any>;
120
- /** Optional human-readable errors if upgrade fails. */
121
- errors?: string[];
122
- };
123
- /**
124
- * A function that upgrades an entity from an older schema version to a newer one.
125
- * It should be **pure** and not mutate its arguments.
126
- */
127
- type SchemaUpgradeFunction = (input: Record<string, any>, ctx: {
128
- from: string;
129
- to: string;
130
- entityType: string;
131
- /** Describe function for the target schema – useful for dynamic migrations. */
132
- describe: () => {
133
- entityType: string;
134
- version: string;
135
- shape: Record<string, any>;
136
- };
137
- log?: (msg: string) => void;
138
- }) => SchemaUpgradeResult;
139
- type SchemaUpgradeStep = {
140
- /** The target version this step upgrades to (e.g., "1.1.0"). */
141
- to: string;
142
- /** The migration function that upgrades from the previous step's version to `to`. */
143
- run: SchemaUpgradeFunction;
144
- };
145
- /**
146
- * Schema-level upgrade specification can be either:
147
- * - a single `SchemaUpgradeFunction` that handles any from->to, OR
148
- * - an ordered array of steps, each targeting a specific `to` version, which
149
- * will be applied sequentially to cascade from the oldest known version to the latest.
150
- */
151
- type SchemaUpgradeSpec = SchemaUpgradeFunction | SchemaUpgradeStep[];
152
- interface SchemaOptions {
153
- version?: string;
154
- table?: string;
155
- schemaValidator?: (value: any) => boolean;
156
- piiEnforcement?: PIIEnforcement;
157
- schemaUpgrade?: SchemaUpgradeStep[] | SchemaUpgradeFunction | undefined;
158
- }
159
- interface SerializeOptions {
160
- includeInternal?: boolean;
161
- }
162
- type SchemaShape = Record<string, FieldBuilder<any>>;
163
- interface FieldDefinition<T = unknown> {
164
- type: FieldType;
165
- __valueType?: T;
166
- optional?: boolean;
167
- immutable?: boolean;
168
- description?: string;
169
- refType?: string;
170
- version?: string;
171
- deprecated?: boolean;
172
- deprecatedVersion?: string;
173
- system?: boolean;
174
- autoValidate?: boolean;
175
- refPolicy?: "eager" | "lazy";
176
- enum?: string[];
177
- _shape?: SchemaShape;
178
- pii?: PII;
179
- exposure?: FieldExposure;
180
- validator?: FieldValidator<T>;
181
- }
182
- interface ValidateCompositionOptions {
183
- resolveEntity: (type: string, id: string) => Promise<any | null>;
184
- validatorContext?: {
185
- visited: Set<string>;
186
- };
187
- maxDepth?: number;
188
- log?: (msg: string) => void;
189
- onlyFields?: string[];
190
- }
191
- interface Schema<T extends SchemaShape> {
192
- _shape: T;
193
- meta: {
194
- entityType: string;
195
- version: string;
196
- };
197
- schemaValidator: (entity: Infer<T>) => boolean;
198
- /**
199
- * Runs the optional schema-level upgrade function once, without validating.
200
- * Useful for offline migrations or testing migration logic.
201
- */
202
- upgrade(input: Record<string, any>, log?: (msg: string) => void): {
203
- ok: boolean;
204
- value?: Record<string, any>;
205
- errors?: string[];
206
- };
207
- validate: (input: unknown, existing?: Record<string, any>) => ValidationResult<Infer<T>>;
208
- validateComposition: (entity: Infer<T>, options: ValidateCompositionOptions) => Promise<void>;
209
- serialize: (input: Record<string, any>, options?: SerializeOptions) => Record<string, any>;
210
- tableName?: () => string | undefined;
211
- prepareForRead(stored: Record<string, any>, decryptFn: (value: string) => any | null): Record<string, any>;
212
- prepareForStorage(input: Record<string, any>, encryptFn: (value: any) => string, hashFn: (value: any) => string): Record<string, any>;
213
- sanitizeForLog(data: Record<string, any>, pseudonymFn: (value: any) => string): Record<string, any>;
214
- getPiiAudit(): Array<{
215
- field: string;
216
- classification: PIIClassification;
217
- action: PIIAction;
218
- logHandling?: PIILogHandling;
219
- purpose?: string;
220
- }> | null;
221
- scrubPiiForDelete(stored: Record<string, any>): Record<string, any>;
222
- describe(): {
223
- entityType: string;
224
- version: string;
225
- shape: Record<string, {
226
- type: FieldType;
227
- optional: boolean;
228
- immutable: boolean;
229
- description: string;
230
- version: string;
231
- deprecated: boolean;
232
- deprecatedVersion: string | null;
233
- system: boolean;
234
- enum: string[] | null;
235
- refType: string | null;
236
- pii: PII | null;
237
- exposure: FieldExposure;
238
- }>;
239
- };
240
- }
241
- type DeepReadonly<T> = {
242
- readonly [K in keyof T]: T[K] extends object ? T[K] extends (...args: any[]) => any ? T[K] : DeepReadonly<T[K]> : T[K];
243
- };
244
- interface ValidationResult<T> {
245
- valid: boolean;
246
- value?: DeepReadonly<T>;
247
- errors?: string[];
248
- issues?: ValidationIssue[];
249
- }
250
- type RefEntityId<T extends string = string> = {
251
- type: T;
252
- id: string;
253
- };
254
-
255
- type InferField<T> = T extends {
256
- _type: infer U;
257
- } ? U : T extends {
258
- type: "string";
259
- } ? string : T extends {
260
- type: "number";
261
- } ? number : T extends {
262
- type: "boolean";
263
- } ? boolean : T extends {
264
- type: "array";
265
- itemType: infer Item;
266
- } ? InferField<Item>[] : T extends {
267
- type: "object";
268
- shape: infer Shape extends SchemaShape;
269
- } ? InferFromShape<Shape> : unknown;
270
- type IsOptional<T> = T extends {
271
- isRequired: false;
272
- } ? true : false;
273
- type InferFromShape<S extends SchemaShape> = {
274
- [K in keyof S]: IsOptional<S[K]> extends true ? InferField<S[K]> | undefined : InferField<S[K]>;
275
- };
276
- type InferFromSchema<T extends {
277
- shape: SchemaShape;
278
- }> = InferFromShape<T["shape"]>;
279
- type IsSchema<T> = T extends {
280
- shape: SchemaShape;
281
- } ? true : false;
282
- type Infer<T> = IsSchema<T> extends true ? InferFromSchema<T & {
283
- shape: SchemaShape;
284
- }> : InferFromShape<T & SchemaShape>;
1
+ import { F as FieldBuilder, S as SchemaShape, I as Infer, a as SchemaOptions, b as Schema, c as FieldType, V as ValidationIssue } from './feedback-diagnostics-CnsI0B9-.js';
2
+ export { D as DeepReadonly, d as FeedbackGameDiagnosticsSchema, e as FeedbackGameDiagnosticsValidationResult, f as FieldDefinition, g as FieldExposure, h as FieldTypeMap, i as FieldValidator, j as FieldValidatorResult, P as PIIEnforcement, R as RefEntityId, k as SCHEMA_IDENTITY_POLICIES, l as SCHEMA_UNKNOWN_FIELDS_POLICIES, m as SchemaIdentityPolicy, n as SchemaUpgradeFunction, o as SchemaUpgradeResult, p as SchemaUpgradeSpec, q as SchemaUpgradeStep, r as SchemaValidationContext, s as SerializeOptions, U as UnknownFieldsPolicy, t as ValidateCompositionOptions, u as ValidationIssueInput, v as ValidationResult, w as validateFeedbackGameDiagnostics } from './feedback-diagnostics-CnsI0B9-.js';
3
+ import { FEEDBACK_CONTRACT_VERSION, FeedbackGameDiagnostics } from './feedback-diagnostics-vocabulary.js';
4
+ export { FEEDBACK_BACKEND_BUCKETS, FEEDBACK_FRAME_RATE_BUCKETS, FEEDBACK_FRAME_TIME_BUCKETS, FEEDBACK_GAME_COUNTER_CODES, FEEDBACK_GAME_COUNTER_MAX_COUNT, FEEDBACK_GAME_COUNTER_MAX_ITEMS, FEEDBACK_GAME_ERROR_CODES, FEEDBACK_GAME_FEATURE_IDS, FEEDBACK_GAME_PROVENANCE_CONTRACTS, FEEDBACK_GAME_PROVENANCE_CONTRACT_IDS, FEEDBACK_GAME_SURFACE_IDS, FEEDBACK_RENDERER_BUCKETS, FEEDBACK_VIEWPORT_BUCKETS } from './feedback-diagnostics-vocabulary.js';
285
5
 
286
6
  declare const field: {
287
7
  string: () => FieldBuilder<string, string>;
@@ -422,10 +142,24 @@ declare function validatePercentage(value: unknown): boolean;
422
142
  declare function validateRichText(value: unknown): boolean;
423
143
 
424
144
  /**
425
- * Validates that a name is safe, culturally inclusive, and matches global best practice.
145
+ * Validates that a personal name is safe and culturally inclusive.
146
+ *
147
+ * Decimal digits remain unsupported because first, middle, and last names are
148
+ * personal-name components rather than public display identifiers.
149
+ *
426
150
  * Global Standard: OWASP Input Validation Cheat Sheet + ICAO Doc 9303 + IETF PRECIS
427
151
  */
428
152
  declare function validateName(value: unknown): boolean;
153
+ /**
154
+ * Validates a public display name independently from personal-name fields.
155
+ *
156
+ * Unicode decimal digits are supported alongside letters and combining marks
157
+ * so legitimate display names such as `Player 2` remain representable without
158
+ * relaxing first, middle, or last-name validation.
159
+ *
160
+ * Global Standard: OWASP Input Validation Cheat Sheet + IETF PRECIS
161
+ */
162
+ declare function validateDisplayName(value: unknown): boolean;
429
163
 
430
164
  /**
431
165
  * Validates that a user ID is a valid `sub` from one of the supported identity providers.
@@ -763,4 +497,863 @@ type PlayerSystemCuratedSnapshotEntity = PlayerSystemCuratedSnapshot & {
763
497
  version: "1.0.0";
764
498
  };
765
499
 
766
- export { type DeepReadonly, FieldBuilder, type FieldDefinition, type FieldExposure, type FieldType, type FieldTypeMap, type FieldValidator, type FieldValidatorResult, type Infer, IsoLanguageCode, type PIIEnforcement, PLAYER_SYSTEM_ACHIEVEMENT_TIERS, PLAYER_SYSTEM_ACHIEVEMENT_TRACK_STATUSES, PLAYER_SYSTEM_EVENT_KINDS, type PlayerSystemAchievementEntry, type PlayerSystemAchievementTier, type PlayerSystemAchievementTrack, type PlayerSystemAchievementTrackStatus, type PlayerSystemCuratedSnapshot, type PlayerSystemCuratedSnapshotEntity, PlayerSystemCuratedSnapshotSchema, type PlayerSystemEventEntry, type PlayerSystemEventHighlight, type PlayerSystemEventKind, type PlayerSystemNormalizedEventBatch, type PlayerSystemNormalizedEventBatchEntity, PlayerSystemNormalizedEventBatchSchema, type PlayerSystemNormalizedObservedEvent, type PlayerSystemObservedEvent, type PlayerSystemObservedEventBatch, type PlayerSystemObservedEventBatchEntity, PlayerSystemObservedEventBatchSchema, type RefEntityId, type Schema, type SchemaOptions, type SchemaShape, type SchemaUpgradeFunction, type SchemaUpgradeResult, type SchemaUpgradeSpec, type SchemaUpgradeStep, type SerializeOptions, type ValidateCompositionOptions, type ValidationIssue, type ValidationIssueInput, type ValidationResult, createComponentSchema, createSchema, field, getAllComponentSchemas, getAllSchemas, getComponentSchema, getSchemaForType, isExtensionSingleton, isExtensionSubtag, isIsoLanguageCode, isPrivateUseSingleton, isPrivateUseSubtag, isRegionSubtag, isScriptSubtag, isVariantSubtag, isoCountryCodes, isoCurrencyCodes, registerComponentSchema, renderSchemaDescription, validateCountryCode, validateCurrencyCode, validateDateTimeISO, validateEmail, validateLanguage, validateName, validatePercentage, validatePhone, validateRichText, validateSafeText, validateSemVer, validateUUID, validateUrl, validateUserId, validateUserIdArray };
500
+ /**
501
+ * Canonical Unicode normalization data shared by every v1 narrative
502
+ * processor.
503
+ */
504
+ declare const FEEDBACK_UNICODE_NORMALIZATION_PROFILE: "unicode-15.1.0-nfkc-v1";
505
+ /** Exact progressive bug cooldown ladder, in seconds. */
506
+ declare const FEEDBACK_BUG_COOLDOWN_SECONDS: readonly [number, number, number, number, number];
507
+ /** Exact post-review suppression period, in seconds. */
508
+ declare const FEEDBACK_REVIEW_COOLDOWN_SECONDS: number;
509
+ /** Stable issue types accepted by bug-report intake. */
510
+ declare const FEEDBACK_ISSUE_TYPES: readonly ["visual-layout", "functionality", "gameplay", "performance-stability", "accessibility", "content-localisation", "account-access", "privacy-security", "other"];
511
+ /** Issue types that may be persisted after intake routing. */
512
+ declare const FEEDBACK_PERSISTABLE_ISSUE_TYPES: ("visual-layout" | "functionality" | "gameplay" | "performance-stability" | "accessibility" | "content-localisation" | "account-access" | "other")[];
513
+ /** Stable severity scale and translation keys for accessible star controls. */
514
+ declare const FEEDBACK_SEVERITY_LEVELS: readonly [{
515
+ readonly value: 1;
516
+ readonly id: "cosmetic";
517
+ readonly labelKey: "feedback.severity.cosmetic";
518
+ }, {
519
+ readonly value: 2;
520
+ readonly id: "minor";
521
+ readonly labelKey: "feedback.severity.minor";
522
+ }, {
523
+ readonly value: 3;
524
+ readonly id: "disruptive";
525
+ readonly labelKey: "feedback.severity.disruptive";
526
+ }, {
527
+ readonly value: 4;
528
+ readonly id: "blocking";
529
+ readonly labelKey: "feedback.severity.blocking";
530
+ }, {
531
+ readonly value: 5;
532
+ readonly id: "critical";
533
+ readonly labelKey: "feedback.severity.critical";
534
+ }];
535
+ /** Stable satisfaction scale and translation keys for accessible stars. */
536
+ declare const FEEDBACK_SATISFACTION_LEVELS: readonly [{
537
+ readonly value: 1;
538
+ readonly id: "very-poor";
539
+ readonly labelKey: "feedback.satisfaction.very-poor";
540
+ }, {
541
+ readonly value: 2;
542
+ readonly id: "poor";
543
+ readonly labelKey: "feedback.satisfaction.poor";
544
+ }, {
545
+ readonly value: 3;
546
+ readonly id: "fair";
547
+ readonly labelKey: "feedback.satisfaction.fair";
548
+ }, {
549
+ readonly value: 4;
550
+ readonly id: "good";
551
+ readonly labelKey: "feedback.satisfaction.good";
552
+ }, {
553
+ readonly value: 5;
554
+ readonly id: "excellent";
555
+ readonly labelKey: "feedback.satisfaction.excellent";
556
+ }];
557
+ /** Closed sentiment output from the transient English classifier. */
558
+ declare const FEEDBACK_SENTIMENT_BUCKETS: readonly ["very-negative", "negative", "mixed", "neutral", "positive", "very-positive", "not-detected"];
559
+ /** Closed intent output from the transient classifier. */
560
+ declare const FEEDBACK_INTENT_IDS: readonly ["visual-layout", "functionality", "gameplay", "performance-stability", "accessibility", "content-localisation", "account-access", "other", "praise", "suggestion", "confusion", "frustration"];
561
+ /** Closed theme output from the transient classifier. */
562
+ declare const FEEDBACK_THEME_IDS: readonly ["navigation", "visual-design", "game-controls", "rendering", "responsiveness", "stability", "accessibility", "localisation", "account-access", "overall-experience", "other"];
563
+ /** Closed site-section identifiers; arbitrary routes and URLs are forbidden. */
564
+ declare const FEEDBACK_SURFACE_IDS: readonly ["site.about", "admin.analytics", "admin.capabilities", "admin.feature-flags", "admin.feedback", "admin.moderation", "admin.users", "site.chatbot", "site.generator", "site.gpu-demo", "site.home", "game.player-system", "account.profile", "site.video"];
565
+ /** Canonical capability-projection metadata for every feedback surface. */
566
+ declare const FEEDBACK_SURFACE_DEFINITIONS: readonly [{
567
+ readonly id: "site.about";
568
+ readonly labelKey: "feedback.surface.about";
569
+ readonly kind: "public";
570
+ readonly gameDiagnosticsEligible: false;
571
+ }, {
572
+ readonly id: "admin.analytics";
573
+ readonly labelKey: "feedback.surface.adminAnalytics";
574
+ readonly kind: "admin";
575
+ readonly gameDiagnosticsEligible: false;
576
+ }, {
577
+ readonly id: "admin.capabilities";
578
+ readonly labelKey: "feedback.surface.adminCapabilities";
579
+ readonly kind: "admin";
580
+ readonly gameDiagnosticsEligible: false;
581
+ }, {
582
+ readonly id: "admin.feature-flags";
583
+ readonly labelKey: "feedback.surface.adminFeatureFlags";
584
+ readonly kind: "admin";
585
+ readonly gameDiagnosticsEligible: false;
586
+ }, {
587
+ readonly id: "admin.feedback";
588
+ readonly labelKey: "feedback.surface.adminFeedback";
589
+ readonly kind: "admin";
590
+ readonly gameDiagnosticsEligible: false;
591
+ }, {
592
+ readonly id: "admin.moderation";
593
+ readonly labelKey: "feedback.surface.adminModeration";
594
+ readonly kind: "admin";
595
+ readonly gameDiagnosticsEligible: false;
596
+ }, {
597
+ readonly id: "admin.users";
598
+ readonly labelKey: "feedback.surface.adminUsers";
599
+ readonly kind: "admin";
600
+ readonly gameDiagnosticsEligible: false;
601
+ }, {
602
+ readonly id: "site.chatbot";
603
+ readonly labelKey: "feedback.surface.chatbot";
604
+ readonly kind: "public";
605
+ readonly gameDiagnosticsEligible: false;
606
+ }, {
607
+ readonly id: "site.generator";
608
+ readonly labelKey: "feedback.surface.generator";
609
+ readonly kind: "game";
610
+ readonly gameDiagnosticsEligible: true;
611
+ }, {
612
+ readonly id: "site.gpu-demo";
613
+ readonly labelKey: "feedback.surface.gpuDemo";
614
+ readonly kind: "game";
615
+ readonly gameDiagnosticsEligible: true;
616
+ }, {
617
+ readonly id: "site.home";
618
+ readonly labelKey: "feedback.surface.home";
619
+ readonly kind: "public";
620
+ readonly gameDiagnosticsEligible: false;
621
+ }, {
622
+ readonly id: "game.player-system";
623
+ readonly labelKey: "feedback.surface.playerSystem";
624
+ readonly kind: "game";
625
+ readonly gameDiagnosticsEligible: false;
626
+ }, {
627
+ readonly id: "account.profile";
628
+ readonly labelKey: "feedback.surface.profile";
629
+ readonly kind: "authenticated";
630
+ readonly gameDiagnosticsEligible: false;
631
+ }, {
632
+ readonly id: "site.video";
633
+ readonly labelKey: "feedback.surface.video";
634
+ readonly kind: "public";
635
+ readonly gameDiagnosticsEligible: false;
636
+ }];
637
+ /** Closed reasons for falling back to explicit structured-only submission. */
638
+ declare const FEEDBACK_STRUCTURED_ONLY_REASON_CODES: readonly ["analysis-unavailable", "invalid-envelope", "invalid-sensitive-payload", "language-not-enabled", "request-too-large", "length-required"];
639
+ /** Pinned privacy policy versions permitted in retained analysis. */
640
+ declare const FEEDBACK_PRIVACY_POLICY_VERSIONS: readonly ["feedback-privacy-en-v1"];
641
+ /** Pinned local model versions permitted in retained analysis. */
642
+ declare const FEEDBACK_ANALYSIS_MODEL_VERSIONS: readonly ["feedback-en-rules-v1"];
643
+ /** Bug issue-type identifier. */
644
+ type FeedbackIssueType = (typeof FEEDBACK_ISSUE_TYPES)[number];
645
+ /** Persistable issue type after confidential security routing. */
646
+ type FeedbackPersistableIssueType = (typeof FEEDBACK_PERSISTABLE_ISSUE_TYPES)[number];
647
+ /** One-to-five bug severity. */
648
+ type FeedbackSeverity = (typeof FEEDBACK_SEVERITY_LEVELS)[number]["value"];
649
+ /** One-to-five satisfaction score. */
650
+ type FeedbackSatisfaction = (typeof FEEDBACK_SATISFACTION_LEVELS)[number]["value"];
651
+ /** Closed transient sentiment bucket. */
652
+ type FeedbackSentiment = (typeof FEEDBACK_SENTIMENT_BUCKETS)[number];
653
+ /** Closed transient intent identifier. */
654
+ type FeedbackIntentId = (typeof FEEDBACK_INTENT_IDS)[number];
655
+ /** Closed transient theme identifier. */
656
+ type FeedbackThemeId = (typeof FEEDBACK_THEME_IDS)[number];
657
+ /** Closed site-section identifier eligible for capability projection. */
658
+ type FeedbackSurfaceId = (typeof FEEDBACK_SURFACE_IDS)[number];
659
+ /** Supported rich-text mark. */
660
+ type FeedbackRichTextMark = "bold" | "italic" | "underline";
661
+ /** Text leaf in the transient rich-text AST. */
662
+ interface FeedbackRichTextNode {
663
+ type: "text";
664
+ text: string;
665
+ marks?: readonly FeedbackRichTextMark[];
666
+ }
667
+ /** Paragraph or bullet-list item in the transient rich-text AST. */
668
+ type FeedbackRichTextBlock = {
669
+ type: "paragraph";
670
+ depth: number;
671
+ children: readonly FeedbackRichTextNode[];
672
+ } | {
673
+ type: "listItem";
674
+ listType: "bullet";
675
+ depth: number;
676
+ children: readonly FeedbackRichTextNode[];
677
+ };
678
+ /** Browser/scanner interoperable transient document. */
679
+ interface FeedbackRichTextDocument {
680
+ type: "doc";
681
+ schemaVersion: "1";
682
+ children: readonly FeedbackRichTextBlock[];
683
+ version: typeof FEEDBACK_CONTRACT_VERSION;
684
+ }
685
+ /** Browser/scanner interoperable encrypted narrative envelope. */
686
+ interface FeedbackEncryptedNarrativeEnvelope {
687
+ type: "feedback-encrypted-narrative-envelope";
688
+ version: typeof FEEDBACK_CONTRACT_VERSION;
689
+ schemaVersion: "1";
690
+ keyId: string;
691
+ algorithm: "RSA-OAEP-256+A256GCM";
692
+ wrappedKey: string;
693
+ iv: string;
694
+ ciphertext: string;
695
+ authenticationTag: string;
696
+ }
697
+ interface FeedbackTransientAnalysisRequestBase {
698
+ type: "feedback-transient-analysis-request";
699
+ version: typeof FEEDBACK_CONTRACT_VERSION;
700
+ schemaVersion: "1";
701
+ requestId: string;
702
+ deterministicRedactionCount: number;
703
+ envelope: FeedbackEncryptedNarrativeEnvelope;
704
+ }
705
+ /**
706
+ * One-use bug analysis request bound to a closed surface that the service
707
+ * must authorise before handing ciphertext to the private scanner.
708
+ */
709
+ interface FeedbackBugTransientAnalysisRequest extends FeedbackTransientAnalysisRequestBase {
710
+ purpose: "bug";
711
+ surfaceId: FeedbackSurfaceId;
712
+ }
713
+ /** One-use satisfaction-review analysis request with no site surface. */
714
+ interface FeedbackReviewTransientAnalysisRequest extends FeedbackTransientAnalysisRequestBase {
715
+ purpose: "review";
716
+ surfaceId?: never;
717
+ }
718
+ /** Closed purpose-discriminated request that must never be persisted or logged. */
719
+ type FeedbackTransientAnalysisRequest = FeedbackBugTransientAnalysisRequest | FeedbackReviewTransientAnalysisRequest;
720
+ /** Typed result for the purpose-discriminated transient request validator. */
721
+ type FeedbackTransientAnalysisRequestValidationResult = {
722
+ readonly valid: true;
723
+ readonly value: FeedbackTransientAnalysisRequest;
724
+ readonly errors?: never;
725
+ readonly issues?: never;
726
+ } | {
727
+ readonly valid: false;
728
+ readonly value?: never;
729
+ readonly errors: readonly string[];
730
+ readonly issues?: readonly ValidationIssue[];
731
+ };
732
+ /** Closed classifier fields that may be persisted. */
733
+ interface FeedbackDerivedAnalysis {
734
+ type: "feedback-derived-analysis";
735
+ version: typeof FEEDBACK_CONTRACT_VERSION;
736
+ status: "analyzed" | "structured-only";
737
+ sentiment?: FeedbackSentiment;
738
+ intentIds: readonly FeedbackIntentId[];
739
+ themeIds: readonly FeedbackThemeId[];
740
+ confidence?: "low" | "medium" | "high";
741
+ policyVersion: string;
742
+ modelVersion: string;
743
+ deterministicRedactionCount: number;
744
+ scannerRedactionCount: number;
745
+ }
746
+ /** Ephemeral one-use scanner receipt. */
747
+ interface FeedbackAnalysisReceipt extends Omit<FeedbackDerivedAnalysis, "type" | "status"> {
748
+ type: "feedback-analysis-receipt";
749
+ status: "analyzed";
750
+ receiptId: string;
751
+ analyzedAt: string;
752
+ }
753
+ /** Identifier-free immutable bug packet. */
754
+ interface FeedbackBugPacket {
755
+ type: "feedback-bug-packet";
756
+ version: typeof FEEDBACK_CONTRACT_VERSION;
757
+ packetId: string;
758
+ acceptedAt: string;
759
+ surfaceId: string;
760
+ issueType: FeedbackPersistableIssueType;
761
+ severity: FeedbackSeverity;
762
+ releaseId: string;
763
+ buildId: string;
764
+ analysis?: FeedbackDerivedAnalysis;
765
+ gameDiagnostics?: FeedbackGameDiagnostics;
766
+ }
767
+ /** Identifier-free immutable satisfaction packet. */
768
+ interface FeedbackReviewPacket {
769
+ type: "feedback-review-packet";
770
+ version: typeof FEEDBACK_CONTRACT_VERSION;
771
+ packetId: string;
772
+ acceptedAt: string;
773
+ satisfaction: FeedbackSatisfaction;
774
+ analysis?: FeedbackDerivedAnalysis;
775
+ }
776
+ /** Count bucket used by materialized feedback reports. */
777
+ interface FeedbackCountBucket {
778
+ id: string;
779
+ count: number;
780
+ }
781
+ /** A weekly public point that reveals nothing when the privacy threshold fails. */
782
+ type FeedbackPublicWeeklyPoint = {
783
+ weekStart: string;
784
+ state: "suppressed";
785
+ } | {
786
+ weekStart: string;
787
+ state: "published";
788
+ acceptedReviewCount: number;
789
+ averageStars: number;
790
+ };
791
+ /** Thresholded preceding-window facts used to derive the public trend. */
792
+ interface FeedbackPublicComparison {
793
+ previousAcceptedReviewCount: number;
794
+ previousAverageStars: number;
795
+ deltaStars: number;
796
+ }
797
+ interface FeedbackPublicSummaryBase {
798
+ type: "feedback-public-summary";
799
+ version: typeof FEEDBACK_CONTRACT_VERSION;
800
+ snapshotId: string;
801
+ generatedAt: string;
802
+ asOf: string;
803
+ freshness: "fresh" | "stale";
804
+ reportAgeSeconds: number;
805
+ rollingWindowDays: 90;
806
+ weeklyPoints: readonly FeedbackPublicWeeklyPoint[];
807
+ }
808
+ /** Daily read model that omits every public metric below ten reviews. */
809
+ type FeedbackPublicSummary = (FeedbackPublicSummaryBase & {
810
+ state: "suppressed";
811
+ }) | (FeedbackPublicSummaryBase & {
812
+ state: "published";
813
+ acceptedReviewCount: number;
814
+ averageStars: number;
815
+ comparison?: FeedbackPublicComparison;
816
+ trend?: "up" | "flat" | "down";
817
+ });
818
+ /** AST used only inside the transient no-retention narrative scanner. */
819
+ declare const FeedbackRichTextAstSchema: Schema<{
820
+ schemaVersion: FieldBuilder<"1", "1">;
821
+ children: FieldBuilder<unknown, unknown>;
822
+ }>;
823
+ /** Encrypted outer envelope accepted by privacy-specific middleware. */
824
+ declare const FeedbackEncryptedNarrativeEnvelopeSchema: Schema<{
825
+ schemaVersion: FieldBuilder<"1", "1">;
826
+ keyId: FieldBuilder<string, string>;
827
+ algorithm: FieldBuilder<"RSA-OAEP-256+A256GCM", "RSA-OAEP-256+A256GCM">;
828
+ wrappedKey: FieldBuilder<string, string>;
829
+ iv: FieldBuilder<string, string>;
830
+ ciphertext: FieldBuilder<string, string>;
831
+ authenticationTag: FieldBuilder<string, string>;
832
+ type?: FieldBuilder<"feedback-encrypted-narrative-envelope", "feedback-encrypted-narrative-envelope"> | undefined;
833
+ version?: FieldBuilder<"1.0.0", "1.0.0"> | undefined;
834
+ }>;
835
+ /** Transient scanner request; this contract must never be stored or logged. */
836
+ declare const FeedbackTransientAnalysisRequestSchema: Schema<{
837
+ schemaVersion: FieldBuilder<"1", "1">;
838
+ requestId: FieldBuilder<string, string>;
839
+ purpose: FieldBuilder<"bug" | "review", "bug" | "review">;
840
+ surfaceId: FieldBuilder<"site.generator" | "site.gpu-demo" | "site.about" | "admin.analytics" | "admin.capabilities" | "admin.feature-flags" | "admin.feedback" | "admin.moderation" | "admin.users" | "site.chatbot" | "site.home" | "game.player-system" | "account.profile" | "site.video", "site.generator" | "site.gpu-demo" | "site.about" | "admin.analytics" | "admin.capabilities" | "admin.feature-flags" | "admin.feedback" | "admin.moderation" | "admin.users" | "site.chatbot" | "site.home" | "game.player-system" | "account.profile" | "site.video">;
841
+ deterministicRedactionCount: FieldBuilder<number, number>;
842
+ envelope: FieldBuilder<{
843
+ schemaVersion: FieldBuilder<"1", "1">;
844
+ keyId: FieldBuilder<string, string>;
845
+ algorithm: FieldBuilder<"RSA-OAEP-256+A256GCM", "RSA-OAEP-256+A256GCM">;
846
+ wrappedKey: FieldBuilder<string, string>;
847
+ iv: FieldBuilder<string, string>;
848
+ ciphertext: FieldBuilder<string, string>;
849
+ authenticationTag: FieldBuilder<string, string>;
850
+ type?: FieldBuilder<"feedback-encrypted-narrative-envelope", "feedback-encrypted-narrative-envelope"> | undefined;
851
+ version?: FieldBuilder<"1.0.0", "1.0.0"> | undefined;
852
+ }, {
853
+ schemaVersion: FieldBuilder<"1", "1">;
854
+ keyId: FieldBuilder<string, string>;
855
+ algorithm: FieldBuilder<"RSA-OAEP-256+A256GCM", "RSA-OAEP-256+A256GCM">;
856
+ wrappedKey: FieldBuilder<string, string>;
857
+ iv: FieldBuilder<string, string>;
858
+ ciphertext: FieldBuilder<string, string>;
859
+ authenticationTag: FieldBuilder<string, string>;
860
+ type?: FieldBuilder<"feedback-encrypted-narrative-envelope", "feedback-encrypted-narrative-envelope"> | undefined;
861
+ version?: FieldBuilder<"1.0.0", "1.0.0"> | undefined;
862
+ }>;
863
+ }>;
864
+ /**
865
+ * Validate and clone a transient request while preserving its purpose
866
+ * discriminator for TypeScript consumers.
867
+ */
868
+ declare const validateFeedbackTransientAnalysisRequest: (input: unknown) => FeedbackTransientAnalysisRequestValidationResult;
869
+ /** Identifier-free, closed classifier output safe to copy into a packet. */
870
+ declare const FeedbackAnalysisReceiptSchema: Schema<{
871
+ analyzedAt: FieldBuilder<string, string>;
872
+ status: FieldBuilder<"analyzed" | "structured-only", "analyzed" | "structured-only">;
873
+ sentiment: FieldBuilder<"very-negative" | "negative" | "mixed" | "neutral" | "positive" | "very-positive" | "not-detected", "very-negative" | "negative" | "mixed" | "neutral" | "positive" | "very-positive" | "not-detected">;
874
+ intentIds: FieldBuilder<unknown, unknown>;
875
+ themeIds: FieldBuilder<unknown, unknown>;
876
+ confidence: FieldBuilder<"low" | "high" | "medium", "low" | "high" | "medium">;
877
+ policyVersion: FieldBuilder<"feedback-privacy-en-v1", "feedback-privacy-en-v1">;
878
+ modelVersion: FieldBuilder<"feedback-en-rules-v1", "feedback-en-rules-v1">;
879
+ deterministicRedactionCount: FieldBuilder<number, number>;
880
+ scannerRedactionCount: FieldBuilder<number, number>;
881
+ type?: FieldBuilder<"feedback-derived-analysis", "feedback-derived-analysis"> | undefined;
882
+ version?: FieldBuilder<"1.0.0", "1.0.0"> | undefined;
883
+ receiptId: FieldBuilder<string, string>;
884
+ }>;
885
+ /**
886
+ * Persistable classifier projection. Unlike the transient receipt it contains
887
+ * no receipt identifier or scanner timestamp that could enable cross-boundary
888
+ * joining.
889
+ */
890
+ declare const FeedbackDerivedAnalysisSchema: Schema<{
891
+ status: FieldBuilder<"analyzed" | "structured-only", "analyzed" | "structured-only">;
892
+ sentiment: FieldBuilder<"very-negative" | "negative" | "mixed" | "neutral" | "positive" | "very-positive" | "not-detected", "very-negative" | "negative" | "mixed" | "neutral" | "positive" | "very-positive" | "not-detected">;
893
+ intentIds: FieldBuilder<unknown, unknown>;
894
+ themeIds: FieldBuilder<unknown, unknown>;
895
+ confidence: FieldBuilder<"low" | "high" | "medium", "low" | "high" | "medium">;
896
+ policyVersion: FieldBuilder<"feedback-privacy-en-v1", "feedback-privacy-en-v1">;
897
+ modelVersion: FieldBuilder<"feedback-en-rules-v1", "feedback-en-rules-v1">;
898
+ deterministicRedactionCount: FieldBuilder<number, number>;
899
+ scannerRedactionCount: FieldBuilder<number, number>;
900
+ type?: FieldBuilder<"feedback-derived-analysis", "feedback-derived-analysis"> | undefined;
901
+ version?: FieldBuilder<"1.0.0", "1.0.0"> | undefined;
902
+ }>;
903
+ /** Capability-filtered surface catalog with no hidden entitlement metadata. */
904
+ declare const FeedbackSurfaceCatalogSchema: Schema<{
905
+ generatedAt: FieldBuilder<string, string>;
906
+ catalogVersion: FieldBuilder<string, string>;
907
+ surfaces: FieldBuilder<unknown, unknown>;
908
+ }>;
909
+ /** Capability-filtered surface catalog and effective feedback eligibility. */
910
+ declare const FeedbackContextSchema: Schema<{
911
+ generatedAt: FieldBuilder<string, string>;
912
+ catalogVersion: FieldBuilder<string, string>;
913
+ surfaces: FieldBuilder<unknown, unknown>;
914
+ selectedSurfaceId: FieldBuilder<"site.generator" | "site.gpu-demo" | "site.about" | "admin.analytics" | "admin.capabilities" | "admin.feature-flags" | "admin.feedback" | "admin.moderation" | "admin.users" | "site.chatbot" | "site.home" | "game.player-system" | "account.profile" | "site.video", "site.generator" | "site.gpu-demo" | "site.about" | "admin.analytics" | "admin.capabilities" | "admin.feature-flags" | "admin.feedback" | "admin.moderation" | "admin.users" | "site.chatbot" | "site.home" | "game.player-system" | "account.profile" | "site.video">;
915
+ flags: FieldBuilder<{
916
+ bugReport: FieldBuilder<boolean, boolean>;
917
+ review: FieldBuilder<boolean, boolean>;
918
+ transientAnalysis: FieldBuilder<boolean, boolean>;
919
+ reporting: FieldBuilder<boolean, boolean>;
920
+ admin: FieldBuilder<boolean, boolean>;
921
+ mcp: FieldBuilder<boolean, boolean>;
922
+ publicHonesty: FieldBuilder<boolean, boolean>;
923
+ gameDiagnostics: FieldBuilder<boolean, boolean>;
924
+ anonymous: FieldBuilder<boolean, boolean>;
925
+ }, {
926
+ bugReport: FieldBuilder<boolean, boolean>;
927
+ review: FieldBuilder<boolean, boolean>;
928
+ transientAnalysis: FieldBuilder<boolean, boolean>;
929
+ reporting: FieldBuilder<boolean, boolean>;
930
+ admin: FieldBuilder<boolean, boolean>;
931
+ mcp: FieldBuilder<boolean, boolean>;
932
+ publicHonesty: FieldBuilder<boolean, boolean>;
933
+ gameDiagnostics: FieldBuilder<boolean, boolean>;
934
+ anonymous: FieldBuilder<boolean, boolean>;
935
+ }>;
936
+ eligibility: FieldBuilder<{
937
+ bugReport: FieldBuilder<boolean, boolean>;
938
+ review: FieldBuilder<boolean, boolean>;
939
+ gameDiagnostics: FieldBuilder<boolean, boolean>;
940
+ bugAvailableAt: FieldBuilder<string, string>;
941
+ reviewAvailableAt: FieldBuilder<string, string>;
942
+ bugRetryAfterSeconds: FieldBuilder<number, number>;
943
+ }, {
944
+ bugReport: FieldBuilder<boolean, boolean>;
945
+ review: FieldBuilder<boolean, boolean>;
946
+ gameDiagnostics: FieldBuilder<boolean, boolean>;
947
+ bugAvailableAt: FieldBuilder<string, string>;
948
+ reviewAvailableAt: FieldBuilder<string, string>;
949
+ bugRetryAfterSeconds: FieldBuilder<number, number>;
950
+ }>;
951
+ ingestionKey: FieldBuilder<{
952
+ keyId: FieldBuilder<string, string>;
953
+ algorithm: FieldBuilder<"RSA-OAEP-256", "RSA-OAEP-256">;
954
+ publicJwk: FieldBuilder<{
955
+ kty: FieldBuilder<"RSA", "RSA">;
956
+ alg: FieldBuilder<"RSA-OAEP-256", "RSA-OAEP-256">;
957
+ use: FieldBuilder<"enc", "enc">;
958
+ key_ops: FieldBuilder<unknown, unknown>;
959
+ n: FieldBuilder<string, string>;
960
+ e: FieldBuilder<string, string>;
961
+ ext: FieldBuilder<boolean, boolean>;
962
+ }, {
963
+ kty: FieldBuilder<"RSA", "RSA">;
964
+ alg: FieldBuilder<"RSA-OAEP-256", "RSA-OAEP-256">;
965
+ use: FieldBuilder<"enc", "enc">;
966
+ key_ops: FieldBuilder<unknown, unknown>;
967
+ n: FieldBuilder<string, string>;
968
+ e: FieldBuilder<string, string>;
969
+ ext: FieldBuilder<boolean, boolean>;
970
+ }>;
971
+ expiresAt: FieldBuilder<string, string>;
972
+ }, {
973
+ keyId: FieldBuilder<string, string>;
974
+ algorithm: FieldBuilder<"RSA-OAEP-256", "RSA-OAEP-256">;
975
+ publicJwk: FieldBuilder<{
976
+ kty: FieldBuilder<"RSA", "RSA">;
977
+ alg: FieldBuilder<"RSA-OAEP-256", "RSA-OAEP-256">;
978
+ use: FieldBuilder<"enc", "enc">;
979
+ key_ops: FieldBuilder<unknown, unknown>;
980
+ n: FieldBuilder<string, string>;
981
+ e: FieldBuilder<string, string>;
982
+ ext: FieldBuilder<boolean, boolean>;
983
+ }, {
984
+ kty: FieldBuilder<"RSA", "RSA">;
985
+ alg: FieldBuilder<"RSA-OAEP-256", "RSA-OAEP-256">;
986
+ use: FieldBuilder<"enc", "enc">;
987
+ key_ops: FieldBuilder<unknown, unknown>;
988
+ n: FieldBuilder<string, string>;
989
+ e: FieldBuilder<string, string>;
990
+ ext: FieldBuilder<boolean, boolean>;
991
+ }>;
992
+ expiresAt: FieldBuilder<string, string>;
993
+ }>;
994
+ }>;
995
+ /** Dirty structured fields sent by focus-loss autosave. */
996
+ declare const FeedbackDraftUpsertRequestSchema: Schema<{
997
+ surfaceId: FieldBuilder<"site.generator" | "site.gpu-demo" | "site.about" | "admin.analytics" | "admin.capabilities" | "admin.feature-flags" | "admin.feedback" | "admin.moderation" | "admin.users" | "site.chatbot" | "site.home" | "game.player-system" | "account.profile" | "site.video", "site.generator" | "site.gpu-demo" | "site.about" | "admin.analytics" | "admin.capabilities" | "admin.feature-flags" | "admin.feedback" | "admin.moderation" | "admin.users" | "site.chatbot" | "site.home" | "game.player-system" | "account.profile" | "site.video">;
998
+ issueType: FieldBuilder<"visual-layout" | "functionality" | "gameplay" | "performance-stability" | "accessibility" | "content-localisation" | "account-access" | "privacy-security" | "other", "visual-layout" | "functionality" | "gameplay" | "performance-stability" | "accessibility" | "content-localisation" | "account-access" | "privacy-security" | "other">;
999
+ severity: FieldBuilder<number, number>;
1000
+ satisfaction: FieldBuilder<number, number>;
1001
+ analysisReceiptId: FieldBuilder<string, string>;
1002
+ draftId: FieldBuilder<string, string>;
1003
+ kind: FieldBuilder<"bug" | "review", "bug" | "review">;
1004
+ revision: FieldBuilder<number, number>;
1005
+ }>;
1006
+ /** Short-lived structured draft packet; narrative and ciphertext are excluded. */
1007
+ declare const FeedbackDraftPacketSchema: Schema<{
1008
+ draftId: FieldBuilder<string, string>;
1009
+ kind: FieldBuilder<"bug" | "review", "bug" | "review">;
1010
+ revision: FieldBuilder<number, number>;
1011
+ surfaceId: FieldBuilder<"site.generator" | "site.gpu-demo" | "site.about" | "admin.analytics" | "admin.capabilities" | "admin.feature-flags" | "admin.feedback" | "admin.moderation" | "admin.users" | "site.chatbot" | "site.home" | "game.player-system" | "account.profile" | "site.video", "site.generator" | "site.gpu-demo" | "site.about" | "admin.analytics" | "admin.capabilities" | "admin.feature-flags" | "admin.feedback" | "admin.moderation" | "admin.users" | "site.chatbot" | "site.home" | "game.player-system" | "account.profile" | "site.video">;
1012
+ issueType: FieldBuilder<"visual-layout" | "functionality" | "gameplay" | "performance-stability" | "accessibility" | "content-localisation" | "account-access" | "privacy-security" | "other", "visual-layout" | "functionality" | "gameplay" | "performance-stability" | "accessibility" | "content-localisation" | "account-access" | "privacy-security" | "other">;
1013
+ severity: FieldBuilder<number, number>;
1014
+ satisfaction: FieldBuilder<number, number>;
1015
+ analysis: FieldBuilder<{
1016
+ status: FieldBuilder<"analyzed" | "structured-only", "analyzed" | "structured-only">;
1017
+ sentiment: FieldBuilder<"very-negative" | "negative" | "mixed" | "neutral" | "positive" | "very-positive" | "not-detected", "very-negative" | "negative" | "mixed" | "neutral" | "positive" | "very-positive" | "not-detected">;
1018
+ intentIds: FieldBuilder<unknown, unknown>;
1019
+ themeIds: FieldBuilder<unknown, unknown>;
1020
+ confidence: FieldBuilder<"low" | "high" | "medium", "low" | "high" | "medium">;
1021
+ policyVersion: FieldBuilder<"feedback-privacy-en-v1", "feedback-privacy-en-v1">;
1022
+ modelVersion: FieldBuilder<"feedback-en-rules-v1", "feedback-en-rules-v1">;
1023
+ deterministicRedactionCount: FieldBuilder<number, number>;
1024
+ scannerRedactionCount: FieldBuilder<number, number>;
1025
+ type?: FieldBuilder<"feedback-derived-analysis", "feedback-derived-analysis"> | undefined;
1026
+ version?: FieldBuilder<"1.0.0", "1.0.0"> | undefined;
1027
+ }, {
1028
+ status: FieldBuilder<"analyzed" | "structured-only", "analyzed" | "structured-only">;
1029
+ sentiment: FieldBuilder<"very-negative" | "negative" | "mixed" | "neutral" | "positive" | "very-positive" | "not-detected", "very-negative" | "negative" | "mixed" | "neutral" | "positive" | "very-positive" | "not-detected">;
1030
+ intentIds: FieldBuilder<unknown, unknown>;
1031
+ themeIds: FieldBuilder<unknown, unknown>;
1032
+ confidence: FieldBuilder<"low" | "high" | "medium", "low" | "high" | "medium">;
1033
+ policyVersion: FieldBuilder<"feedback-privacy-en-v1", "feedback-privacy-en-v1">;
1034
+ modelVersion: FieldBuilder<"feedback-en-rules-v1", "feedback-en-rules-v1">;
1035
+ deterministicRedactionCount: FieldBuilder<number, number>;
1036
+ scannerRedactionCount: FieldBuilder<number, number>;
1037
+ type?: FieldBuilder<"feedback-derived-analysis", "feedback-derived-analysis"> | undefined;
1038
+ version?: FieldBuilder<"1.0.0", "1.0.0"> | undefined;
1039
+ }>;
1040
+ serverUpdatedAt: FieldBuilder<string, string>;
1041
+ expiresAt: FieldBuilder<string, string>;
1042
+ }>;
1043
+ /** ETag-external response after a structured draft is durably saved. */
1044
+ declare const FeedbackDraftReceiptSchema: Schema<{
1045
+ draftId: FieldBuilder<string, string>;
1046
+ revision: FieldBuilder<number, number>;
1047
+ savedAt: FieldBuilder<string, string>;
1048
+ expiresAt: FieldBuilder<string, string>;
1049
+ }>;
1050
+ /**
1051
+ * Explicit final bug submission request. Transport idempotency belongs only
1052
+ * in the HTTP Idempotency-Key header and is not part of this JSON contract.
1053
+ */
1054
+ declare const FeedbackBugSubmissionRequestSchema: Schema<{
1055
+ draftId: FieldBuilder<string, string>;
1056
+ surfaceId: FieldBuilder<"site.generator" | "site.gpu-demo" | "site.about" | "admin.analytics" | "admin.capabilities" | "admin.feature-flags" | "admin.feedback" | "admin.moderation" | "admin.users" | "site.chatbot" | "site.home" | "game.player-system" | "account.profile" | "site.video", "site.generator" | "site.gpu-demo" | "site.about" | "admin.analytics" | "admin.capabilities" | "admin.feature-flags" | "admin.feedback" | "admin.moderation" | "admin.users" | "site.chatbot" | "site.home" | "game.player-system" | "account.profile" | "site.video">;
1057
+ issueType: FieldBuilder<"visual-layout" | "functionality" | "gameplay" | "performance-stability" | "accessibility" | "content-localisation" | "account-access" | "privacy-security" | "other", "visual-layout" | "functionality" | "gameplay" | "performance-stability" | "accessibility" | "content-localisation" | "account-access" | "privacy-security" | "other">;
1058
+ severity: FieldBuilder<number, number>;
1059
+ analysisReceiptId: FieldBuilder<string, string>;
1060
+ gameDiagnostics: FieldBuilder<{
1061
+ surfaceId: FieldBuilder<"site.generator" | "site.gpu-demo", "site.generator" | "site.gpu-demo">;
1062
+ consentConfirmed: FieldBuilder<boolean, boolean>;
1063
+ provenanceContractId: FieldBuilder<"generator.renderer-diagnostics.v1" | "gpu-demo.renderer-diagnostics.v1", "generator.renderer-diagnostics.v1" | "gpu-demo.renderer-diagnostics.v1">;
1064
+ renderer: FieldBuilder<"webgl2" | "webgpu" | "canvas2d" | "unknown", "webgl2" | "webgpu" | "canvas2d" | "unknown">;
1065
+ backend: FieldBuilder<"unknown" | "browser" | "worker", "unknown" | "browser" | "worker">;
1066
+ viewportBucket: FieldBuilder<"unknown" | "small-portrait" | "small-landscape" | "medium-portrait" | "medium-landscape" | "large-portrait" | "large-landscape", "unknown" | "small-portrait" | "small-landscape" | "medium-portrait" | "medium-landscape" | "large-portrait" | "large-landscape">;
1067
+ frameRateBucket: FieldBuilder<"unknown" | "under-15" | "15-29" | "30-59" | "60-plus", "unknown" | "under-15" | "15-29" | "30-59" | "60-plus">;
1068
+ frameTimeBucket: FieldBuilder<"unknown" | "under-17ms" | "17-33ms" | "34-66ms" | "over-66ms", "unknown" | "under-17ms" | "17-33ms" | "34-66ms" | "over-66ms">;
1069
+ featureIds: FieldBuilder<unknown, unknown>;
1070
+ counters: FieldBuilder<unknown, unknown>;
1071
+ errorCodes: FieldBuilder<unknown, unknown>;
1072
+ type?: FieldBuilder<"feedback-game-diagnostics", "feedback-game-diagnostics"> | undefined;
1073
+ version?: FieldBuilder<"1.0.0", "1.0.0"> | undefined;
1074
+ }, {
1075
+ surfaceId: FieldBuilder<"site.generator" | "site.gpu-demo", "site.generator" | "site.gpu-demo">;
1076
+ consentConfirmed: FieldBuilder<boolean, boolean>;
1077
+ provenanceContractId: FieldBuilder<"generator.renderer-diagnostics.v1" | "gpu-demo.renderer-diagnostics.v1", "generator.renderer-diagnostics.v1" | "gpu-demo.renderer-diagnostics.v1">;
1078
+ renderer: FieldBuilder<"webgl2" | "webgpu" | "canvas2d" | "unknown", "webgl2" | "webgpu" | "canvas2d" | "unknown">;
1079
+ backend: FieldBuilder<"unknown" | "browser" | "worker", "unknown" | "browser" | "worker">;
1080
+ viewportBucket: FieldBuilder<"unknown" | "small-portrait" | "small-landscape" | "medium-portrait" | "medium-landscape" | "large-portrait" | "large-landscape", "unknown" | "small-portrait" | "small-landscape" | "medium-portrait" | "medium-landscape" | "large-portrait" | "large-landscape">;
1081
+ frameRateBucket: FieldBuilder<"unknown" | "under-15" | "15-29" | "30-59" | "60-plus", "unknown" | "under-15" | "15-29" | "30-59" | "60-plus">;
1082
+ frameTimeBucket: FieldBuilder<"unknown" | "under-17ms" | "17-33ms" | "34-66ms" | "over-66ms", "unknown" | "under-17ms" | "17-33ms" | "34-66ms" | "over-66ms">;
1083
+ featureIds: FieldBuilder<unknown, unknown>;
1084
+ counters: FieldBuilder<unknown, unknown>;
1085
+ errorCodes: FieldBuilder<unknown, unknown>;
1086
+ type?: FieldBuilder<"feedback-game-diagnostics", "feedback-game-diagnostics"> | undefined;
1087
+ version?: FieldBuilder<"1.0.0", "1.0.0"> | undefined;
1088
+ }>;
1089
+ }>;
1090
+ /**
1091
+ * Explicit authenticated satisfaction-review submission request. Transport
1092
+ * idempotency belongs only in the HTTP Idempotency-Key header.
1093
+ */
1094
+ declare const FeedbackReviewSubmissionRequestSchema: Schema<{
1095
+ draftId: FieldBuilder<string, string>;
1096
+ satisfaction: FieldBuilder<number, number>;
1097
+ analysisReceiptId: FieldBuilder<string, string>;
1098
+ }>;
1099
+ /** Identifier-free response after an immutable packet is accepted. */
1100
+ declare const FeedbackAcceptanceReceiptSchema: Schema<{
1101
+ packetId: FieldBuilder<string, string>;
1102
+ kind: FieldBuilder<"bug" | "review", "bug" | "review">;
1103
+ acceptedAt: FieldBuilder<string, string>;
1104
+ nextEligibleAt: FieldBuilder<string, string>;
1105
+ }>;
1106
+ /** Safe analysis fallback; it contains neither a receipt nor narrative. */
1107
+ declare const FeedbackStructuredOnlyAnalysisResultSchema: Schema<{
1108
+ status: FieldBuilder<"structured-only-required", "structured-only-required">;
1109
+ reasonCode: FieldBuilder<"analysis-unavailable" | "invalid-envelope" | "invalid-sensitive-payload" | "language-not-enabled" | "request-too-large" | "length-required", "analysis-unavailable" | "invalid-envelope" | "invalid-sensitive-payload" | "language-not-enabled" | "request-too-large" | "length-required">;
1110
+ }>;
1111
+ /** Immutable structured bug packet for private blob storage. */
1112
+ declare const FeedbackBugPacketSchema: Schema<{
1113
+ packetId: FieldBuilder<string, string>;
1114
+ acceptedAt: FieldBuilder<string, string>;
1115
+ surfaceId: FieldBuilder<"site.generator" | "site.gpu-demo" | "site.about" | "admin.analytics" | "admin.capabilities" | "admin.feature-flags" | "admin.feedback" | "admin.moderation" | "admin.users" | "site.chatbot" | "site.home" | "game.player-system" | "account.profile" | "site.video", "site.generator" | "site.gpu-demo" | "site.about" | "admin.analytics" | "admin.capabilities" | "admin.feature-flags" | "admin.feedback" | "admin.moderation" | "admin.users" | "site.chatbot" | "site.home" | "game.player-system" | "account.profile" | "site.video">;
1116
+ issueType: FieldBuilder<"visual-layout" | "functionality" | "gameplay" | "performance-stability" | "accessibility" | "content-localisation" | "account-access" | "other", "visual-layout" | "functionality" | "gameplay" | "performance-stability" | "accessibility" | "content-localisation" | "account-access" | "other">;
1117
+ severity: FieldBuilder<number, number>;
1118
+ releaseId: FieldBuilder<string, string>;
1119
+ buildId: FieldBuilder<string, string>;
1120
+ analysis: FieldBuilder<{
1121
+ status: FieldBuilder<"analyzed" | "structured-only", "analyzed" | "structured-only">;
1122
+ sentiment: FieldBuilder<"very-negative" | "negative" | "mixed" | "neutral" | "positive" | "very-positive" | "not-detected", "very-negative" | "negative" | "mixed" | "neutral" | "positive" | "very-positive" | "not-detected">;
1123
+ intentIds: FieldBuilder<unknown, unknown>;
1124
+ themeIds: FieldBuilder<unknown, unknown>;
1125
+ confidence: FieldBuilder<"low" | "high" | "medium", "low" | "high" | "medium">;
1126
+ policyVersion: FieldBuilder<"feedback-privacy-en-v1", "feedback-privacy-en-v1">;
1127
+ modelVersion: FieldBuilder<"feedback-en-rules-v1", "feedback-en-rules-v1">;
1128
+ deterministicRedactionCount: FieldBuilder<number, number>;
1129
+ scannerRedactionCount: FieldBuilder<number, number>;
1130
+ type?: FieldBuilder<"feedback-derived-analysis", "feedback-derived-analysis"> | undefined;
1131
+ version?: FieldBuilder<"1.0.0", "1.0.0"> | undefined;
1132
+ }, {
1133
+ status: FieldBuilder<"analyzed" | "structured-only", "analyzed" | "structured-only">;
1134
+ sentiment: FieldBuilder<"very-negative" | "negative" | "mixed" | "neutral" | "positive" | "very-positive" | "not-detected", "very-negative" | "negative" | "mixed" | "neutral" | "positive" | "very-positive" | "not-detected">;
1135
+ intentIds: FieldBuilder<unknown, unknown>;
1136
+ themeIds: FieldBuilder<unknown, unknown>;
1137
+ confidence: FieldBuilder<"low" | "high" | "medium", "low" | "high" | "medium">;
1138
+ policyVersion: FieldBuilder<"feedback-privacy-en-v1", "feedback-privacy-en-v1">;
1139
+ modelVersion: FieldBuilder<"feedback-en-rules-v1", "feedback-en-rules-v1">;
1140
+ deterministicRedactionCount: FieldBuilder<number, number>;
1141
+ scannerRedactionCount: FieldBuilder<number, number>;
1142
+ type?: FieldBuilder<"feedback-derived-analysis", "feedback-derived-analysis"> | undefined;
1143
+ version?: FieldBuilder<"1.0.0", "1.0.0"> | undefined;
1144
+ }>;
1145
+ gameDiagnostics: FieldBuilder<{
1146
+ surfaceId: FieldBuilder<"site.generator" | "site.gpu-demo", "site.generator" | "site.gpu-demo">;
1147
+ consentConfirmed: FieldBuilder<boolean, boolean>;
1148
+ provenanceContractId: FieldBuilder<"generator.renderer-diagnostics.v1" | "gpu-demo.renderer-diagnostics.v1", "generator.renderer-diagnostics.v1" | "gpu-demo.renderer-diagnostics.v1">;
1149
+ renderer: FieldBuilder<"webgl2" | "webgpu" | "canvas2d" | "unknown", "webgl2" | "webgpu" | "canvas2d" | "unknown">;
1150
+ backend: FieldBuilder<"unknown" | "browser" | "worker", "unknown" | "browser" | "worker">;
1151
+ viewportBucket: FieldBuilder<"unknown" | "small-portrait" | "small-landscape" | "medium-portrait" | "medium-landscape" | "large-portrait" | "large-landscape", "unknown" | "small-portrait" | "small-landscape" | "medium-portrait" | "medium-landscape" | "large-portrait" | "large-landscape">;
1152
+ frameRateBucket: FieldBuilder<"unknown" | "under-15" | "15-29" | "30-59" | "60-plus", "unknown" | "under-15" | "15-29" | "30-59" | "60-plus">;
1153
+ frameTimeBucket: FieldBuilder<"unknown" | "under-17ms" | "17-33ms" | "34-66ms" | "over-66ms", "unknown" | "under-17ms" | "17-33ms" | "34-66ms" | "over-66ms">;
1154
+ featureIds: FieldBuilder<unknown, unknown>;
1155
+ counters: FieldBuilder<unknown, unknown>;
1156
+ errorCodes: FieldBuilder<unknown, unknown>;
1157
+ type?: FieldBuilder<"feedback-game-diagnostics", "feedback-game-diagnostics"> | undefined;
1158
+ version?: FieldBuilder<"1.0.0", "1.0.0"> | undefined;
1159
+ }, {
1160
+ surfaceId: FieldBuilder<"site.generator" | "site.gpu-demo", "site.generator" | "site.gpu-demo">;
1161
+ consentConfirmed: FieldBuilder<boolean, boolean>;
1162
+ provenanceContractId: FieldBuilder<"generator.renderer-diagnostics.v1" | "gpu-demo.renderer-diagnostics.v1", "generator.renderer-diagnostics.v1" | "gpu-demo.renderer-diagnostics.v1">;
1163
+ renderer: FieldBuilder<"webgl2" | "webgpu" | "canvas2d" | "unknown", "webgl2" | "webgpu" | "canvas2d" | "unknown">;
1164
+ backend: FieldBuilder<"unknown" | "browser" | "worker", "unknown" | "browser" | "worker">;
1165
+ viewportBucket: FieldBuilder<"unknown" | "small-portrait" | "small-landscape" | "medium-portrait" | "medium-landscape" | "large-portrait" | "large-landscape", "unknown" | "small-portrait" | "small-landscape" | "medium-portrait" | "medium-landscape" | "large-portrait" | "large-landscape">;
1166
+ frameRateBucket: FieldBuilder<"unknown" | "under-15" | "15-29" | "30-59" | "60-plus", "unknown" | "under-15" | "15-29" | "30-59" | "60-plus">;
1167
+ frameTimeBucket: FieldBuilder<"unknown" | "under-17ms" | "17-33ms" | "34-66ms" | "over-66ms", "unknown" | "under-17ms" | "17-33ms" | "34-66ms" | "over-66ms">;
1168
+ featureIds: FieldBuilder<unknown, unknown>;
1169
+ counters: FieldBuilder<unknown, unknown>;
1170
+ errorCodes: FieldBuilder<unknown, unknown>;
1171
+ type?: FieldBuilder<"feedback-game-diagnostics", "feedback-game-diagnostics"> | undefined;
1172
+ version?: FieldBuilder<"1.0.0", "1.0.0"> | undefined;
1173
+ }>;
1174
+ }>;
1175
+ /** Immutable structured review packet for private blob storage. */
1176
+ declare const FeedbackReviewPacketSchema: Schema<{
1177
+ packetId: FieldBuilder<string, string>;
1178
+ acceptedAt: FieldBuilder<string, string>;
1179
+ satisfaction: FieldBuilder<number, number>;
1180
+ analysis: FieldBuilder<{
1181
+ status: FieldBuilder<"analyzed" | "structured-only", "analyzed" | "structured-only">;
1182
+ sentiment: FieldBuilder<"very-negative" | "negative" | "mixed" | "neutral" | "positive" | "very-positive" | "not-detected", "very-negative" | "negative" | "mixed" | "neutral" | "positive" | "very-positive" | "not-detected">;
1183
+ intentIds: FieldBuilder<unknown, unknown>;
1184
+ themeIds: FieldBuilder<unknown, unknown>;
1185
+ confidence: FieldBuilder<"low" | "high" | "medium", "low" | "high" | "medium">;
1186
+ policyVersion: FieldBuilder<"feedback-privacy-en-v1", "feedback-privacy-en-v1">;
1187
+ modelVersion: FieldBuilder<"feedback-en-rules-v1", "feedback-en-rules-v1">;
1188
+ deterministicRedactionCount: FieldBuilder<number, number>;
1189
+ scannerRedactionCount: FieldBuilder<number, number>;
1190
+ type?: FieldBuilder<"feedback-derived-analysis", "feedback-derived-analysis"> | undefined;
1191
+ version?: FieldBuilder<"1.0.0", "1.0.0"> | undefined;
1192
+ }, {
1193
+ status: FieldBuilder<"analyzed" | "structured-only", "analyzed" | "structured-only">;
1194
+ sentiment: FieldBuilder<"very-negative" | "negative" | "mixed" | "neutral" | "positive" | "very-positive" | "not-detected", "very-negative" | "negative" | "mixed" | "neutral" | "positive" | "very-positive" | "not-detected">;
1195
+ intentIds: FieldBuilder<unknown, unknown>;
1196
+ themeIds: FieldBuilder<unknown, unknown>;
1197
+ confidence: FieldBuilder<"low" | "high" | "medium", "low" | "high" | "medium">;
1198
+ policyVersion: FieldBuilder<"feedback-privacy-en-v1", "feedback-privacy-en-v1">;
1199
+ modelVersion: FieldBuilder<"feedback-en-rules-v1", "feedback-en-rules-v1">;
1200
+ deterministicRedactionCount: FieldBuilder<number, number>;
1201
+ scannerRedactionCount: FieldBuilder<number, number>;
1202
+ type?: FieldBuilder<"feedback-derived-analysis", "feedback-derived-analysis"> | undefined;
1203
+ version?: FieldBuilder<"1.0.0", "1.0.0"> | undefined;
1204
+ }>;
1205
+ }>;
1206
+ /** Safe facts used to reconstruct a representative in-game view server-side. */
1207
+ declare const FeedbackGameReconstructionManifestSchema: Schema<{
1208
+ reconstructionId: FieldBuilder<string, string>;
1209
+ bugPacketId: FieldBuilder<string, string>;
1210
+ createdAt: FieldBuilder<string, string>;
1211
+ expiresAt: FieldBuilder<string, string>;
1212
+ curatedAssetSetId: FieldBuilder<string, string>;
1213
+ noticeKey: FieldBuilder<string, string>;
1214
+ diagnostics: FieldBuilder<{
1215
+ surfaceId: FieldBuilder<"site.generator" | "site.gpu-demo", "site.generator" | "site.gpu-demo">;
1216
+ consentConfirmed: FieldBuilder<boolean, boolean>;
1217
+ provenanceContractId: FieldBuilder<"generator.renderer-diagnostics.v1" | "gpu-demo.renderer-diagnostics.v1", "generator.renderer-diagnostics.v1" | "gpu-demo.renderer-diagnostics.v1">;
1218
+ renderer: FieldBuilder<"webgl2" | "webgpu" | "canvas2d" | "unknown", "webgl2" | "webgpu" | "canvas2d" | "unknown">;
1219
+ backend: FieldBuilder<"unknown" | "browser" | "worker", "unknown" | "browser" | "worker">;
1220
+ viewportBucket: FieldBuilder<"unknown" | "small-portrait" | "small-landscape" | "medium-portrait" | "medium-landscape" | "large-portrait" | "large-landscape", "unknown" | "small-portrait" | "small-landscape" | "medium-portrait" | "medium-landscape" | "large-portrait" | "large-landscape">;
1221
+ frameRateBucket: FieldBuilder<"unknown" | "under-15" | "15-29" | "30-59" | "60-plus", "unknown" | "under-15" | "15-29" | "30-59" | "60-plus">;
1222
+ frameTimeBucket: FieldBuilder<"unknown" | "under-17ms" | "17-33ms" | "34-66ms" | "over-66ms", "unknown" | "under-17ms" | "17-33ms" | "34-66ms" | "over-66ms">;
1223
+ featureIds: FieldBuilder<unknown, unknown>;
1224
+ counters: FieldBuilder<unknown, unknown>;
1225
+ errorCodes: FieldBuilder<unknown, unknown>;
1226
+ type?: FieldBuilder<"feedback-game-diagnostics", "feedback-game-diagnostics"> | undefined;
1227
+ version?: FieldBuilder<"1.0.0", "1.0.0"> | undefined;
1228
+ }, {
1229
+ surfaceId: FieldBuilder<"site.generator" | "site.gpu-demo", "site.generator" | "site.gpu-demo">;
1230
+ consentConfirmed: FieldBuilder<boolean, boolean>;
1231
+ provenanceContractId: FieldBuilder<"generator.renderer-diagnostics.v1" | "gpu-demo.renderer-diagnostics.v1", "generator.renderer-diagnostics.v1" | "gpu-demo.renderer-diagnostics.v1">;
1232
+ renderer: FieldBuilder<"webgl2" | "webgpu" | "canvas2d" | "unknown", "webgl2" | "webgpu" | "canvas2d" | "unknown">;
1233
+ backend: FieldBuilder<"unknown" | "browser" | "worker", "unknown" | "browser" | "worker">;
1234
+ viewportBucket: FieldBuilder<"unknown" | "small-portrait" | "small-landscape" | "medium-portrait" | "medium-landscape" | "large-portrait" | "large-landscape", "unknown" | "small-portrait" | "small-landscape" | "medium-portrait" | "medium-landscape" | "large-portrait" | "large-landscape">;
1235
+ frameRateBucket: FieldBuilder<"unknown" | "under-15" | "15-29" | "30-59" | "60-plus", "unknown" | "under-15" | "15-29" | "30-59" | "60-plus">;
1236
+ frameTimeBucket: FieldBuilder<"unknown" | "under-17ms" | "17-33ms" | "34-66ms" | "over-66ms", "unknown" | "under-17ms" | "17-33ms" | "34-66ms" | "over-66ms">;
1237
+ featureIds: FieldBuilder<unknown, unknown>;
1238
+ counters: FieldBuilder<unknown, unknown>;
1239
+ errorCodes: FieldBuilder<unknown, unknown>;
1240
+ type?: FieldBuilder<"feedback-game-diagnostics", "feedback-game-diagnostics"> | undefined;
1241
+ version?: FieldBuilder<"1.0.0", "1.0.0"> | undefined;
1242
+ }>;
1243
+ }>;
1244
+ /** Materialized report for one previous UTC bug-health hour. */
1245
+ declare const FeedbackHourlyBugReportSchema: Schema<{
1246
+ reportId: FieldBuilder<string, string>;
1247
+ windowStart: FieldBuilder<string, string>;
1248
+ windowEnd: FieldBuilder<string, string>;
1249
+ revision: FieldBuilder<number, number>;
1250
+ generatedAt: FieldBuilder<string, string>;
1251
+ acceptedCount: FieldBuilder<number, number>;
1252
+ rejectedCount: FieldBuilder<number, number>;
1253
+ diagnosticsAttachedCount: FieldBuilder<number, number>;
1254
+ deterministicRedactionCount: FieldBuilder<number, number>;
1255
+ scannerRedactionCount: FieldBuilder<number, number>;
1256
+ processorLagSeconds: FieldBuilder<number, number>;
1257
+ rates: FieldBuilder<{
1258
+ rejectionRate: FieldBuilder<number, number>;
1259
+ deterministicRedactionsPerAccepted: FieldBuilder<number, number>;
1260
+ scannerRedactionsPerAccepted: FieldBuilder<number, number>;
1261
+ }, {
1262
+ rejectionRate: FieldBuilder<number, number>;
1263
+ deterministicRedactionsPerAccepted: FieldBuilder<number, number>;
1264
+ scannerRedactionsPerAccepted: FieldBuilder<number, number>;
1265
+ }>;
1266
+ traffic: FieldBuilder<{
1267
+ denominator: FieldBuilder<number, number>;
1268
+ acceptedPerTenThousand: FieldBuilder<number, number>;
1269
+ }, {
1270
+ denominator: FieldBuilder<number, number>;
1271
+ acceptedPerTenThousand: FieldBuilder<number, number>;
1272
+ }>;
1273
+ targetDistribution: FieldBuilder<unknown, unknown>;
1274
+ issueTypeDistribution: FieldBuilder<unknown, unknown>;
1275
+ severityDistribution: FieldBuilder<unknown, unknown>;
1276
+ intentDistribution: FieldBuilder<unknown, unknown>;
1277
+ buildDistribution: FieldBuilder<unknown, unknown>;
1278
+ rendererDistribution: FieldBuilder<unknown, unknown>;
1279
+ backendDistribution: FieldBuilder<unknown, unknown>;
1280
+ viewportDistribution: FieldBuilder<unknown, unknown>;
1281
+ frameRateDistribution: FieldBuilder<unknown, unknown>;
1282
+ frameTimeDistribution: FieldBuilder<unknown, unknown>;
1283
+ diagnosticFeatureDistribution: FieldBuilder<unknown, unknown>;
1284
+ diagnosticCounterDistribution: FieldBuilder<unknown, unknown>;
1285
+ diagnosticErrorDistribution: FieldBuilder<unknown, unknown>;
1286
+ abuseBlockBands: FieldBuilder<unknown, unknown>;
1287
+ comparison: FieldBuilder<{
1288
+ previousHourRatio: FieldBuilder<number, number>;
1289
+ sevenDaySameHourRatio: FieldBuilder<number, number>;
1290
+ }, {
1291
+ previousHourRatio: FieldBuilder<number, number>;
1292
+ sevenDaySameHourRatio: FieldBuilder<number, number>;
1293
+ }>;
1294
+ advisories: FieldBuilder<unknown, unknown>;
1295
+ }>;
1296
+ /** Materialized daily satisfaction report. */
1297
+ declare const FeedbackDailySatisfactionReportSchema: Schema<{
1298
+ reportId: FieldBuilder<string, string>;
1299
+ windowStart: FieldBuilder<string, string>;
1300
+ windowEnd: FieldBuilder<string, string>;
1301
+ revision: FieldBuilder<number, number>;
1302
+ generatedAt: FieldBuilder<string, string>;
1303
+ processorLagSeconds: FieldBuilder<number, number>;
1304
+ acceptedReviewCount: FieldBuilder<number, number>;
1305
+ meanStars: FieldBuilder<number, number>;
1306
+ medianStars: FieldBuilder<number, number>;
1307
+ starDistribution: FieldBuilder<unknown, unknown>;
1308
+ sentimentDistribution: FieldBuilder<unknown, unknown>;
1309
+ intentDistribution: FieldBuilder<unknown, unknown>;
1310
+ rollingWindows: FieldBuilder<unknown, unknown>;
1311
+ previousPeriodDeltaStars: FieldBuilder<number, number>;
1312
+ advisories: FieldBuilder<unknown, unknown>;
1313
+ }>;
1314
+ /** Privacy-thresholded public honesty snapshot materialized once per day. */
1315
+ declare const FeedbackPublicSummarySchema: Schema<{
1316
+ snapshotId: FieldBuilder<string, string>;
1317
+ generatedAt: FieldBuilder<string, string>;
1318
+ asOf: FieldBuilder<string, string>;
1319
+ freshness: FieldBuilder<"fresh" | "stale", "fresh" | "stale">;
1320
+ reportAgeSeconds: FieldBuilder<number, number>;
1321
+ rollingWindowDays: FieldBuilder<90, 90>;
1322
+ state: FieldBuilder<"suppressed" | "published", "suppressed" | "published">;
1323
+ acceptedReviewCount: FieldBuilder<number, number>;
1324
+ averageStars: FieldBuilder<number, number>;
1325
+ trend: FieldBuilder<"flat" | "up" | "down", "flat" | "up" | "down">;
1326
+ comparison: FieldBuilder<{
1327
+ previousAcceptedReviewCount: FieldBuilder<number, number>;
1328
+ previousAverageStars: FieldBuilder<number, number>;
1329
+ deltaStars: FieldBuilder<number, number>;
1330
+ }, {
1331
+ previousAcceptedReviewCount: FieldBuilder<number, number>;
1332
+ previousAverageStars: FieldBuilder<number, number>;
1333
+ deltaStars: FieldBuilder<number, number>;
1334
+ }>;
1335
+ weeklyPoints: FieldBuilder<unknown, unknown>;
1336
+ }>;
1337
+ /** Conditional-write checkpoint for replay-safe timer processors. */
1338
+ declare const FeedbackProcessorCheckpointSchema: Schema<{
1339
+ checkpointId: FieldBuilder<string, string>;
1340
+ processor: FieldBuilder<"bug-hourly" | "review-daily" | "commit-reconciliation", "bug-hourly" | "review-daily" | "commit-reconciliation">;
1341
+ windowKey: FieldBuilder<string, string>;
1342
+ revision: FieldBuilder<number, number>;
1343
+ completedAt: FieldBuilder<string, string>;
1344
+ reportId: FieldBuilder<string, string>;
1345
+ }>;
1346
+ /** Immutable manifest describing one bounded materialization attempt. */
1347
+ declare const FeedbackMaterializationManifestSchema: Schema<{
1348
+ manifestId: FieldBuilder<string, string>;
1349
+ processor: FieldBuilder<"bug-hourly" | "review-daily" | "commit-reconciliation", "bug-hourly" | "review-daily" | "commit-reconciliation">;
1350
+ windowKey: FieldBuilder<string, string>;
1351
+ revision: FieldBuilder<number, number>;
1352
+ generatedAt: FieldBuilder<string, string>;
1353
+ sourcePacketCount: FieldBuilder<number, number>;
1354
+ lateArrivalCount: FieldBuilder<number, number>;
1355
+ outputReportId: FieldBuilder<string, string>;
1356
+ status: FieldBuilder<"published" | "corrected" | "no-op", "published" | "corrected" | "no-op">;
1357
+ }>;
1358
+
1359
+ export { FEEDBACK_ANALYSIS_MODEL_VERSIONS, FEEDBACK_BUG_COOLDOWN_SECONDS, FEEDBACK_CONTRACT_VERSION, FEEDBACK_INTENT_IDS, FEEDBACK_ISSUE_TYPES, FEEDBACK_PERSISTABLE_ISSUE_TYPES, FEEDBACK_PRIVACY_POLICY_VERSIONS, FEEDBACK_REVIEW_COOLDOWN_SECONDS, FEEDBACK_SATISFACTION_LEVELS, FEEDBACK_SENTIMENT_BUCKETS, FEEDBACK_SEVERITY_LEVELS, FEEDBACK_STRUCTURED_ONLY_REASON_CODES, FEEDBACK_SURFACE_DEFINITIONS, FEEDBACK_SURFACE_IDS, FEEDBACK_THEME_IDS, FEEDBACK_UNICODE_NORMALIZATION_PROFILE, FeedbackAcceptanceReceiptSchema, type FeedbackAnalysisReceipt, FeedbackAnalysisReceiptSchema, type FeedbackBugPacket, FeedbackBugPacketSchema, FeedbackBugSubmissionRequestSchema, type FeedbackBugTransientAnalysisRequest, FeedbackContextSchema, type FeedbackCountBucket, FeedbackDailySatisfactionReportSchema, type FeedbackDerivedAnalysis, FeedbackDerivedAnalysisSchema, FeedbackDraftPacketSchema, FeedbackDraftReceiptSchema, FeedbackDraftUpsertRequestSchema, type FeedbackEncryptedNarrativeEnvelope, FeedbackEncryptedNarrativeEnvelopeSchema, FeedbackGameDiagnostics, FeedbackGameReconstructionManifestSchema, FeedbackHourlyBugReportSchema, type FeedbackIntentId, type FeedbackIssueType, FeedbackMaterializationManifestSchema, type FeedbackPersistableIssueType, FeedbackProcessorCheckpointSchema, type FeedbackPublicComparison, type FeedbackPublicSummary, FeedbackPublicSummarySchema, type FeedbackPublicWeeklyPoint, type FeedbackReviewPacket, FeedbackReviewPacketSchema, FeedbackReviewSubmissionRequestSchema, type FeedbackReviewTransientAnalysisRequest, FeedbackRichTextAstSchema, type FeedbackRichTextBlock, type FeedbackRichTextDocument, type FeedbackRichTextMark, type FeedbackRichTextNode, type FeedbackSatisfaction, type FeedbackSentiment, type FeedbackSeverity, FeedbackStructuredOnlyAnalysisResultSchema, FeedbackSurfaceCatalogSchema, type FeedbackSurfaceId, type FeedbackThemeId, type FeedbackTransientAnalysisRequest, FeedbackTransientAnalysisRequestSchema, type FeedbackTransientAnalysisRequestValidationResult, FieldBuilder, FieldType, Infer, IsoLanguageCode, PLAYER_SYSTEM_ACHIEVEMENT_TIERS, PLAYER_SYSTEM_ACHIEVEMENT_TRACK_STATUSES, PLAYER_SYSTEM_EVENT_KINDS, type PlayerSystemAchievementEntry, type PlayerSystemAchievementTier, type PlayerSystemAchievementTrack, type PlayerSystemAchievementTrackStatus, type PlayerSystemCuratedSnapshot, type PlayerSystemCuratedSnapshotEntity, PlayerSystemCuratedSnapshotSchema, type PlayerSystemEventEntry, type PlayerSystemEventHighlight, type PlayerSystemEventKind, type PlayerSystemNormalizedEventBatch, type PlayerSystemNormalizedEventBatchEntity, PlayerSystemNormalizedEventBatchSchema, type PlayerSystemNormalizedObservedEvent, type PlayerSystemObservedEvent, type PlayerSystemObservedEventBatch, type PlayerSystemObservedEventBatchEntity, PlayerSystemObservedEventBatchSchema, Schema, SchemaOptions, SchemaShape, ValidationIssue, createComponentSchema, createSchema, field, getAllComponentSchemas, getAllSchemas, getComponentSchema, getSchemaForType, isExtensionSingleton, isExtensionSubtag, isIsoLanguageCode, isPrivateUseSingleton, isPrivateUseSubtag, isRegionSubtag, isScriptSubtag, isVariantSubtag, isoCountryCodes, isoCurrencyCodes, registerComponentSchema, renderSchemaDescription, validateCountryCode, validateCurrencyCode, validateDateTimeISO, validateDisplayName, validateEmail, validateFeedbackTransientAnalysisRequest, validateLanguage, validateName, validatePercentage, validatePhone, validateRichText, validateSafeText, validateSemVer, validateUUID, validateUrl, validateUserId, validateUserIdArray };