make-mp-data 2.0.22 → 2.1.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 (40) hide show
  1. package/dungeons/ai-chat-analytics-ed.js +274 -0
  2. package/dungeons/business.js +0 -1
  3. package/dungeons/complex.js +0 -1
  4. package/dungeons/experiments.js +0 -1
  5. package/dungeons/gaming.js +47 -14
  6. package/dungeons/media.js +5 -6
  7. package/dungeons/mil.js +296 -0
  8. package/dungeons/money2020-ed-also.js +277 -0
  9. package/dungeons/money2020-ed.js +579 -0
  10. package/dungeons/sanity.js +0 -1
  11. package/dungeons/scd.js +0 -1
  12. package/dungeons/simple.js +57 -18
  13. package/dungeons/student-teacher.js +0 -1
  14. package/dungeons/text-generation.js +706 -0
  15. package/dungeons/userAgent.js +1 -2
  16. package/entry.js +4 -0
  17. package/index.js +63 -38
  18. package/lib/cli/cli.js +7 -8
  19. package/lib/core/config-validator.js +11 -13
  20. package/lib/core/context.js +13 -1
  21. package/lib/core/storage.js +45 -13
  22. package/lib/generators/adspend.js +1 -1
  23. package/lib/generators/events.js +18 -17
  24. package/lib/generators/funnels.js +293 -240
  25. package/lib/generators/text-bak-old.js +1121 -0
  26. package/lib/generators/text.js +1173 -0
  27. package/lib/orchestrators/mixpanel-sender.js +1 -1
  28. package/lib/templates/abbreviated.d.ts +13 -3
  29. package/lib/templates/defaults.js +311 -169
  30. package/lib/templates/hooks-instructions.txt +434 -0
  31. package/lib/templates/phrases-bak.js +925 -0
  32. package/lib/templates/phrases.js +2066 -0
  33. package/lib/templates/{instructions.txt → schema-instructions.txt} +78 -1
  34. package/lib/templates/scratch-dungeon-template.js +1 -1
  35. package/lib/templates/textQuickTest.js +172 -0
  36. package/lib/utils/ai.js +51 -2
  37. package/lib/utils/utils.js +145 -7
  38. package/package.json +8 -5
  39. package/types.d.ts +322 -7
  40. package/lib/utils/chart.js +0 -206
