[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6H8K4KCVQJE3VMPM6XM3C2R":3,"skill-same:01M6H8K4KCVQJE3VMPM6XM3C2R":74},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":43,"linkOnly":44,"markdownContent":45,"markdownBody":46,"frontMatter":47,"refName":53,"commitSha":54,"skillDirectory":55,"forksCount":56,"repositoryHtmlUrl":57,"repositoryHomepageUrl":6,"ownerHtmlUrl":58,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":59,"install":60,"resources":73},"01M6H8K4KCVQJE3VMPM6XM3C2R","replit-data-handling",null,"Implement Replit PII handling, data retention, and GDPR\u002FCCPA compliance patterns.\nUse when handling sensitive data, implementing data redaction, configuring retention policies,\nor ensuring compliance with privacy regulations for Replit integrations.\nTrigger with phrases like \"replit data\", \"replit PII\",\n\"replit GDPR\", \"replit data retention\", \"replit privacy\", \"replit CCPA\".","micsapp\u002Fmicstec-skills","micsapp","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F82411001?v=4","01M6GWCFQ6D3PV8EHNY62NN5VW","01M6GWCFVE1PA5HG0DKC7AMFJ3",4,"MIT","https:\u002F\u002Fgithub.com\u002Fmicsapp\u002Fmicstec-skills\u002Fblob\u002Fmaster\u002Fclaude-code\u002Fplugins-plus-skills\u002Fplugins\u002Fsaas-packs\u002Freplit-pack\u002Fskills\u002Freplit-data-handling\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000033","数据分析师","PROFESSION","适用职业",[23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],"replit data handling","data","write","for","implementing","with","retention","trigger","io","ccpa compliance","use","codex","read","integrations","pii","gdpr","ccpa","compliance","code","implement","2026-11-10 10:12:30",false,"---\nname: replit-data-handling\ndescription: |\n  Implement Replit PII handling, data retention, and GDPR\u002FCCPA compliance patterns.\n  Use when handling sensitive data, implementing data redaction, configuring retention policies,\n  or ensuring compliance with privacy regulations for Replit integrations.\n  Trigger with phrases like \"replit data\", \"replit PII\",\n  \"replit GDPR\", \"replit data retention\", \"replit privacy\", \"replit CCPA\".\nallowed-tools: Read, Write, Edit\nversion: 1.0.0\nlicense: MIT\nauthor: Jeremy Longshore \u003Cjeremy@intentsolutions.io>\ncompatible-with: claude-code, codex, openclaw\n---\n# Replit Data Handling\n\n## Overview\nManage application data securely on Replit. Covers secrets management, database connection security, environment isolation between development and production, and data handling patterns for Replit-hosted applications.\n\n## Prerequisites\n- Replit account with workspace access\n- Understanding of Replit Secrets\n- Database provisioned (PostgreSQL or Replit DB)\n- Familiarity with environment variables\n\n## Instructions\n\n### Step 1: Secure Secrets Management\n```typescript\n\u002F\u002F Never hardcode secrets - use Replit Secrets tab\n\u002F\u002F Validate all required secrets at startup\n\nfunction validateSecrets(required: string[]): Record\u003Cstring, string> {\n  const secrets: Record\u003Cstring, string> = {};\n  const missing: string[] = [];\n\n  for (const key of required) {\n    const value = process.env[key];\n    if (!value) {\n      missing.push(key);\n    } else {\n      secrets[key] = value;\n    }\n  }\n\n  if (missing.length > 0) {\n    console.error(`Missing required secrets: ${missing.join(', ')}`);\n    console.error('Add them in the Replit Secrets tab (lock icon in sidebar)');\n    process.exit(1);\n  }\n\n  return secrets;\n}\n\nconst config = validateSecrets([\n  'DATABASE_URL',\n  'API_KEY',\n  'JWT_SECRET',\n  'ENCRYPTION_KEY',\n]);\n```\n\n### Step 2: Database Connection Security\n```typescript\nimport { Pool } from 'pg';\n\nfunction createSecurePool(): Pool {\n  const pool = new Pool({\n    connectionString: process.env.DATABASE_URL,\n    ssl: process.env.NODE_ENV === 'production' ? { rejectUnauthorized: true } : false,\n    max: 10,\n    idleTimeoutMillis: 30000,  # 30000: 30 seconds in ms\n    connectionTimeoutMillis: 5000,  # 5000: 5 seconds in ms\n  });\n\n  \u002F\u002F Log connection events without exposing credentials\n  pool.on('error', (err) => {\n    console.error('Database pool error:', err.message);\n    \u002F\u002F Never log the full error object (may contain connection string)\n  });\n\n  return pool;\n}\n\n\u002F\u002F Parameterized queries only - never string concatenation\nasync function findUser(pool: Pool, userId: string) {\n  const result = await pool.query(\n    'SELECT id, username, created_at FROM users WHERE id = $1',\n    [userId]\n  );\n  return result.rows[0];\n}\n```\n\n### Step 3: Request Data Sanitization\n```typescript\nimport { z } from 'zod';\n\n\u002F\u002F Validate and sanitize all incoming data\nconst UserInputSchema = z.object({\n  name: z.string().min(1).max(100).trim(),\n  email: z.string().email().toLowerCase(),\n  message: z.string().max(1000).trim(),  # 1000: 1 second in ms\n});\n\nfunction sanitizeInput(data: unknown) {\n  const result = UserInputSchema.safeParse(data);\n  if (!result.success) {\n    return { valid: false, errors: result.error.flatten().fieldErrors };\n  }\n  return { valid: true, data: result.data };\n}\n\n\u002F\u002F Strip sensitive fields from response\nfunction sanitizeResponse(user: any) {\n  const { password_hash, email, phone, ...safe } = user;\n  return safe;\n}\n```\n\n### Step 4: Environment-Based Data Handling\n```typescript\nconst isProduction = process.env.NODE_ENV === 'production';\n\n\u002F\u002F Logging: never log sensitive data in production\nfunction safeLog(message: string, data?: any) {\n  if (isProduction) {\n    \u002F\u002F Strip potential PII from logs\n    const safeData = data ? JSON.parse(JSON.stringify(data, (key, value) => {\n      if (['password', 'token', 'secret', 'email', 'ssn'].includes(key.toLowerCase())) {\n        return '[REDACTED]';\n      }\n      return value;\n    })) : undefined;\n    console.log(message, safeData);\n  } else {\n    console.log(message, data);\n  }\n}\n\n\u002F\u002F Error responses: never expose stack traces in production\nfunction errorHandler(err: Error, req: any, res: any, next: any) {\n  safeLog('Error:', { message: err.message });\n\n  res.status(500).json({  # HTTP 500 Internal Server Error\n    error: isProduction ? 'Internal server error' : err.message,\n    ...(isProduction ? {} : { stack: err.stack }),\n  });\n}\n```\n\n## Error Handling\n| Issue | Cause | Solution |\n|-------|-------|----------|\n| Secret undefined | Not set in Secrets tab | Run `validateSecrets` at startup |\n| DB connection exposed | Logged in error | Sanitize error messages before logging |\n| PII in logs | Full object logged | Use `safeLog` wrapper in production |\n| SQL injection | String concatenation | Always use parameterized queries |\n\n## Examples\n\n### Secure API Endpoint\n```typescript\napp.post('\u002Fapi\u002Fusers', async (req, res) => {\n  const input = sanitizeInput(req.body);\n  if (!input.valid) return res.status(400).json({ errors: input.errors });  # HTTP 400 Bad Request\n\n  const user = await createUser(pool, input.data);\n  res.json(sanitizeResponse(user));\n});\n```\n\n## Resources\n- [Replit Secrets Guide](https:\u002F\u002Fdocs.replit.com\u002Fprogramming-ide\u002Fworkspace-features\u002Fsecrets)\n- [Replit Database](https:\u002F\u002Fdocs.replit.com\u002Fhosting\u002Fdatabases)\n\n## Output\n\n- Configuration files or code changes applied to the project\n- Validation report confirming correct implementation\n- Summary of changes made and their rationale","# Replit Data Handling\n\n## Overview\nManage application data securely on Replit. Covers secrets management, database connection security, environment isolation between development and production, and data handling patterns for Replit-hosted applications.\n\n## Prerequisites\n- Replit account with workspace access\n- Understanding of Replit Secrets\n- Database provisioned (PostgreSQL or Replit DB)\n- Familiarity with environment variables\n\n## Instructions\n\n### Step 1: Secure Secrets Management\n```typescript\n\u002F\u002F Never hardcode secrets - use Replit Secrets tab\n\u002F\u002F Validate all required secrets at startup\n\nfunction validateSecrets(required: string[]): Record\u003Cstring, string> {\n  const secrets: Record\u003Cstring, string> = {};\n  const missing: string[] = [];\n\n  for (const key of required) {\n    const value = process.env[key];\n    if (!value) {\n      missing.push(key);\n    } else {\n      secrets[key] = value;\n    }\n  }\n\n  if (missing.length > 0) {\n    console.error(`Missing required secrets: ${missing.join(', ')}`);\n    console.error('Add them in the Replit Secrets tab (lock icon in sidebar)');\n    process.exit(1);\n  }\n\n  return secrets;\n}\n\nconst config = validateSecrets([\n  'DATABASE_URL',\n  'API_KEY',\n  'JWT_SECRET',\n  'ENCRYPTION_KEY',\n]);\n```\n\n### Step 2: Database Connection Security\n```typescript\nimport { Pool } from 'pg';\n\nfunction createSecurePool(): Pool {\n  const pool = new Pool({\n    connectionString: process.env.DATABASE_URL,\n    ssl: process.env.NODE_ENV === 'production' ? { rejectUnauthorized: true } : false,\n    max: 10,\n    idleTimeoutMillis: 30000,  # 30000: 30 seconds in ms\n    connectionTimeoutMillis: 5000,  # 5000: 5 seconds in ms\n  });\n\n  \u002F\u002F Log connection events without exposing credentials\n  pool.on('error', (err) => {\n    console.error('Database pool error:', err.message);\n    \u002F\u002F Never log the full error object (may contain connection string)\n  });\n\n  return pool;\n}\n\n\u002F\u002F Parameterized queries only - never string concatenation\nasync function findUser(pool: Pool, userId: string) {\n  const result = await pool.query(\n    'SELECT id, username, created_at FROM users WHERE id = $1',\n    [userId]\n  );\n  return result.rows[0];\n}\n```\n\n### Step 3: Request Data Sanitization\n```typescript\nimport { z } from 'zod';\n\n\u002F\u002F Validate and sanitize all incoming data\nconst UserInputSchema = z.object({\n  name: z.string().min(1).max(100).trim(),\n  email: z.string().email().toLowerCase(),\n  message: z.string().max(1000).trim(),  # 1000: 1 second in ms\n});\n\nfunction sanitizeInput(data: unknown) {\n  const result = UserInputSchema.safeParse(data);\n  if (!result.success) {\n    return { valid: false, errors: result.error.flatten().fieldErrors };\n  }\n  return { valid: true, data: result.data };\n}\n\n\u002F\u002F Strip sensitive fields from response\nfunction sanitizeResponse(user: any) {\n  const { password_hash, email, phone, ...safe } = user;\n  return safe;\n}\n```\n\n### Step 4: Environment-Based Data Handling\n```typescript\nconst isProduction = process.env.NODE_ENV === 'production';\n\n\u002F\u002F Logging: never log sensitive data in production\nfunction safeLog(message: string, data?: any) {\n  if (isProduction) {\n    \u002F\u002F Strip potential PII from logs\n    const safeData = data ? JSON.parse(JSON.stringify(data, (key, value) => {\n      if (['password', 'token', 'secret', 'email', 'ssn'].includes(key.toLowerCase())) {\n        return '[REDACTED]';\n      }\n      return value;\n    })) : undefined;\n    console.log(message, safeData);\n  } else {\n    console.log(message, data);\n  }\n}\n\n\u002F\u002F Error responses: never expose stack traces in production\nfunction errorHandler(err: Error, req: any, res: any, next: any) {\n  safeLog('Error:', { message: err.message });\n\n  res.status(500).json({  # HTTP 500 Internal Server Error\n    error: isProduction ? 'Internal server error' : err.message,\n    ...(isProduction ? {} : { stack: err.stack }),\n  });\n}\n```\n\n## Error Handling\n| Issue | Cause | Solution |\n|-------|-------|----------|\n| Secret undefined | Not set in Secrets tab | Run `validateSecrets` at startup |\n| DB connection exposed | Logged in error | Sanitize error messages before logging |\n| PII in logs | Full object logged | Use `safeLog` wrapper in production |\n| SQL injection | String concatenation | Always use parameterized queries |\n\n## Examples\n\n### Secure API Endpoint\n```typescript\napp.post('\u002Fapi\u002Fusers', async (req, res) => {\n  const input = sanitizeInput(req.body);\n  if (!input.valid) return res.status(400).json({ errors: input.errors });  # HTTP 400 Bad Request\n\n  const user = await createUser(pool, input.data);\n  res.json(sanitizeResponse(user));\n});\n```\n\n## Resources\n- [Replit Secrets Guide](https:\u002F\u002Fdocs.replit.com\u002Fprogramming-ide\u002Fworkspace-features\u002Fsecrets)\n- [Replit Database](https:\u002F\u002Fdocs.replit.com\u002Fhosting\u002Fdatabases)\n\n## Output\n\n- Configuration files or code changes applied to the project\n- Validation report confirming correct implementation\n- Summary of changes made and their rationale",{"name":5,"author":48,"license":14,"version":49,"description":50,"allowed-tools":51,"compatible-with":52},"Jeremy Longshore \u003Cjeremy@intentsolutions.io>","1.0.0","Implement Replit PII handling, data retention, and GDPR\u002FCCPA compliance patterns.\nUse when handling sensitive data, implementing data redaction, configuring retention policies,\nor ensuring compliance with privacy regulations for Replit integrations.\nTrigger with phrases like \"replit data\", \"replit PII\",\n\"replit GDPR\", \"replit data retention\", \"replit privacy\", \"replit CCPA\".\n","Read, Write, Edit","claude-code, codex, openclaw","master","3f5d983eb4ef375b749adcd6b07ec03bd82ae8a8","claude-code\u002Fplugins-plus-skills\u002Fplugins\u002Fsaas-packs\u002Freplit-pack\u002Fskills\u002Freplit-data-handling",0,"https:\u002F\u002Fgithub.com\u002Fmicsapp\u002Fmicstec-skills","https:\u002F\u002Fgithub.com\u002Fmicsapp","2026-03-20 11:24:18",{"source":8,"skillName":5,"commands":61,"prompt":71,"zipAvailable":72},[62,65,68],{"tool":63,"command":64},"npx","npx skills add micsapp\u002Fmicstec-skills --skill replit-data-handling",{"tool":66,"command":67},"bunx","bunx skills add micsapp\u002Fmicstec-skills --skill replit-data-handling",{"tool":69,"command":70},"pnpm","pnpm dlx skills add micsapp\u002Fmicstec-skills --skill replit-data-handling","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmicsapp\u002Fmicstec-skills\u002Fblob\u002Fmaster\u002Fclaude-code\u002Fplugins-plus-skills\u002Fplugins\u002Fsaas-packs\u002Freplit-pack\u002Fskills\u002Freplit-data-handling\u002FSKILL.md",true,[],[75,109,137,157,177,202],{"skillNo":76,"name":77,"nameZh":6,"description":78,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":79,"categories":80,"keywords":89,"publishedAt":43},"01M6HBTJ02FXBFG9NYEHHYAP52","azure-apim-architecture","Analyzes and explains Azure API Management architecture decisions for enterprise API marketplace implementations using VNet Internal mode, Front Door, hybrid authentication, and multi-environment strategies. Use when discussing APIM component selection, network topology, cost optimization, or comparing alternatives like workspaces vs instances, VNet Internal vs External mode, or Front Door vs Application Gateway.","https:\u002F\u002Fgithub.com\u002Fmicsapp\u002Fmicstec-skills\u002Fblob\u002Fmaster\u002Fcopilot-cli\u002Fcopilot-agent-skills\u002F.github\u002Fskills\u002Fazure-apim-architecture\u002FSKILL.md",[81,86],{"categoryNo":82,"categoryName":83,"taxonomyType":84,"taxonomyTypeDesc":85},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",{"categoryNo":87,"categoryName":88,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000030","开发工程师",[90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,26],"architecture","azure","azure apim architecture","component","authentication","gateway","topology","Optimization","network","api","team","environment","multi-environment","workspaces","instances","selection","strategies","azure api management","mode",{"skillNo":110,"name":111,"nameZh":6,"description":112,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":113,"categories":114,"keywords":123,"publishedAt":43},"01M6HBT7J4H082JEEA670B3EQ9","apiops-deployment","Guides deployment of Azure API Management infrastructure using Infrastructure as Code (Bicep\u002FTerraform), CI\u002FCD pipelines (GitHub Actions\u002FAzure DevOps), and APIOps workflows. Use when deploying APIM, creating pipelines, or implementing dev→test→prod promotion strategies.","https:\u002F\u002Fgithub.com\u002Fmicsapp\u002Fmicstec-skills\u002Fblob\u002Fmaster\u002Fcopilot-cli\u002Fcopilot-agent-skills\u002F.github\u002Fskills\u002Fapiops-deployment\u002FSKILL.md",[115,116,119,122],{"categoryNo":82,"categoryName":83,"taxonomyType":84,"taxonomyTypeDesc":85},{"categoryNo":117,"categoryName":118,"taxonomyType":84,"taxonomyTypeDesc":85},"01JBSEEDCAT000000000000011","运维与部署",{"categoryNo":120,"categoryName":121,"taxonomyType":84,"taxonomyTypeDesc":85},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":87,"categoryName":88,"taxonomyType":20,"taxonomyTypeDesc":21},[124,125,126,127,91,128,41,129,130,131,132,133,99,100,106,134,135,107,136,27],"deployment","apiops deployment","workflows","azure devops","infrastructure","infrastructure as code","actions","ci","github actions","github-actions","as","guides","CI\u002FCD",{"skillNo":138,"name":139,"nameZh":6,"description":140,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":141,"categories":142,"keywords":144,"publishedAt":43},"01M6HBT2HEA23THNE9E00GYQBE","apim-policy-authoring","Creates production-ready Azure API Management policy XML for authentication (OAuth 2.0, JWT validation, subscription keys), rate limiting, CORS configuration, error handling, and API transformations. Use when implementing API security, access control, or request\u002Fresponse processing logic.","https:\u002F\u002Fgithub.com\u002Fmicsapp\u002Fmicstec-skills\u002Fblob\u002Fmaster\u002Fcopilot-cli\u002Fcopilot-agent-skills\u002F.github\u002Fskills\u002Fapim-policy-authoring\u002FSKILL.md",[143],{"categoryNo":82,"categoryName":83,"taxonomyType":84,"taxonomyTypeDesc":85},[145,146,147,148,91,94,99,100,149,33,150,151,152,153,154,107,155,156,27,26],"policy","authoring","apim policy authoring","security","access","ready","api security","Access Control","error","processing","cors configuration","production-ready",{"skillNo":158,"name":159,"nameZh":6,"description":160,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":161,"categories":162,"keywords":165,"publishedAt":43},"01M6HBSY65SB29J9WE9KYD0K6T","api-security-review","Reviews Azure API Management configurations for security vulnerabilities, OWASP API Security Top 10 compliance, VNet Internal mode validation, Private Link verification, and Azure Security Benchmark alignment. Use when performing security audits, pre-deployment validation, or compliance reviews.","https:\u002F\u002Fgithub.com\u002Fmicsapp\u002Fmicstec-skills\u002Fblob\u002Fmaster\u002Fcopilot-cli\u002Fcopilot-agent-skills\u002F.github\u002Fskills\u002Fapi-security-review\u002FSKILL.md",[163,164],{"categoryNo":82,"categoryName":83,"taxonomyType":84,"taxonomyTypeDesc":85},{"categoryNo":87,"categoryName":88,"taxonomyType":20,"taxonomyTypeDesc":21},[166,148,167,99,151,168,91,124,169,170,171,172,100,173,107,174,175,176,108,26],"review","security review","api security review","benchmark","verification","owasp","owasp-api","alignment","azure security","reviews","top",{"skillNo":178,"name":179,"nameZh":6,"description":180,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":181,"categories":182,"keywords":183,"publishedAt":43},"01M6HBSRW4PDFE6K4F8JYPZQ05","jira-cli","Interact with Jira from the command line to create, list, view, edit, and transition issues, manage sprints and epics, and perform common Jira workflows. Use when the user asks about Jira tasks, tickets, issues, sprints, or needs to manage project work items.","https:\u002F\u002Fgithub.com\u002Fmicsapp\u002Fmicstec-skills\u002Fblob\u002Fmaster\u002Fcopilot-cli\u002Fawesome-copilot-agents\u002Fskills\u002Fjira-cli\u002FSKILL.md",[],[184,185,186,126,187,188,189,190,99,191,192,193,194,195,196,197,198,199,200,201],"cli","jira","jira cli","init","tasks","create","issues","common","work","command","edit","list","view","project","project work","token","line","sprints",{"skillNo":203,"name":204,"nameZh":6,"description":205,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":206,"categories":207,"keywords":208,"publishedAt":43},"01M6HBSNS3JHMW603G47TWE31H","calculator","Performs arbitrary-precision arithmetic calculations including addition, subtraction, multiplication, division, and exponents. Use when the user asks to calculate, compute, or evaluate math expressions, or when precise decimal arithmetic is needed to avoid floating-point errors.","https:\u002F\u002Fgithub.com\u002Fmicsapp\u002Fmicstec-skills\u002Fblob\u002Fmaster\u002Fcopilot-cli\u002Fawesome-copilot-agents\u002Fskills\u002Fcalculator\u002FSKILL.md",[],[204,209,210,211,212,213,214,33,215,216],"npm","js","calculate","node","math","user","compute","errors"]