@@ -0,0 +1,925 @@
1
+ export const STYLE_MODIFIERS = {
2
+ support: {
3
+ prefix: ["Ticket #", "Case: ", "Issue: ", "Help - ", "Support request: ", "Bug report: ", "Feature request: ", "Question: ", ""],
4
+ urgency: ["URGENT: ", "High Priority: ", "Low Priority: ", "FYI: ", "ASAP: ", "Critical: ", "Important: ", ""],
5
+ closing: ["Please help.", "Thanks in advance.", "Any help appreciated.", "Need this resolved ASAP.", "Thanks!", "Help needed.", "Looking forward to a fix.", "Hope this gets sorted.", ""]
6
+ },
7
+ review: {
8
+ rating: ["⭐", "⭐⭐", "⭐⭐⭐", "⭐⭐⭐⭐", "⭐⭐⭐⭐⭐", "1/5", "2/5", "3/5", "4/5", "5/5", "Rating: 2/10", "Rating: 7/10"],
9
+ summary: ["Pros:", "Cons:", "Bottom line:", "TL;DR:", "Summary:", "Overall:", "The good:", "The bad:", "My take:", "Quick thoughts:"],
10
+ verified: ["Verified purchase", "Long-time user", "New user", "Switched from competitor", "Been using for months", "First-time buyer", "Regular customer", ""]
11
+ },
12
+ search: {
13
+ fragments: ["how to", "why does", "fix", "error", "tutorial", "guide", "help with", "can't", "won't", "broken", "not working", "stuck on", "issue with", "problem with"],
14
+ operators: ["", "site:docs", "-exclude", '"exact match"', "OR", "AND", ""]
15
+ },
16
+ feedback: {
17
+ channel: ["via email", "from app", "in-product", "survey response", "feedback form", "user testing", "beta feedback", ""],
18
+ nps: ["NPS: 0-6", "NPS: 7-8", "NPS: 9-10", "Would not recommend", "Might recommend", "Definitely recommend"]
19
+ },
20
+ chat: {
21
+ greeting: ["hey", "hi", "hello", "yo", "sup", "hey there", "hiya", "what's up", ""],
22
+ emotion: ["😊", "😕", "😡", "🤔", "👍", "👎", "💔", "🎉", "😤", "🙄", "😅", "🤷", "💯", "🔥", ""]
23
+ },
24
+ // New natural speech patterns
25
+ speech_patterns: {
26
+ filler_words: ["um", "uh", "like", "you know", "I mean", "so", "well", "basically", "actually", "literally"],
27
+ interjections: ["oh", "ah", "hmm", "wow", "geez", "man", "dude", "ugh", "meh", "yep", "nope", "sure"],
28
+ emphasis: ["really", "super", "totally", "absolutely", "definitely", "seriously", "honestly", "genuinely", "completely"],
29
+ qualifiers: ["kinda", "sorta", "pretty much", "mostly", "somewhat", "fairly", "quite", "rather", "a bit"],
30
+ conversational_starters: ["So yeah", "Anyway", "Oh btw", "Quick question", "Real quick", "Just wondering", "One thing though"]
31
+ }
32
+ };
33
+
34
+ export const INTENSITY_MODIFIERS = {
35
+ low: {
36
+ amplifiers: ["a bit", "somewhat", "slightly", "kinda", "sort of", "relatively", "fairly", "mildly", "a little", "not too"],
37
+ hedges: ["I guess", "maybe", "perhaps", "possibly", "I suppose", "might be", "could be", "seems like", "probably"],
38
+ expressions: ["it's okay", "not bad", "decent enough", "could be worse", "works for now", "manageable", "tolerable"]
39
+ },
40
+ medium: {
41
+ amplifiers: ["really", "quite", "very", "definitely", "certainly", "clearly", "obviously", "pretty", "rather", "significantly"],
42
+ hedges: ["I think", "I believe", "it seems", "apparently", "evidently", "looks like", "appears to be", "from what I can tell"],
43
+ expressions: ["it's solid", "works well", "does the job", "pretty good", "on the right track", "heading in the right direction"]
44
+ },
45
+ high: {
46
+ amplifiers: ["absolutely", "completely", "totally", "utterly", "extremely", "incredibly", "unbelievably", "ridiculously", "insanely", "crazy"],
47
+ hedges: ["without a doubt", "unquestionably", "undeniably", "100%", "no question", "for sure", "hands down", "no doubt about it"],
48
+ expressions: ["blown away", "game changer", "mind-blowing", "off the charts", "next level", "phenomenal", "revolutionary"]
49
+ }
50
+ };
51
+
52
+ export const FORMALITY_MODIFIERS = {
53
+ casual: {
54
+ contractions: true,
55
+ slang: ["gonna", "wanna", "gotta", "dunno", "ain't", "y'all", "lol", "tbh", "imo", "fwiw", "ngl", "fr", "bet", "lowkey", "highkey", "sus", "cap", "no cap", "salty", "based", "cringe", "slaps", "hits different", "it's giving", "periodt", "say less", "that's rough buddy", "big mood", "vibes", "sending me"],
56
+ punctuation: ["...", "!!", "???", "!?", "-", "—", "~"],
57
+ intensifiers: ["super", "hella", "mad", "crazy", "sick", "dope", "lit", "fire", "solid"],
58
+ connectors: ["and yeah", "but like", "so basically", "anyway", "whatever", "or something", "idk"]
59
+ },
60
+ business: {
61
+ contractions: false,
62
+ titles: ["Mr.", "Ms.", "Dr.", "Prof.", "Director", "Manager", "VP"],
63
+ closings: ["Best regards,", "Sincerely,", "Thank you,", "Regards,", "Kind regards,", "Respectfully,"],
64
+ punctuation: [".", ",", ";", ":"],
65
+ phrases: ["I appreciate", "I would like to", "Please consider", "I am writing to", "Thank you for your time"]
66
+ },
67
+ technical: {
68
+ contractions: false,
69
+ jargon: ["API", "UI/UX", "backend", "frontend", "stack", "pipeline", "workflow", "integration", "deployment", "infrastructure", "scalability", "architecture"],
70
+ precision: ["specifically", "precisely", "exactly", "technically", "functionally", "programmatically", "systematically"],
71
+ punctuation: [".", ",", ";", ":", "()", "[]"],
72
+ qualifiers: ["according to the specs", "based on the documentation", "per the requirements", "as implemented", "by design"]
73
+ }
74
+ };
75
+
76
+ export const USER_PERSONAS = [
77
+ {
78
+ role: "developer",
79
+ experience: ["junior", "senior", "lead", "staff", "principal"],
80
+ domain: ["frontend", "backend", "fullstack", "devops", "mobile", "data"],
81
+ speech_patterns: ["code-heavy", "solution-focused", "detail-oriented", "efficiency-minded"],
82
+ common_phrases: ["edge case", "tech debt", "refactor", "optimization", "debugging", "implementation", "race condition", "memory leak", "null pointer", "stack overflow", "buffer overflow", "code smell", "spaghetti code", "rubber ducking", "bikeshedding", "yak shaving", "breaking changes", "backwards compatibility", "semantic versioning", "feature flag", "hotfix", "rollback", "A/B testing", "canary deployment"]
83
+ },
84
+ {
85
+ role: "designer",
86
+ experience: ["UX", "UI", "product", "visual", "interaction"],
87
+ domain: ["web", "mobile", "enterprise", "startup"],
88
+ speech_patterns: ["user-centered", "aesthetic-focused", "empathetic", "iteration-minded"],
89
+ common_phrases: ["user journey", "design system", "accessibility", "usability", "wireframe", "prototype", "user persona", "information architecture", "visual hierarchy", "color contrast", "typography scale", "white space", "cognitive load", "friction points", "conversion funnel", "heatmap analysis", "click-through rate", "bounce rate", "user flow", "design tokens", "component library", "style guide", "brand guidelines", "responsive breakpoints"]
90
+ },
91
+ {
92
+ role: "manager",
93
+ experience: ["project", "product", "engineering", "team lead"],
94
+ domain: ["startup", "enterprise", "agency", "consulting"],
95
+ speech_patterns: ["big-picture", "process-focused", "diplomatic", "results-oriented"],
96
+ common_phrases: ["roadmap", "stakeholder", "deliverable", "milestone", "resource", "alignment", "scope creep", "MVP", "user story", "acceptance criteria", "sprint planning", "backlog grooming", "velocity tracking", "burn down chart", "retrospective", "post-mortem", "risk mitigation", "dependency mapping", "critical path", "resource allocation", "budget constraints", "timeline compression", "go-to-market strategy", "competitive analysis"]
97
+ },
98
+ {
99
+ role: "analyst",
100
+ experience: ["business", "data", "QA", "research"],
101
+ domain: ["finance", "marketing", "operations", "strategy"],
102
+ speech_patterns: ["data-driven", "analytical", "methodical", "evidence-based"],
103
+ common_phrases: ["metrics", "KPI", "benchmark", "correlation", "trend", "insight", "conversion rate", "churn analysis", "cohort study", "funnel analysis", "attribution modeling", "statistical significance", "confidence interval", "p-value", "A/B test results", "regression analysis", "time series data", "outlier detection", "data quality", "sample bias", "false positive", "predictive model", "machine learning", "data pipeline"]
104
+ },
105
+ {
106
+ role: "admin",
107
+ experience: ["system", "database", "network", "security"],
108
+ domain: ["cloud", "on-prem", "hybrid", "infrastructure"],
109
+ speech_patterns: ["security-conscious", "reliability-focused", "risk-aware", "systematic"],
110
+ common_phrases: ["uptime", "backup", "security", "compliance", "monitoring", "incident", "disaster recovery", "failover", "load balancing", "auto-scaling", "security patch", "vulnerability scan", "penetration test", "SSL certificate", "firewall rules", "access logs", "audit trail", "GDPR compliance", "SOC 2", "ISO 27001", "threat detection", "incident response", "change management", "configuration drift"]
111
+ },
112
+ {
113
+ role: "user",
114
+ experience: ["power", "casual", "new", "expert"],
115
+ domain: ["personal", "business", "education", "nonprofit"],
116
+ speech_patterns: ["outcome-focused", "practical", "time-conscious", "value-seeking"],
117
+ common_phrases: ["workflow", "productivity", "time-saving", "user-friendly", "intuitive", "helpful", "muscle memory", "keyboard shortcuts", "batch processing", "automation", "template library", "quick actions", "smart defaults", "one-click solution", "seamless integration", "contextual help", "progressive disclosure", "guided tour", "power user features", "accessibility options", "mobile-first", "offline capability", "real-time sync", "version history"]
118
+ }
119
+ ];
120
+
121
+ // Additional natural language elements
122
+ export const DISCOURSE_MARKERS = {
123
+ opinion: ["I think", "In my opinion", "Personally", "From my perspective", "It seems to me", "I feel like", "My take is"],
124
+ agreement: ["Exactly", "Totally agree", "Same here", "Couldn't agree more", "You're right", "That's true", "Fair point"],
125
+ disagreement: ["I disagree", "Not really", "I don't think so", "Actually", "On the contrary", "I beg to differ", "That's not quite right"],
126
+ uncertainty: ["I'm not sure", "Hard to say", "Could go either way", "Jury's still out", "Remains to be seen", "Time will tell"],
127
+ frustration: ["Ugh", "Come on", "Seriously?", "Are you kidding me?", "This is ridiculous", "I can't even", "What the heck", "For real?", "Not again", "Why is this so hard?", "This makes no sense", "I'm about to lose it", "What is happening", "This is broken", "Why me?"],
128
+ excitement: ["OMG", "Wow", "Amazing", "Incredible", "No way", "That's awesome", "So cool", "Love it", "This is sick!", "Finally!", "Yes!", "Boom!", "Nailed it!", "Let's go!", "This slaps", "Chef's kiss", "Perfection", "Exactly what I needed"]
129
+ };
130
+
131
+ // Common typo patterns
132
+ export const TYPO_PATTERNS = [
133
+ { pattern: /ing\b/g, replacements: ["ign", "ing", "in"] },
134
+ { pattern: /the\b/g, replacements: ["teh", "th", "hte"] },
135
+ { pattern: /tion\b/g, replacements: ["toin", "tion", "iton"] },
136
+ { pattern: /([a-z])\1/g, replacements: ["$1", "$1$1$1"] }, // double letters
137
+ { pattern: /\s([,.!?])/g, replacements: ["$1", " $1"] }, // spacing around punctuation
138
+ // More realistic typos
139
+ { pattern: /your\b/g, replacements: ["you're", "youre", "ur"] },
140
+ { pattern: /there\b/g, replacements: ["their", "they're", "thier"] },
141
+ { pattern: /receive\b/g, replacements: ["recieve", "recive"] },
142
+ { pattern: /definitely\b/g, replacements: ["definately", "defiantly"] },
143
+ { pattern: /separate\b/g, replacements: ["seperate", "seprate"] }
144
+ ];
145
+
146
+ /** @type {Record<string,string[]>} */
147
+ /**
148
+ * Main phrase bank with Tracery grammar patterns
149
+ * Uses # symbols to denote template variables
150
+ */
151
+ export const PHRASE_BANK = {
152
+ // ============= Core Vocabulary =============
153
+
154
+ product: [
155
+ // Generic references
156
+ "the dashboard", "this release", "the latest build", "the app",
157
+ "the platform", "the system", "the tool", "the software",
158
+ "the interface", "the UI", "the experience", "the workflow",
159
+ "the solution", "the service", "the implementation", "the framework",
160
+ "the codebase", "the infrastructure", "the ecosystem", "the stack",
161
+
162
+ // Specific features/areas
163
+ "the analytics dashboard", "the admin panel", "the settings page",
164
+ "the export function", "the search feature", "the API",
165
+ "the mobile version", "the desktop app", "the web interface",
166
+ "the integration", "the plugin", "the extension", "the widget",
167
+ "the microservice", "the component library", "the database layer",
168
+ "the frontend framework", "the backend service", "the CLI tool",
169
+
170
+ // Natural references
171
+ "this thing", "what we're using", "our setup", "the whole system",
172
+ "everything", "the current version", "the new update", "the latest changes",
173
+ "this contraption", "the whole shebang", "the entire apparatus",
174
+ "our deployment", "the current iteration", "this implementation",
175
+
176
+ // Version-specific
177
+ "v3.2.1", "the beta", "the stable release", "production",
178
+ "the March update", "2.0", "the legacy version", "the new architecture",
179
+ "the canary build", "the hotfix", "the patch release", "staging",
180
+ "the preview version", "the RC candidate", "the nightly build"
181
+ ],
182
+
183
+ feature: [
184
+ // Core functionality
185
+ "search", "export", "import", "sync", "backup", "restore",
186
+ "notifications", "alerts", "reports", "dashboards", "analytics",
187
+ "permissions", "authentication", "authorization", "SSO", "2FA",
188
+ "indexing", "archival", "replication", "migration", "orchestration",
189
+
190
+ // UI features
191
+ "dark mode", "themes", "customization", "drag and drop",
192
+ "keyboard shortcuts", "tooltips", "hover states", "animations",
193
+ "responsive design", "mobile view", "print layout", "fullscreen",
194
+ "accessibility", "internationalization", "localization", "virtualization",
195
+ "lazy loading", "infinite scroll", "modal dialogs", "breadcrumbs",
196
+
197
+ // Data features
198
+ "filtering", "sorting", "pagination", "bulk operations",
199
+ "batch processing", "real-time updates", "auto-save",
200
+ "version history", "change tracking", "audit logs",
201
+ "data validation", "schema evolution", "ETL pipelines", "data lineage",
202
+ "anomaly detection", "data profiling", "metadata management",
203
+
204
+ // Specific problematic areas
205
+ "the login flow", "password reset", "file upload",
206
+ "data export", "CSV import", "PDF generation",
207
+ "email notifications", "push alerts", "webhook configuration",
208
+ "CORS handling", "rate limiting", "circuit breakers", "health checks",
209
+ "feature flags", "A/B testing", "rollback mechanisms",
210
+
211
+ // Performance related
212
+ "loading times", "response time", "caching", "optimization",
213
+ "memory usage", "CPU utilization", "network requests",
214
+ "database queries", "API calls", "rendering performance",
215
+ "latency", "throughput", "scalability", "concurrency",
216
+ "garbage collection", "connection pooling", "resource allocation"
217
+ ],
218
+
219
+ team: [
220
+ "the team", "support", "the devs", "engineering",
221
+ "the founders", "the company", "customer service",
222
+ "the product team", "the UX folks", "QA",
223
+ "you guys", "y'all", "the folks at [company]",
224
+ "whoever built this", "whoever's responsible",
225
+ "the person who designed this", "management"
226
+ ],
227
+
228
+ // ============= Emotional/Reaction Vocabulary =============
229
+
230
+ adj_pos: [
231
+ // Mild positive
232
+ "good", "nice", "solid", "decent", "fine", "okay",
233
+ "workable", "acceptable", "reasonable", "fair",
234
+ "adequate", "serviceable", "competent", "passable",
235
+
236
+ // Strong positive
237
+ "great", "excellent", "fantastic", "amazing", "incredible",
238
+ "brilliant", "perfect", "flawless", "outstanding", "exceptional",
239
+ "superb", "magnificent", "phenomenal", "exemplary", "pristine",
240
+ "immaculate", "sublime", "transcendent", "superlative",
241
+
242
+ // Technical positive
243
+ "fast", "responsive", "intuitive", "clean", "efficient",
244
+ "reliable", "stable", "robust", "scalable", "performant",
245
+ "optimized", "streamlined", "fault-tolerant", "resilient",
246
+ "maintainable", "extensible", "modular", "cohesive",
247
+
248
+ // UX positive
249
+ "smooth", "seamless", "polished", "refined", "elegant",
250
+ "beautiful", "delightful", "pleasant", "enjoyable", "satisfying",
251
+ "ergonomic", "harmonious", "sophisticated", "intuitive",
252
+ "frictionless", "effortless", "graceful", "tactful"
253
+ ],
254
+
255
+ adj_neg: [
256
+ // Mild negative
257
+ "bad", "poor", "weak", "lacking", "subpar",
258
+ "disappointing", "underwhelming", "mediocre", "average",
259
+ "deficient", "inadequate", "insufficient", "questionable",
260
+
261
+ // Strong negative
262
+ "terrible", "awful", "horrible", "atrocious", "abysmal",
263
+ "useless", "worthless", "broken", "unusable", "unacceptable",
264
+ "deplorable", "egregious", "catastrophic", "abhorrent",
265
+ "detestable", "reprehensible", "inexcusable", "unconscionable",
266
+
267
+ // Technical negative
268
+ "slow", "laggy", "buggy", "glitchy", "unstable",
269
+ "unreliable", "inconsistent", "fragile", "brittle", "flaky",
270
+ "deprecated", "obsolete", "antiquated", "convoluted",
271
+ "byzantine", "arcane", "esoteric", "inscrutable",
272
+
273
+ // UX negative
274
+ "clunky", "awkward", "confusing", "frustrating", "annoying",
275
+ "painful", "tedious", "cumbersome", "convoluted", "unintuitive",
276
+ "jarring", "disorienting", "bewildering", "labyrinthine",
277
+ "torturous", "excruciating", "abysmal", "maddening"
278
+ ],
279
+
280
+ adj_neu: [
281
+ "okay", "fine", "average", "standard", "typical",
282
+ "normal", "regular", "common", "basic", "simple",
283
+ "functional", "working", "operational", "adequate", "sufficient",
284
+ "acceptable", "passable", "usable", "serviceable", "middling"
285
+ ],
286
+
287
+ // ============= Action Verbs =============
288
+
289
+ verb_pos: [
290
+ "works perfectly", "runs smoothly", "performs well", "exceeds expectations",
291
+ "saves time", "increases productivity", "simplifies workflows", "reduces friction",
292
+ "solves the problem", "addresses our needs", "delivers value", "impresses clients",
293
+ "streamlines processes", "automates tasks", "eliminates errors", "prevents issues",
294
+ "operates flawlessly", "functions impeccably", "executes seamlessly", "facilitates effortlessly",
295
+ "optimizes efficiently", "orchestrates beautifully", "harmonizes perfectly", "synthesizes elegantly",
296
+ "catalyzes innovation", "galvanizes productivity", "revolutionizes workflows", "transforms operations",
297
+ "transcends limitations", "surpasses benchmarks", "epitomizes excellence", "exemplifies sophistication"
298
+ ],
299
+
300
+ verb_neg: [
301
+ "crashes constantly", "fails randomly", "breaks frequently", "errors out",
302
+ "loses data", "corrupts files", "times out", "hangs indefinitely",
303
+ "wastes time", "creates problems", "causes headaches", "frustrates users",
304
+ "blocks workflows", "prevents progress", "introduces bugs", "degrades performance",
305
+ "malfunctions egregiously", "deteriorates precipitously", "disintegrates catastrophically", "falters inexplicably",
306
+ "stagnates perpetually", "obfuscates unnecessarily", "complicates excessively", "confounds systematically",
307
+ "undermines productivity", "sabotages efficiency", "thwarts innovation", "impedes advancement",
308
+ "exacerbates problems", "compounds difficulties", "amplifies frustrations", "perpetuates dysfunction"
309
+ ],
310
+
311
+ verb_neu: [
312
+ "works sometimes", "functions adequately", "performs as expected", "does the job",
313
+ "meets requirements", "fulfills its purpose", "serves its function", "operates normally",
314
+ "handles basic tasks", "covers essentials", "provides basics", "delivers minimum"
315
+ ],
316
+
317
+ // ============= Natural Speech Elements =============
318
+
319
+ hedge: [
320
+ "honestly", "to be fair", "in my opinion", "from what I can tell",
321
+ "as far as I know", "based on my experience", "personally",
322
+ "I think", "I feel like", "seems like", "looks like",
323
+ "apparently", "supposedly", "allegedly", "reportedly",
324
+ "ostensibly", "purportedly", "presumably", "conceivably",
325
+ "arguably", "conceivably", "theoretically", "hypothetically",
326
+ "in theory", "on paper", "superficially", "nominally",
327
+ "by all accounts", "from my vantage point", "in my estimation"
328
+ ],
329
+
330
+ connector: [
331
+ "and", "but", "so", "also", "plus", "however",
332
+ "although", "though", "yet", "still", "meanwhile",
333
+ "anyway", "besides", "furthermore", "moreover", "additionally"
334
+ ],
335
+
336
+ time: [
337
+ "today", "yesterday", "this week", "last month", "recently",
338
+ "just now", "a while ago", "for months", "since January",
339
+ "after the update", "before the change", "during testing",
340
+ "in production", "on staging", "in development"
341
+ ],
342
+
343
+ // ============= Specific Detail Patterns =============
344
+
345
+ specific_issues: [
346
+ "crashes 3-4 times per day",
347
+ "takes 30+ seconds to load",
348
+ "returns 404 on every third request",
349
+ "memory leak after ~1000 records",
350
+ "CPU spikes to 100%",
351
+ "freezes for 5-10 seconds",
352
+ "loses connection every hour",
353
+ "duplicates data randomly",
354
+ "skips every other record",
355
+ "timeout after exactly 30 seconds",
356
+ "breaks with files over 10MB",
357
+ "fails silently with no error",
358
+ "shows blank page intermittently",
359
+ "corrupts UTF-8 characters",
360
+ "drops decimal precision",
361
+ "throttles inexplicably under load",
362
+ "exhibits nondeterministic behavior",
363
+ "suffers from race conditions",
364
+ "experiences cascading failures",
365
+ "demonstrates pathological performance",
366
+ "manifests sporadic anomalies",
367
+ "encounters byzantine errors",
368
+ "plagued by intermittent glitches",
369
+ "riddled with concurrency issues",
370
+ "hamstrung by architectural limitations"
371
+ ],
372
+
373
+ specific_praise: [
374
+ "loads in under 100ms",
375
+ "handles 10k records smoothly",
376
+ "reduced our costs by 40%",
377
+ "saved 2 hours daily",
378
+ "zero downtime in 6 months",
379
+ "processes batches in seconds",
380
+ "scales to millions of users",
381
+ "cut deployment time in half",
382
+ "increased conversion by 25%",
383
+ "eliminated 90% of errors",
384
+ "achieved sub-millisecond latency",
385
+ "demonstrates remarkable resilience",
386
+ "exhibits exemplary performance characteristics",
387
+ "maintains impeccable uptime metrics",
388
+ "delivers consistently stellar results",
389
+ "operates with clockwork precision",
390
+ "performs beyond expectations",
391
+ "exceeds all benchmarks",
392
+ "surpasses industry standards",
393
+ "demonstrates unparalleled efficiency"
394
+ ],
395
+
396
+ error_messages: [
397
+ "undefined is not a function",
398
+ "cannot read property of null",
399
+ "CORS policy blocked",
400
+ "401 unauthorized",
401
+ "500 internal server error",
402
+ "connection refused",
403
+ "SSL certificate invalid",
404
+ "maximum call stack exceeded",
405
+ "out of memory",
406
+ "segmentation fault",
407
+ "null pointer exception",
408
+ "index out of bounds",
409
+ "syntax error unexpected token",
410
+ "module not found",
411
+ "permission denied"
412
+ ],
413
+
414
+ user_actions: [
415
+ "tried refreshing",
416
+ "cleared cache",
417
+ "restarted the app",
418
+ "reinstalled everything",
419
+ "checked the docs",
420
+ "googled the error",
421
+ "asked on Stack Overflow",
422
+ "posted in Discord",
423
+ "filed a ticket",
424
+ "contacted support",
425
+ "DMed the founder",
426
+ "tweeted about it",
427
+ "gave up and used Excel",
428
+ "built a workaround",
429
+ "wrote a script"
430
+ ],
431
+
432
+ business_impact: [
433
+ "blocking our launch",
434
+ "costing us customers",
435
+ "hurting revenue",
436
+ "damaging our reputation",
437
+ "frustrating the team",
438
+ "delaying the project",
439
+ "increasing support tickets",
440
+ "causing compliance issues",
441
+ "failing security audits",
442
+ "breaking SLAs",
443
+ "missing deadlines",
444
+ "burning budget",
445
+ "losing competitive edge",
446
+ "preventing scaling",
447
+ "limiting growth"
448
+ ],
449
+
450
+ comparisons: [
451
+ "even Excel does this better",
452
+ "WordPress from 2010 was more stable",
453
+ "[Competitor] figured this out years ago",
454
+ "the free version of [Alternative] works better",
455
+ "like [Good Product] but broken",
456
+ "trying to be [Leader] but failing",
457
+ "poor man's [Premium Tool]",
458
+ "wish.com version of [Product]",
459
+ "makes me miss [Old Tool]",
460
+ "reminds me of software from the 90s",
461
+ "pales in comparison to [Competitor]",
462
+ "feels antiquated compared to [Modern Alternative]",
463
+ "lacks the sophistication of [Premium Solution]",
464
+ "exhibits none of the elegance of [Benchmark]",
465
+ "falls woefully short of [Industry Standard]",
466
+ "demonstrates inferior craftsmanship to [Reference]",
467
+ "seems primitive alongside [Contemporary Tool]",
468
+ "appears rudimentary next to [Advanced Platform]"
469
+ ],
470
+
471
+ credibility: [
472
+ "I've been in tech for 10+ years",
473
+ "as a senior developer",
474
+ "we're a paying enterprise customer",
475
+ "I rarely complain but",
476
+ "I've evaluated dozens of tools",
477
+ "speaking from experience",
478
+ "not my first rodeo",
479
+ "I know what I'm talking about",
480
+ "trust me on this",
481
+ "I've built similar systems"
482
+ ],
483
+
484
+ emotional_markers: [
485
+ "I'm not even exaggerating",
486
+ "I wish I was joking",
487
+ "absolutely unbelievable",
488
+ "beyond frustrated",
489
+ "losing my mind",
490
+ "about to rage quit",
491
+ "crying actual tears",
492
+ "dead inside",
493
+ "this is insane",
494
+ "I can't even",
495
+ "genuinely flummoxed",
496
+ "utterly bewildered",
497
+ "completely stupefied",
498
+ "thoroughly perplexed",
499
+ "profoundly disconcerted",
500
+ "inexorably drawn to despair",
501
+ "categorically bamboozled",
502
+ "unequivocally nonplussed",
503
+ "irrevocably disillusioned",
504
+ "fundamentally exasperated"
505
+ ],
506
+
507
+ trail_offs: [
508
+ "...",
509
+ "... whatever",
510
+ "... I guess",
511
+ "... or something",
512
+ "... you know?",
513
+ "... if that makes sense",
514
+ "... but anyway",
515
+ "... nevermind",
516
+ "... sigh",
517
+ "... ugh"
518
+ ],
519
+
520
+ // ============= Complex Origin Patterns =============
521
+
522
+ // Positive origins with different intensities
523
+ origin_pos_low: [
524
+ "#hedge#, #product# is #adj_pos#. #feature.capitalize# works as expected. Not perfect but #verb_pos#.",
525
+ "It's decent. #team.capitalize# did okay with #feature#. #time.capitalize# it's been stable.",
526
+ "#product.capitalize# is fine. Does what it says. #specific_praise#. Can't complain really."
527
+ ],
528
+
529
+ origin_pos_medium: [
530
+ "#hedge.capitalize#, I'm impressed. #product.capitalize# #verb_pos# and #feature# is #adj_pos#. #specific_praise#.",
531
+ "#time.capitalize# we switched to #product# and it #verb_pos#. The #feature# especially is #adj_pos#.",
532
+ "Really happy with #product#. #team.capitalize# #verb_pos# and the #feature# is exactly what we needed."
533
+ ],
534
+
535
+ origin_pos_high: [
536
+ "GAME CHANGER! #product.capitalize# completely #verb_pos#! #specific_praise# #emotional_markers#",
537
+ "#credibility# and this is the BEST. #product.capitalize# #verb_pos# beyond belief. #specific_praise#!!!",
538
+ "Holy crap #product# is #adj_pos#! #feature.capitalize# alone #verb_pos#. Shut up and take my money!"
539
+ ],
540
+
541
+ // Negative origins with different intensities
542
+ origin_neg_low: [
543
+ "#hedge#, #product# has issues. #feature.capitalize# is #adj_neg# and occasionally #specific_issues#.",
544
+ "Not great. #product.capitalize# is #adj_neg#. #team.capitalize# should look at #feature# - it's problematic.",
545
+ "#time.capitalize# noticed #product# is getting #adj_neg#. The #feature# specifically #verb_neg#."
546
+ ],
547
+
548
+ origin_neg_medium: [
549
+ "#product.capitalize# is #adj_neg#. #specific_issues# and #team# hasn't fixed it. Really frustrating.",
550
+ "#credibility# - this is bad. #feature.capitalize# #verb_neg# and it's #business_impact#. Not acceptable.",
551
+ "Major problems with #product#. #specific_issues# #time#. Support is useless. #comparisons#."
552
+ ],
553
+
554
+ origin_neg_high: [
555
+ "ABSOLUTE GARBAGE! #product.capitalize# #verb_neg# CONSTANTLY! #specific_issues# #emotional_markers# #business_impact#!!!",
556
+ "DO NOT USE #product#! #credibility# and this is the WORST. #verb_neg.capitalize# and #verb_neg#. RUN AWAY!",
557
+ "#emotional_markers.capitalize#! #product.capitalize# is completely broken! #specific_issues# Error: #error_messages#. I'm DONE!"
558
+ ],
559
+
560
+ // Neutral origins
561
+ origin_neu: [
562
+ "#product.capitalize# is #adj_neu#. #feature.capitalize# works but nothing special. #verb_neu.capitalize#.",
563
+ "#hedge#, mixed feelings about #product#. Some parts #adj_pos#, others #adj_neg#. It's complicated.",
564
+ "#time.capitalize# using #product#. It's functional. The #feature# does what it claims. That's about it."
565
+ ],
566
+
567
+ // Style-specific origins
568
+ origin_support_pos: [
569
+ "Hi team, loving #product# but quick question about #feature#. It mostly #verb_pos# but sometimes #trail_offs#",
570
+ "Ticket #TICKET_ID#: #product# is great! Just wondering if #feature# could be enhanced? Currently #specific_praise#"
571
+ ],
572
+
573
+ origin_support_neg: [
574
+ "URGENT: #product# is completely broken! #specific_issues# Error: #error_messages#. #business_impact#. Need immediate help!",
575
+ "Ticket #TICKET_ID# - CRITICAL: #feature# #verb_neg# since #time#. Tried: #user_actions#. Nothing works. This is #business_impact#!"
576
+ ],
577
+
578
+ origin_review_pos: [
579
+ "⭐⭐⭐⭐⭐ #credibility# and #product# is fantastic! #specific_praise# The #feature# alone is worth it. Highly recommend!",
580
+ "5/5 - #product.capitalize# #verb_pos# as advertised. #time.capitalize# using it and still impressed. #specific_praise#"
581
+ ],
582
+
583
+ origin_review_neg: [
584
+ "⭐ Waste of money. #product.capitalize# #verb_neg# constantly. #specific_issues# #comparisons#. Save yourself the trouble.",
585
+ "1/5 - #credibility# but this is terrible. #specific_issues# Support ignored me. It's #business_impact#. AVOID!"
586
+ ],
587
+
588
+ origin_chat_pos: [
589
+ "hey guys, just discovered #product# and OMG it's #adj_pos#! the #feature# is sick 🔥 #specific_praise#",
590
+ "anyone else using #product#? it's actually pretty #adj_pos# lol... #feature# #verb_pos# really well"
591
+ ],
592
+
593
+ origin_chat_neg: [
594
+ "ugh #product# is being #adj_neg# again... #specific_issues# anyone know a fix? #trail_offs#",
595
+ "lmao #product# just #verb_neg# during my presentation 😭 #error_messages# fml... switching to #comparisons#"
596
+ ],
597
+
598
+ origin_email_pos: [
599
+ "Hi team,\n\nQuick update on #product# - it's been #adj_pos#. The #feature# #verb_pos# and we're seeing #specific_praise#.\n\nBest,\n[Name]",
600
+ "Following up on #product# evaluation. Results are #adj_pos#. #specific_praise# Recommend moving forward.\n\nRegards"
601
+ ],
602
+
603
+ origin_email_neg: [
604
+ "Team,\n\nWe have serious issues with #product#. #specific_issues# This is #business_impact#.\n\nPlease advise on next steps.",
605
+ "Hi,\n\n#product# is not working as expected. #feature.capitalize# #verb_neg# and it's causing problems. #specific_issues#\n\nNeed resolution ASAP."
606
+ ],
607
+
608
+ origin_forum_pos: [
609
+ "[SOLVED] #product# #feature# is amazing!\n\n#credibility# and just wanted to share that #specific_praise#. If you're on the fence, go for it!",
610
+ "PSA: #product# actually #verb_pos#\n\nBeen using it #time# and it's legit. The #feature# especially is #adj_pos#. AMA!"
611
+ ],
612
+
613
+ origin_forum_neg: [
614
+ "[HELP] #product# #verb_neg# - anyone else?\n\n#specific_issues# Tried #user_actions# but nothing works. Error: #error_messages#\n\nAny ideas?",
615
+ "WARNING: #product# is #adj_neg#\n\n#credibility# and need to warn others. #specific_issues# It's #business_impact#. #comparisons#"
616
+ ],
617
+
618
+ // Reaction patterns
619
+ react_pos: [
620
+ "I'm genuinely impressed",
621
+ "this exceeded expectations",
622
+ "worth every penny",
623
+ "game changer for our team",
624
+ "can't imagine working without it",
625
+ "best investment this year",
626
+ "recommending to everyone",
627
+ "finally something that works",
628
+ "exactly what we needed",
629
+ "10/10 would buy again"
630
+ ],
631
+
632
+ react_neg: [
633
+ "I want my money back",
634
+ "switching to competitor",
635
+ "complete waste of time",
636
+ "regret this purchase",
637
+ "warning others to stay away",
638
+ "filing for refund",
639
+ "escalating to management",
640
+ "considering legal action",
641
+ "worst decision ever",
642
+ "learned my lesson"
643
+ ],
644
+
645
+ react_neu: [
646
+ "it's okay I guess",
647
+ "jury's still out",
648
+ "time will tell",
649
+ "we'll see how it goes",
650
+ "cautiously optimistic",
651
+ "reserving judgment",
652
+ "mixed feelings",
653
+ "could be better could be worse",
654
+ "it is what it is",
655
+ "works for now"
656
+ ],
657
+
658
+ // Wrap-up patterns
659
+ wrap_pos: [
660
+ "Highly recommend!",
661
+ "Two thumbs up.",
662
+ "Chef's kiss.",
663
+ "This is the way.",
664
+ "Ship it!",
665
+ "Take my money!",
666
+ "Finally!",
667
+ "Nailed it.",
668
+ "Perfect.",
669
+ "Love it!"
670
+ ],
671
+
672
+ wrap_neg: [
673
+ "Hard pass.",
674
+ "Not recommended.",
675
+ "Look elsewhere.",
676
+ "Save your money.",
677
+ "Disappointing.",
678
+ "Failed expectations.",
679
+ "Back to drawing board.",
680
+ "Uninstalling.",
681
+ "Requesting refund.",
682
+ "Never again."
683
+ ],
684
+
685
+ wrap_neu: [
686
+ "Your mileage may vary.",
687
+ "It's fine.",
688
+ "Decent enough.",
689
+ "Works for some.",
690
+ "Not bad not great.",
691
+ "Depends on needs.",
692
+ "Could be worse.",
693
+ "It's something.",
694
+ "Exists.",
695
+ "Meh."
696
+ ],
697
+
698
+ // ============= Missing Fallback Patterns =============
699
+
700
+ // Generic tone-based origins (fallbacks when style-specific ones don't exist)
701
+ origin_pos: [
702
+ "#product.capitalize# is #adj_pos#! #feature.capitalize# #verb_pos# and #specific_praise#. #react_pos#",
703
+ "#hedge.capitalize#, really happy with #product#. The #feature# is #adj_pos# and #verb_pos#. #wrap_pos#",
704
+ "#time.capitalize# switched to #product# and it's been #adj_pos#. #specific_praise# Definitely recommend!"
705
+ ],
706
+
707
+ origin_neg: [
708
+ "#product.capitalize# is #adj_neg#. #feature.capitalize# #verb_neg# and #specific_issues#. #react_neg#",
709
+ "#hedge.capitalize#, not impressed with #product#. It's #adj_neg# and #business_impact#. #wrap_neg#",
710
+ "#credibility# but #product# is terrible. #specific_issues# #comparisons# Looking for alternatives."
711
+ ],
712
+
713
+ // Intensity-specific neutral patterns (needed for mixed sentiment generation)
714
+ origin_neu_low: [
715
+ "#product.capitalize# is #adj_neu#. #feature.capitalize# #verb_neu# mostly. Could be better.",
716
+ "#hedge#, #product# is fine. The #feature# works but nothing special.",
717
+ "#time.capitalize# been using #product# and it's #adj_neu#. Does the job."
718
+ ],
719
+
720
+ origin_neu_medium: [
721
+ "#product.capitalize# is #adj_neu#. #feature.capitalize# #verb_neu# but has room for improvement.",
722
+ "#hedge#, mixed feelings about #product#. Some parts #adj_pos#, others #adj_neg#. #react_neu#",
723
+ "#time.capitalize# evaluating #product#. It's functional but #feature# could be enhanced."
724
+ ],
725
+
726
+ origin_neu_high: [
727
+ "#product.capitalize# is incredibly #adj_neu#! #feature.capitalize# #verb_neu# exactly as expected. Perfectly average!",
728
+ "#hedge#, #product# is the most #adj_neu# thing I've ever used! #feature.capitalize# #verb_neu# precisely as designed!",
729
+ "Wow, #product# is absolutely #adj_neu#! #feature.capitalize# #verb_neu# with mathematical precision!"
730
+ ],
731
+
732
+ // Missing style-specific neutral patterns
733
+ origin_support_neu: [
734
+ "Hi team, quick question about #product#. The #feature# is #adj_neu# but wondering if there are better options?",
735
+ "Ticket #TICKET_ID#: #product# is working but #feature# could be improved. It's #adj_neu# currently.",
736
+ "Support request: #product# #verb_neu# but having some minor issues with #feature#. Thanks!"
737
+ ],
738
+
739
+ origin_review_neu: [
740
+ "⭐⭐⭐ #product# is fine. The #feature# works as expected. #verb_neu.capitalize# but nothing groundbreaking. It's okay.",
741
+ "3/5 - #product.capitalize# is #adj_neu#. Does what it says but #feature# could be better. #wrap_neu#"
742
+ ],
743
+
744
+ origin_chat_neu: [
745
+ "anyone tried #product#? the #feature# seems #adj_neu#... like it works but nothing amazing",
746
+ "using #product# rn and it's... fine? #feature# is #adj_neu# i guess #trail_offs#"
747
+ ],
748
+
749
+ origin_email_neu: [
750
+ "Hi team,\n\nUpdate on #product# - it's functional. The #feature# #verb_neu# and meets basic requirements.\n\nLet me know thoughts.",
751
+ "Following up on #product# evaluation. Results are mixed. #feature.capitalize# works but room for improvement."
752
+ ],
753
+
754
+ origin_forum_neu: [
755
+ "[DISCUSSION] #product# - anyone else think it's just okay?\n\nThe #feature# works but feels #adj_neu#. Not bad, not great.",
756
+ "Thoughts on #product#?\n\nBeen using it #time# and it's functional. #feature.capitalize# does the job but #wrap_neu#"
757
+ ],
758
+
759
+ origin_feedback_pos: [
760
+ "Excellent feedback on #product#! The #feature# is #adj_pos# and #verb_pos#. #specific_praise# #react_pos#",
761
+ "Great experience with #product#. #hedge.capitalize#, really impressed with how the #feature# #verb_pos#. #wrap_pos#",
762
+ "Positive feedback: #product# #verb_pos# and the #feature# is exactly what we needed. #specific_praise#"
763
+ ],
764
+
765
+ origin_feedback_neg: [
766
+ "Negative feedback on #product#. The #feature# is #adj_neg# and #verb_neg#. #specific_issues# #react_neg#",
767
+ "Poor experience with #product#. #credibility# but the #feature# is terrible. #business_impact# #wrap_neg#",
768
+ "Critical feedback: #product# #verb_neg# constantly. #specific_issues# This needs immediate attention."
769
+ ],
770
+
771
+ origin_feedback_neu: [
772
+ "Feedback on #product#: It's adequate. The #feature# works as designed but could use some polish.",
773
+ "Mixed review of #product#. Some things work well, others are #adj_neu#. The #feature# specifically needs work."
774
+ ],
775
+
776
+ origin_search_pos: [
777
+ "#product# #feature# awesome",
778
+ "best #product# #feature#",
779
+ "#product# #feature# love it",
780
+ "amazing #product# #feature#",
781
+ "#product# #feature# perfect"
782
+ ],
783
+
784
+ origin_search_neg: [
785
+ "#product# #feature# broken",
786
+ "#product# #feature# terrible",
787
+ "#product# #feature# problems",
788
+ "fix #product# #feature#",
789
+ "#product# #feature# not working"
790
+ ],
791
+
792
+ // Intensity-specific patterns for feedback style
793
+ origin_feedback_pos_low: [
794
+ "Good feedback on #product#. The #feature# is #adj_pos# and works well.",
795
+ "Positive experience with #product#. The #feature# is decent and #verb_pos#."
796
+ ],
797
+
798
+ origin_feedback_pos_medium: [
799
+ "Great feedback on #product#! The #feature# is #adj_pos# and #verb_pos#. #specific_praise#",
800
+ "Really positive experience with #product#. The #feature# #verb_pos# and meets our needs perfectly."
801
+ ],
802
+
803
+ origin_feedback_pos_high: [
804
+ "AMAZING feedback on #product#! The #feature# is absolutely #adj_pos# and #verb_pos# beyond belief! #specific_praise#!!!",
805
+ "Incredible experience with #product#! The #feature# is phenomenally #adj_pos# and completely #verb_pos#!"
806
+ ],
807
+
808
+ origin_feedback_neg_low: [
809
+ "Some concerns about #product#. The #feature# is #adj_neg# and could be improved.",
810
+ "Mixed feedback on #product#. The #feature# has issues and #verb_neg# occasionally."
811
+ ],
812
+
813
+ origin_feedback_neg_medium: [
814
+ "Negative feedback on #product#. The #feature# is #adj_neg# and #verb_neg#. #specific_issues#",
815
+ "Poor experience with #product#. The #feature# is problematic and needs attention."
816
+ ],
817
+
818
+ origin_feedback_neg_high: [
819
+ "TERRIBLE feedback on #product#! The #feature# is absolutely #adj_neg# and completely #verb_neg#! #specific_issues#!!!",
820
+ "Awful experience with #product#! The #feature# is utterly #adj_neg# and totally #verb_neg#!"
821
+ ],
822
+
823
+ // Intensity-specific patterns for search style
824
+ origin_search_pos_low: [
825
+ "#product# #feature# good",
826
+ "#product# #feature# works",
827
+ "#product# #feature# decent"
828
+ ],
829
+
830
+ origin_search_pos_medium: [
831
+ "#product# #feature# great",
832
+ "#product# #feature# excellent",
833
+ "#product# #feature# impressive"
834
+ ],
835
+
836
+ origin_search_pos_high: [
837
+ "#product# #feature# AMAZING",
838
+ "#product# #feature# INCREDIBLE",
839
+ "#product# #feature# BEST EVER"
840
+ ],
841
+
842
+ origin_search_neg_low: [
843
+ "#product# #feature# issues",
844
+ "#product# #feature# slow",
845
+ "#product# #feature# meh"
846
+ ],
847
+
848
+ origin_search_neg_medium: [
849
+ "#product# #feature# broken",
850
+ "#product# #feature# bad",
851
+ "#product# #feature# problems"
852
+ ],
853
+
854
+ origin_search_neg_high: [
855
+ "#product# #feature# TERRIBLE",
856
+ "#product# #feature# WORST",
857
+ "#product# #feature# BROKEN AF"
858
+ ],
859
+
860
+ origin_search_neu: [
861
+ "#product# #feature# okay",
862
+ "is #product# worth it",
863
+ "#product# vs alternatives",
864
+ "#feature# #product# review",
865
+ "how good is #product#"
866
+ ],
867
+
868
+ // Additional clause patterns for length adjustment
869
+ clause_pos: [
870
+ "it really #verb_pos#",
871
+ "the #feature# is fantastic",
872
+ "#specific_praise#",
873
+ "totally worth it",
874
+ "exceeded my expectations"
875
+ ],
876
+
877
+ clause_neg: [
878
+ "it constantly #verb_neg#",
879
+ "the #feature# is broken",
880
+ "#specific_issues#",
881
+ "complete waste of money",
882
+ "very disappointed"
883
+ ],
884
+
885
+ clause_neu: [
886
+ "it #verb_neu#",
887
+ "the #feature# is okay",
888
+ "works as expected",
889
+ "nothing special",
890
+ "decent enough"
891
+ ],
892
+
893
+ // Observation patterns
894
+ obs_pos: [
895
+ "Great job by #team#",
896
+ "This is how software should work",
897
+ "Finally a tool that gets it right",
898
+ "Impressed with the quality"
899
+ ],
900
+
901
+ obs_neg: [
902
+ "#team# needs to fix this",
903
+ "This is unacceptable quality",
904
+ "Expected better from #team#",
905
+ "Seriously considering alternatives"
906
+ ],
907
+
908
+ obs_neu: [
909
+ "It's what you'd expect",
910
+ "Standard functionality",
911
+ "Meets basic requirements",
912
+ "Nothing to write home about"
913
+ ]
914
+ };
915
+
916
+ // Helper function for ticket IDs
917
+ PHRASE_BANK.TICKET_ID = () => {
918
+ const prefix = ['TKT', 'CASE', 'REQ', 'INC', 'BUG'];
919
+ const p = prefix[Math.floor(Math.random() * prefix.length)];
920
+ const num = Math.floor(10000 + Math.random() * 90000);
921
+ return `${p}-${num}`;
922
+ };
923
+
924
+ // Export default
925
+ export default PHRASE_BANK;