-- Cloud Codex - Seed Data -- -- Generates ~60 documents across multiple archives and users -- for testing search, browse and pagination. -- -- All passwords resolve to "password" -- -- All Rights Reserved to Cloud City Computing, LLC 2026 -- https://cloudcitycomputing.com DELETE FROM favorites; DELETE FROM comment_replies; DELETE FROM comments; DELETE FROM versions; DELETE FROM logs; DELETE FROM archives; DELETE FROM archive_repos; DELETE FROM squad_invitations; DELETE FROM squad_members; DELETE FROM permissions; DELETE FROM squads; DELETE FROM user_invitations; DELETE FROM sessions; DELETE FROM password_reset_tokens; DELETE FROM two_factor_codes; DELETE FROM oauth_accounts; DELETE FROM users; DELETE FROM workspaces; -- ========================= -- Workspaces -- ========================= -- owner_id is set once the users below exist; alice is seeded after this row. INSERT INTO workspaces (name) VALUES ('Acme Corporation'); SET @workspace_id = LAST_INSERT_ID(); -- ========================= -- Users (password = "password" for all) -- ========================= INSERT INTO users (name, email, password_hash, is_admin) VALUES ('alice', 'alice@acme.com', '$2b$10$Sd3GKFmu8.CRz86c3jQI5u3f.Lju4H3Ez5SSjTJjRAqMW9w0OLg5u', TRUE); INSERT INTO users (name, email, password_hash) VALUES ('bob', 'bob@acme.com', '$2b$10$Sd3GKFmu8.CRz86c3jQI5u3f.Lju4H3Ez5SSjTJjRAqMW9w0OLg5u'), ('carol', 'carol@acme.com', '$2b$10$Sd3GKFmu8.CRz86c3jQI5u3f.Lju4H3Ez5SSjTJjRAqMW9w0OLg5u'), ('dave', 'dave@acme.com', '$2b$10$Sd3GKFmu8.CRz86c3jQI5u3f.Lju4H3Ez5SSjTJjRAqMW9w0OLg5u'), ('eve', 'eve@acme.com', '$2b$10$Sd3GKFmu8.CRz86c3jQI5u3f.Lju4H3Ez5SSjTJjRAqMW9w0OLg5u'); SELECT @alice_id := id FROM users WHERE email = 'alice@acme.com'; SELECT @bob_id := id FROM users WHERE email = 'bob@acme.com'; SELECT @carol_id := id FROM users WHERE email = 'carol@acme.com'; SELECT @dave_id := id FROM users WHERE email = 'dave@acme.com'; SELECT @eve_id := id FROM users WHERE email = 'eve@acme.com'; UPDATE workspaces SET owner_id = @alice_id WHERE id = @workspace_id; -- ========================= -- Squads -- ========================= INSERT INTO squads (workspace_id, name, created_by) VALUES (@workspace_id, 'Engineering', @alice_id), (@workspace_id, 'Design', @carol_id), (@workspace_id, 'Operations', @dave_id); SELECT @eng_squad := id FROM squads WHERE name = 'Engineering'; SELECT @des_squad := id FROM squads WHERE name = 'Design'; SELECT @ops_squad := id FROM squads WHERE name = 'Operations'; -- ========================= -- Squad Members -- ========================= INSERT INTO squad_members (squad_id, user_id, role, can_read, can_write, can_create_log, can_create_archive) VALUES (@eng_squad, @alice_id, 'owner', TRUE, TRUE, TRUE, TRUE), (@eng_squad, @bob_id, 'member', TRUE, TRUE, TRUE, FALSE), (@eng_squad, @eve_id, 'member', TRUE, TRUE, TRUE, FALSE), (@des_squad, @carol_id, 'owner', TRUE, TRUE, TRUE, TRUE), (@des_squad, @alice_id, 'member', TRUE, TRUE, TRUE, FALSE), (@ops_squad, @dave_id, 'owner', TRUE, TRUE, TRUE, TRUE), (@ops_squad, @bob_id, 'member', TRUE, TRUE, FALSE, FALSE), (@ops_squad, @eve_id, 'member', TRUE, FALSE, FALSE, FALSE); -- ========================= -- Permissions -- ========================= INSERT INTO permissions (user_id, create_squad, create_archive, create_log) VALUES (@alice_id, TRUE, TRUE, TRUE), (@bob_id, FALSE, TRUE, TRUE), (@carol_id, FALSE, TRUE, TRUE), (@dave_id, FALSE, TRUE, TRUE), (@eve_id, FALSE, FALSE, TRUE); -- ========================= -- Archives -- ========================= INSERT INTO archives (squad_id, name, created_by, read_access, write_access) VALUES (@eng_squad, 'Platform API', @alice_id, JSON_ARRAY(@alice_id, @bob_id, @carol_id, @dave_id, @eve_id), JSON_ARRAY(@alice_id, @bob_id, @eve_id)), (@eng_squad, 'Cloud Infrastructure', @bob_id, JSON_ARRAY(@alice_id, @bob_id, @carol_id, @dave_id, @eve_id), JSON_ARRAY(@alice_id, @bob_id)), (@eng_squad, 'Mobile App', @alice_id, JSON_ARRAY(@alice_id, @bob_id, @carol_id, @dave_id, @eve_id), JSON_ARRAY(@alice_id, @bob_id, @eve_id)), (@des_squad, 'Brand Guidelines', @carol_id, JSON_ARRAY(@alice_id, @bob_id, @carol_id, @dave_id, @eve_id), JSON_ARRAY(@alice_id, @carol_id)), (@des_squad, 'Website Redesign', @carol_id, JSON_ARRAY(@alice_id, @bob_id, @carol_id, @dave_id, @eve_id), JSON_ARRAY(@alice_id, @carol_id)), (@ops_squad, 'Incident Runbooks', @dave_id, JSON_ARRAY(@alice_id, @bob_id, @carol_id, @dave_id, @eve_id), JSON_ARRAY(@alice_id, @dave_id, @bob_id)), (@ops_squad, 'Onboarding', @dave_id, JSON_ARRAY(@alice_id, @bob_id, @carol_id, @dave_id, @eve_id), JSON_ARRAY(@alice_id, @dave_id)), (@eng_squad, 'Data Pipeline', @eve_id, JSON_ARRAY(@alice_id, @bob_id, @carol_id, @dave_id, @eve_id), JSON_ARRAY(@alice_id, @eve_id, @bob_id)); SELECT @arch_api := id FROM archives WHERE name = 'Platform API'; SELECT @arch_infra := id FROM archives WHERE name = 'Cloud Infrastructure'; SELECT @arch_mobile := id FROM archives WHERE name = 'Mobile App'; SELECT @arch_brand := id FROM archives WHERE name = 'Brand Guidelines'; SELECT @arch_web := id FROM archives WHERE name = 'Website Redesign'; SELECT @arch_run := id FROM archives WHERE name = 'Incident Runbooks'; SELECT @arch_onb := id FROM archives WHERE name = 'Onboarding'; SELECT @arch_data := id FROM archives WHERE name = 'Data Pipeline'; -- ========================= -- Logs — Platform API -- ========================= INSERT INTO logs (archive_id, title, html_content, created_by, created_at) VALUES (@arch_api, 'API Overview', '

Platform API Overview

The Platform API provides RESTful endpoints for managing resources across the Acme ecosystem. All requests require authentication via Bearer tokens.

Base URL

https://api.acme.com/v2

Rate Limiting

All endpoints enforce a rate limit of 1,000 requests per minute per API key. Exceeding this limit returns HTTP 429. Use exponential backoff for retries.

For batch operations, prefer the bulk endpoints documented in the Batch Operations section.

', @alice_id, '2025-11-01 09:00:00'), (@arch_api, 'Authentication Guide', '

Authentication

The API supports two authentication methods: API keys and OAuth 2.0 bearer tokens.

API Keys

Generate API keys from the Developer Console. Include the key in the X-API-Key header. Keys can be scoped to specific resources and rotated without downtime.

OAuth 2.0

For user-context operations, use the authorization code flow. Redirect users to /oauth/authorize with your client ID and requested scopes. Token expiry is 3600 seconds.

Scopes

Available scopes: read:resources, write:resources, admin:workspace, read:analytics.

', @alice_id, '2025-11-02 10:30:00'), (@arch_api, 'Error Handling', '

Error Handling

All error responses follow a consistent JSON structure with error, message, and details fields.

Common Status Codes

Include a request_id header value when contacting support about specific errors.

', @bob_id, '2025-11-05 14:00:00'), (@arch_api, 'Pagination Patterns', '

Pagination

List endpoints use cursor-based pagination for consistency and performance. Each response includes a next_cursor field when more results are available.

Parameters

Example

GET /v2/archives?limit=10&cursor=eyJpZCI6NDJ9

Do not construct cursors manually — always use the value returned by the API.

', @bob_id, '2025-11-08 11:15:00'), (@arch_api, 'Webhooks Configuration', '

Webhooks

Configure webhooks to receive real-time notifications when resources change. Webhooks deliver POST requests with a JSON payload signed using HMAC-SHA256.

Setup

Register webhook URLs in the Developer Console under Settings → Webhooks. Select which events to subscribe to (e.g., resource.created, resource.updated, resource.deleted).

Verification

Validate the X-Signature-256 header against the payload using your webhook secret. Requests that fail verification should be rejected with HTTP 401.

Retry Policy

Failed deliveries are retried up to 5 times with exponential backoff over 24 hours.

', @alice_id, '2025-11-12 16:45:00'), (@arch_api, 'Batch Operations', '

Batch Operations

For high-throughput use cases, the API provides batch endpoints that accept arrays of operations in a single request.

Endpoint

POST /v2/batch

Request Format

Send a JSON array of operation objects, each with method, path, and optional body. Maximum 100 operations per batch.

Response

Returns an array of results in the same order. Each result has status, body, and headers. Partial failures are possible — check each result individually.

Batch requests consume rate limit quota equal to the number of operations.

', @eve_id, '2025-11-18 08:30:00'), (@arch_api, 'SDK Quick Start', '

SDK Quick Start

Official SDKs are available for JavaScript, Python, Go, and Ruby. Install via your language''s package manager.

JavaScript

npm install @acme/platform-sdk

import { AcmeClient } from ''@acme/platform-sdk'';\nconst client = new AcmeClient({ apiKey: process.env.ACME_API_KEY });\nconst archives = await client.archives.list({ limit: 10 });

Python

pip install acme-platform

from acme import AcmeClient\nclient = AcmeClient(api_key=os.environ[''ACME_API_KEY''])\narchives = client.archives.list(limit=10)
', @bob_id, '2025-12-01 09:00:00'); -- ========================= -- Logs — Cloud Infrastructure -- ========================= INSERT INTO logs (archive_id, title, html_content, created_by, created_at) VALUES (@arch_infra, 'Architecture Overview', '

Cloud Architecture

Our infrastructure runs on a multi-region Kubernetes cluster deployed across three availability zones. The architecture follows a microservices pattern with service mesh for inter-service communication.

Key Components

All services are containerized and deployed via Helm charts managed in the infrastructure monorepo.

', @bob_id, '2025-10-15 10:00:00'), (@arch_infra, 'Kubernetes Cluster Setup', '

Kubernetes Cluster Configuration

Production clusters run Kubernetes 1.29 with containerd as the runtime. Node pools are segmented by workload type.

Node Pools

Namespaces

Each squad gets a dedicated namespace with resource quotas. Cross-namespace traffic is controlled via NetworkPolicies.

', @bob_id, '2025-10-22 11:45:00'), (@arch_infra, 'CI/CD Pipeline', '

CI/CD Pipeline

We use GitHub Actions for CI and ArgoCD for continuous deployment to Kubernetes. Every pull request triggers a full test suite, linting, security scan, and container build.

Pipeline Stages

  1. Lint & type check
  2. Unit tests
  3. Integration tests (with test database)
  4. Container image build & push
  5. Security scan (Trivy)
  6. ArgoCD sync to staging

Production deploys require manual approval after staging validation passes. Canary deployments roll out to 10% of traffic before full promotion.

', @alice_id, '2025-11-03 14:20:00'), (@arch_infra, 'Monitoring & Alerting', '

Monitoring Stack

Observability is built on the Prometheus + Grafana + Loki stack. Every service exposes metrics on /metrics and structured JSON logs.

Key Dashboards

Alerting

Critical alerts route to LogrDuty. Warning alerts go to Slack #ops-alerts. Alert fatigue is managed via weekly triage and rule tuning.

', @dave_id, '2025-11-10 09:30:00'), (@arch_infra, 'Disaster Recovery Plan', '

Disaster Recovery

The DR plan targets an RPO of 1 hour and RTO of 4 hours for critical services. Database replication ensures near-real-time failover.

Backup Strategy

Failover Procedure

DNS failover is automated via health checks. Database promotion requires a manual confirmation step to prevent split-brain scenarios. Full runbook in the Incident Runbooks archive.

', @dave_id, '2025-11-20 16:00:00'), (@arch_infra, 'Terraform Module Guide', '

Terraform Modules

Infrastructure is provisioned via reusable Terraform modules stored in infra/modules/. Each module has its own README, input variables, and output values.

Core Modules

Pin module versions in your workspace main.tf. Run terraform plan in CI before any apply.

', @bob_id, '2025-12-05 10:15:00'); -- ========================= -- Logs — Mobile App -- ========================= INSERT INTO logs (archive_id, title, html_content, created_by, created_at) VALUES (@arch_mobile, 'App Architecture', '

Mobile App Architecture

The Acme mobile app is built with React Native targeting iOS and Android from a single codebase. State management uses Zustand with React Query for server state.

Navigation

React Navigation with a bottom tab navigator and stack navigators per tab. Deep linking is configured for push notification routing.

Offline Support

Critical data is cached in SQLite via WatermelonDB. Sync runs on app foreground and network reconnect events.

', @alice_id, '2025-11-05 08:00:00'), (@arch_mobile, 'Push Notifications', '

Push Notifications

Notifications are delivered via Firebase Cloud Messaging (FCM) for Android and APNs for iOS. The backend sends notification payloads to our unified notification service.

Notification Types

Users control notification preferences per category in Settings → Notifications.

', @eve_id, '2025-11-15 13:00:00'), (@arch_mobile, 'Release Workflow', '

Mobile Release Process

Releases follow a two-week sprint cycle. Release branches are cut on Thursday, QA runs Friday through Monday, and submission happens Tuesday.

Version Numbering

Format: MAJOR.MINOR.PATCH. Major bumps require stakeholder sign-off. Minor bumps for feature releases. Patch for hotfixes.

App Store Submission

iOS: submitted via Xcode Cloud. Android: submitted via the Play Console API from CI. Both platforms require passing automated screenshot tests before submission.

', @alice_id, '2025-12-02 15:30:00'), (@arch_mobile, 'Accessibility Guidelines', '

Accessibility

All new screens must meet WCAG 2.1 AA standards. This document covers the key requirements for mobile accessibility.

Requirements

Run the Accessibility Inspector (iOS) and Accessibility Scanner (Android) before every PR.

', @carol_id, '2025-12-10 10:00:00'); -- ========================= -- Logs — Brand Guidelines -- ========================= INSERT INTO logs (archive_id, title, html_content, created_by, created_at) VALUES (@arch_brand, 'Logo Usage', '

Logo Usage Guidelines

The Acme logo is our most recognizable brand asset. Consistent usage builds trust and recognition.

Versions

Clear Space

Maintain clear space equal to the height of the "A" in Acme on all sides. Never place the logo closer than this to other elements.

Don''ts

Do not stretch, rotate, add effects, change colors, or place on busy backgrounds.

', @carol_id, '2025-10-20 09:00:00'), (@arch_brand, 'Color Palette', '

Color Palette

Our brand colors create a cohesive visual identity across all touchpoints.

Primary Colors

Secondary Colors

Neutrals

Grey scale from #F8FAFC (lightest) to #0F172A (darkest). Use for backgrounds, borders, and secondary text.

', @carol_id, '2025-10-25 11:30:00'), (@arch_brand, 'Typography', '

Typography

Consistent typography reinforces brand identity and ensures readability across platforms.

Font Families

Scale

Line height: 1.5 for body, 1.3 for headings. Letter spacing: -0.01em for headings, normal for body.

', @carol_id, '2025-11-01 14:00:00'), (@arch_brand, 'Illustration Style', '

Illustration Style Guide

Illustrations bring warmth and personality to our brand. They are used in onboarding flows, empty states, error logs, and marketing materials.

Style Principles

Usage

Use illustrations sparingly in product UI — they should enhance, not distract. Maximum one illustration per screen. Marketing logs can use larger hero illustrations.

', @carol_id, '2025-11-15 16:30:00'), (@arch_brand, 'Voice & Tone', '

Voice & Tone

Our brand voice is consistent. Our tone adapts to the situation.

Voice Attributes

Tone by Context

', @alice_id, '2025-12-01 10:00:00'); -- ========================= -- Logs — Website Redesign -- ========================= INSERT INTO logs (archive_id, title, html_content, created_by, created_at) VALUES (@arch_web, 'Archive Kickoff Notes', '

Website Redesign — Kickoff

Meeting date: October 28, 2025. Attendees: Alice, Carol, Dave.

Goals

Timeline

Phase 1 (Design): Nov 1 – Nov 30. Phase 2 (Development): Dec 1 – Jan 31. Phase 3 (QA & Launch): Feb 1 – Feb 28.

', @carol_id, '2025-10-28 14:00:00'), (@arch_web, 'Information Architecture', '

Information Architecture

The new site structure organizes content into four top-level sections with consistent navigation patterns.

Site Map

Navigation

Persistent top nav with mega-menu dropdowns. Mobile: hamburger menu with accordion sections. Footer mirrors top nav structure with additional legal links.

', @carol_id, '2025-11-05 10:00:00'), (@arch_web, 'Performance Budget', '

Performance Budget

Performance targets ensure the redesigned site delivers a fast experience across devices and networks.

Core Web Vitals Targets

Bundle Budget

Lighthouse CI runs on every PR and blocks merging if scores drop below 90.

', @alice_id, '2025-11-12 09:30:00'), (@arch_web, 'Component Library Spec', '

Component Library

The redesign introduces a shared component library built on React with Tailwind CSS. Components are documented in Storybook.

Core Components

Design Tokens

Colors, spacing, radii, and shadows are defined as CSS custom properties generated from a shared token config.

', @carol_id, '2025-11-20 15:00:00'), (@arch_web, 'SEO Migration Plan', '

SEO Migration Plan

Migrating URLs requires careful redirect mapping to preserve search rankings and avoid broken links.

Redirect Strategy

All existing URLs are mapped to new equivalents in a CSV file. Cloudflare Workers handle 301 redirects. The mapping covers 847 existing logs.

Checklist

', @alice_id, '2025-12-08 11:00:00'); -- ========================= -- Logs — Incident Runbooks -- ========================= INSERT INTO logs (archive_id, title, html_content, created_by, created_at) VALUES (@arch_run, 'Database Failover', '

Runbook: Database Failover

Severity: Critical. On-call: Infrastructure squad.

Symptoms

Steps

  1. Verify the issue via CloudWatch RDS metrics
  2. Check Aurora event logs for failover initiation
  3. If automatic failover hasn''t triggered, initiate manual failover via AWS Console
  4. Verify application connectivity to new primary
  5. Monitor replication catch-up on new replica

Post-Incident

File incident report within 24 hours. Schedule root cause analysis meeting.

', @dave_id, '2025-10-18 08:00:00'), (@arch_run, 'High CPU Alert', '

Runbook: High CPU on Kubernetes Nodes

Severity: Warning → Critical if sustained. On-call: Infrastructure squad.

Symptoms

Steps

  1. Identify the top CPU consumers: kubectl top pods --sort-by=cpu
  2. Check for runaway processes or infinite loops in recent deployments
  3. If a specific pod, restart it: kubectl delete pod <name>
  4. If cluster-wide, check HPA status and manually scale if needed
  5. Verify autoscaler is provisioning new nodes
', @dave_id, '2025-10-25 14:30:00'), (@arch_run, 'SSL Certificate Expiry', '

Runbook: SSL Certificate Renewal

Severity: High. On-call: Infrastructure squad.

Symptoms

Steps

  1. Check cert-manager logs: kubectl logs -n cert-manager deploy/cert-manager
  2. Verify DNS challenge is completing: check Cloudflare DNS records
  3. If auto-renewal failed, manually trigger: kubectl delete certificate acme-tls -n production
  4. Verify new certificate issued: kubectl get certificate -n production

Prevention

Certificate expiry alerts are set at 30, 14, and 7 days. Investigate any 30-day alert immediately.

', @dave_id, '2025-11-08 10:00:00'), (@arch_run, 'Memory Leak Investigation', '

Runbook: Memory Leak Investigation

Severity: Warning. On-call: Application squad.

Symptoms

Steps

  1. Confirm trend via Grafana memory dashboard (look at RSS, not just heap)
  2. Enable heap profiling on the affected service
  3. Capture heap snapshot: kill -USR2 <pid>
  4. Analyze with Chrome DevTools or --prof output
  5. Check for common causes: unbounded caches, event listener leaks, unclosed connections
', @bob_id, '2025-11-22 11:15:00'), (@arch_run, 'Kafka Consumer Lag', '

Runbook: Kafka Consumer Lag

Severity: Warning → High if lag grows. On-call: Data squad.

Symptoms

Steps

  1. Check consumer group status: kafka-consumer-groups.sh --describe --group <name>
  2. Verify consumer pods are running and not crash-looping
  3. Check for partition skew — rebalance if needed
  4. If processing is slow, scale consumer replicas
  5. If messages are poison pills, check dead letter queue

Escalation

If lag exceeds 100,000 or grows faster than consumers can process, escalate to Critical.

', @eve_id, '2025-12-04 09:00:00'); -- ========================= -- Logs — Onboarding -- ========================= INSERT INTO logs (archive_id, title, html_content, created_by, created_at) VALUES (@arch_onb, 'Welcome to Acme', '

Welcome to Acme!

Congratulations on joining the squad. This guide will help you get set up and productive as quickly as possible.

First Day

First Week

', @dave_id, '2025-10-10 09:00:00'), (@arch_onb, 'Development Environment Setup', '

Dev Environment Setup

This guide walks through setting up your local development environment on macOS or Linux.

Prerequisites

Steps

  1. Clone the monorepo: git clone git@github.com:acme/platform.git
  2. Install dependencies: npm install
  3. Copy environment file: cp .env.example .env
  4. Start services: docker compose up -d
  5. Run the app: npm run dev
  6. Verify at http://localhost:3000
', @bob_id, '2025-10-12 10:30:00'), (@arch_onb, 'Code Review Guidelines', '

Code Review Guidelines

Code review is how we maintain quality and share knowledge. Every change goes through review before merging.

For Authors

For Reviewers

', @alice_id, '2025-10-18 14:45:00'), (@arch_onb, 'Communication Norms', '

Communication Norms

Clear communication keeps the squad aligned and productive. Here''s how we work.

Slack

Meetings

Async by Default

Write things down. Link to documents. Don''t assume everyone was in the room.

', @dave_id, '2025-11-01 09:00:00'), (@arch_onb, 'Security Training', '

Security Training

All squad members must complete security training within their first two weeks. Security is everyone''s responsibility.

Topics Covered

Development Security

Review the OWASP Top 10. Never commit secrets. Use environment variables. Run npm audit regularly.

', @alice_id, '2025-11-10 11:00:00'); -- ========================= -- Logs — Data Pipeline -- ========================= INSERT INTO logs (archive_id, title, html_content, created_by, created_at) VALUES (@arch_data, 'Pipeline Architecture', '

Data Pipeline Architecture

The data pipeline ingests events from production services, transforms them, and loads into the analytics data warehouse.

Flow

  1. Services emit events to Kafka topics
  2. Flink jobs consume, validate, and enrich events
  3. Transformed data lands in S3 as Parquet files
  4. Snowflake external tables expose data for queries
  5. dbt models create clean analytical tables

Volume

Average throughput: 50,000 events/second. Peak: 200,000 events/second during major launches. Daily data volume: ~2 TB uncompressed.

', @eve_id, '2025-11-01 08:00:00'), (@arch_data, 'Schema Registry', '

Schema Registry

All Kafka messages are serialized with Avro and validated against schemas in Confluent Schema Registry. This ensures backward compatibility across producer and consumer versions.

Conventions

Workflow

Schema changes go through PR review. CI validates compatibility before merge. Breaking changes require a new topic version.

', @eve_id, '2025-11-08 13:00:00'), (@arch_data, 'dbt Model Guide', '

dbt Model Guide

We use dbt (data build tool) to transform raw data into clean analytical models in Snowflake.

Archive Structure

Naming Conventions

Testing

Every model must have unique and not_null tests on primary keys. Run dbt test locally before pushing.

', @eve_id, '2025-11-18 09:30:00'), (@arch_data, 'Data Quality Framework', '

Data Quality Framework

Data quality is monitored at every stage of the pipeline to catch issues before they reach dashboards.

Quality Dimensions

Tooling

Great Expectations runs nightly validation suites. Failures trigger Slack alerts and block downstream dbt runs. Anomaly detection flags statistical outliers in key metrics.

', @bob_id, '2025-12-01 14:00:00'), (@arch_data, 'Analytics Event Catalog', '

Analytics Event Catalog

This catalog documents all tracked user events and their properties. Use this as a reference when adding new analytics or building reports.

Core Events

Adding Events

Propose new events via PR to the tracking plan repo. Include event name, description, properties with types, and sample payload.

', @eve_id, '2025-12-10 10:30:00'), (@arch_data, 'Backfill Procedures', '

Backfill Procedures

When pipeline bugs cause data gaps or incorrect transformations, a backfill reprocesses historical data.

Process

  1. Identify the affected date range and tables
  2. Create a backfill ticket with impact assessment
  3. Write and test the backfill query/script locally
  4. Run in staging environment first
  5. Execute in production during low-traffic hours
  6. Validate results against expected counts

Safety

Always use INSERT OVERWRITE for idempotency. Never delete-then-insert — if the backfill fails mid-way, you''ll have data loss. Log all backfill operations to the audit table.

', @bob_id, '2025-12-15 08:45:00'); -- ========================= -- A few extra cross-archive logs for variety -- ========================= INSERT INTO logs (archive_id, title, html_content, created_by, created_at) VALUES (@arch_api, 'Rate Limiting Deep Dive', '

Rate Limiting Implementation

Our rate limiter uses a sliding window algorithm implemented in Redis. Each API key gets a separate counter with a 60-second window.

Algorithm

We use a sorted set per key with timestamps as scores. On each request: add current timestamp, remove entries older than the window, count remaining entries. If count exceeds limit, return 429.

Headers

Enterprise customers can request custom limits via their account manager.

', @alice_id, '2025-12-20 09:00:00'), (@arch_infra, 'Secrets Management', '

Secrets Management

All secrets (API keys, database passwords, certificates) are stored in HashiCorp Vault and injected into pods via the Vault Agent sidecar.

Access Policies

Developer Workflow

For local development, use vault kv get to retrieve values into your .env. Never commit secrets to Git. Pre-commit hooks scan for common secret patterns.

', @dave_id, '2025-12-22 14:30:00'), (@arch_mobile, 'Performance Optimization', '

Mobile Performance Optimization

Performance directly impacts user retention. These guidelines help keep the app fast and responsive.

Key Metrics

Techniques

Profile regularly with Flipper and the React DevTools Profiler.

', @alice_id, '2025-12-28 10:00:00'), (@arch_web, 'Analytics Integration', '

Website Analytics Integration

The redesigned website uses a privacy-first analytics approach with Plausible Analytics as the primary tool.

Implementation

The Plausible script is loaded asynchronously and weighs under 1 KB. No cookies are set, so no consent banner is required under GDPR.

Custom Events

Dashboards

Plausible dashboard is shared with marketing and product. Custom goals track conversion funnels.

', @carol_id, '2026-01-05 11:00:00'), (@arch_run, 'API Gateway Troubleshooting', '

Runbook: API Gateway Issues

Severity: Critical. On-call: Infrastructure squad.

Symptoms

Steps

  1. Check Envoy proxy pods: kubectl get pods -n istio-system
  2. Review Envoy access logs for upstream connection errors
  3. Verify backend service pods are running and passing readiness probes
  4. Check for recent Istio configuration changes
  5. If Envoy is OOMing, increase memory limits in the deployment

Emergency

If gateway is completely down, bypass via direct service NodePort as a temporary measure.

', @dave_id, '2026-01-10 08:30:00'), (@arch_onb, 'Benefits Overview', '

Employee Benefits Overview

Acme offers comprehensive benefits to support your health, wealth, and well-being.

Health

Financial

Time Off

', @dave_id, '2026-01-15 09:00:00'), (@arch_data, 'Cost Optimization Report', '

Data Pipeline Cost Optimization

Monthly Snowflake spend has grown 40% quarter-over-quarter. This document outlines optimization opportunities.

Findings

Archiveed Savings

Implementing all recommendations: estimated 35% reduction in monthly compute costs and 20% reduction in storage costs. Total annual savings: ~$48,000.

', @eve_id, '2026-01-20 14:00:00'); -- ========================= -- Capture log IDs for comments, versions, favorites -- ========================= SELECT @log_api_overview := id FROM logs WHERE title = 'API Overview'; SELECT @log_auth_guide := id FROM logs WHERE title = 'Authentication Guide'; SELECT @log_error_handling := id FROM logs WHERE title = 'Error Handling'; SELECT @log_pagination := id FROM logs WHERE title = 'Pagination Patterns'; SELECT @log_webhooks := id FROM logs WHERE title = 'Webhooks Configuration'; SELECT @log_batch_ops := id FROM logs WHERE title = 'Batch Operations'; SELECT @log_arch_overview := id FROM logs WHERE title = 'Architecture Overview'; SELECT @log_k8s_setup := id FROM logs WHERE title = 'Kubernetes Cluster Setup'; SELECT @log_cicd := id FROM logs WHERE title = 'CI/CD Pipeline'; SELECT @log_monitoring := id FROM logs WHERE title = 'Monitoring & Alerting'; SELECT @log_dr_plan := id FROM logs WHERE title = 'Disaster Recovery Plan'; SELECT @log_app_arch := id FROM logs WHERE title = 'App Architecture'; SELECT @log_push_notif := id FROM logs WHERE title = 'Push Notifications'; SELECT @log_color_palette := id FROM logs WHERE title = 'Color Palette'; SELECT @log_typography := id FROM logs WHERE title = 'Typography'; SELECT @log_perf_budget := id FROM logs WHERE title = 'Performance Budget'; SELECT @log_component_lib := id FROM logs WHERE title = 'Component Library Spec'; SELECT @log_db_failover := id FROM logs WHERE title = 'Database Failover'; SELECT @log_high_cpu := id FROM logs WHERE title = 'High CPU Alert'; SELECT @log_welcome := id FROM logs WHERE title = 'Welcome to Acme'; SELECT @log_dev_setup := id FROM logs WHERE title = 'Development Environment Setup'; SELECT @log_code_review := id FROM logs WHERE title = 'Code Review Guidelines'; SELECT @log_pipeline_arch := id FROM logs WHERE title = 'Pipeline Architecture'; SELECT @log_dbt_guide := id FROM logs WHERE title = 'dbt Model Guide'; SELECT @log_data_quality := id FROM logs WHERE title = 'Data Quality Framework'; SELECT @log_rate_limit := id FROM logs WHERE title = 'Rate Limiting Deep Dive'; SELECT @log_secrets_mgmt := id FROM logs WHERE title = 'Secrets Management'; SELECT @log_seo_migration := id FROM logs WHERE title = 'SEO Migration Plan'; -- ========================= -- Squad Invitations (pending, accepted, declined) -- ========================= -- Dave invited carol to Ops — pending INSERT INTO squad_invitations (squad_id, invited_by, invited_user_id, role, can_read, can_write, can_create_log, status, created_at) VALUES (@ops_squad, @dave_id, @carol_id, 'member', TRUE, TRUE, TRUE, 'pending', '2026-04-10 09:00:00'); -- Alice invited dave to Engineering — pending INSERT INTO squad_invitations (squad_id, invited_by, invited_user_id, role, can_read, can_write, can_create_log, can_create_archive, status, created_at) VALUES (@eng_squad, @alice_id, @dave_id, 'member', TRUE, TRUE, TRUE, FALSE, 'pending', '2026-04-08 14:30:00'); -- Carol invited bob to Design — accepted INSERT INTO squad_invitations (squad_id, invited_by, invited_user_id, role, can_read, can_write, status, created_at, responded_at) VALUES (@des_squad, @carol_id, @bob_id, 'member', TRUE, TRUE, 'accepted', '2026-03-15 10:00:00', '2026-03-15 12:30:00'); -- Alice invited carol to Engineering — declined INSERT INTO squad_invitations (squad_id, invited_by, invited_user_id, role, can_read, can_write, status, created_at, responded_at) VALUES (@eng_squad, @alice_id, @carol_id, 'member', TRUE, FALSE, 'declined', '2026-02-20 11:00:00', '2026-02-21 09:15:00'); -- ========================= -- User Invitations (pending platform invites) -- ========================= INSERT INTO user_invitations (email, token, invited_by, expires_at, accepted, created_at) VALUES ('frank@acme.com', 'aabbccdd11223344556677889900aabb11223344556677889900aabbccdd1122', @alice_id, '2026-04-20 00:00:00', FALSE, '2026-04-06 10:00:00'), ('grace@acme.com', 'ffeeddcc11223344556677889900aabb11223344556677889900aabbccddeeff', @alice_id, '2026-04-25 00:00:00', FALSE, '2026-04-10 14:00:00'), ('henry@acme.com', '00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff', @dave_id, '2026-04-22 00:00:00', FALSE, '2026-04-08 09:00:00'), ('iris@partner.com','aabb00112233445566778899ccddeeff00112233445566778899aabbccddeeff', @carol_id, '2026-03-01 00:00:00', TRUE, '2026-02-15 11:00:00'); -- ========================= -- Versions — version history for select documents -- ========================= -- API Overview: 3 published versions showing evolution UPDATE logs SET version = 3 WHERE id = @log_api_overview; INSERT INTO versions (log_id, version, title, notes, html_content, created_by, created_at) VALUES (@log_api_overview, 1, 'Initial draft', 'First version of the API overview document.', '

Platform API Overview

The Platform API provides RESTful endpoints for managing resources.

Base URL

https://api.acme.com/v1

', @alice_id, '2025-11-01 09:00:00'), (@log_api_overview, 2, 'Added rate limiting section', 'Added rate limiting details and batch operations reference.', '

Platform API Overview

The Platform API provides RESTful endpoints for managing resources across the Acme ecosystem. All requests require authentication via Bearer tokens.

Base URL

https://api.acme.com/v2

Rate Limiting

All endpoints enforce a rate limit of 500 requests per minute per API key.

', @alice_id, '2025-12-15 10:30:00'), (@log_api_overview, 3, 'Increased rate limit to 1000/min', 'Updated rate limit from 500 to 1000 requests per minute after capacity upgrade.', '

Platform API Overview

The Platform API provides RESTful endpoints for managing resources across the Acme ecosystem. All requests require authentication via Bearer tokens.

Base URL

https://api.acme.com/v2

Rate Limiting

All endpoints enforce a rate limit of 1,000 requests per minute per API key. Exceeding this limit returns HTTP 429. Use exponential backoff for retries.

For batch operations, prefer the bulk endpoints documented in the Batch Operations section.

', @bob_id, '2026-02-01 14:00:00'); -- Architecture Overview: 2 versions UPDATE logs SET version = 2 WHERE id = @log_arch_overview; INSERT INTO versions (log_id, version, title, notes, html_content, created_by, created_at) VALUES (@log_arch_overview, 1, 'Initial architecture doc', NULL, '

Cloud Architecture

Our infrastructure runs on a Kubernetes cluster. The architecture follows a microservices pattern.

Key Components

', @bob_id, '2025-10-15 10:00:00'), (@log_arch_overview, 2, 'Upgraded to multi-region + Kafka', 'Reflected migration from RabbitMQ to Kafka and multi-region expansion.', '

Cloud Architecture

Our infrastructure runs on a multi-region Kubernetes cluster deployed across three availability zones. The architecture follows a microservices pattern with service mesh for inter-service communication.

Key Components

All services are containerized and deployed via Helm charts managed in the infrastructure monorepo.

', @bob_id, '2026-01-20 11:00:00'); -- CI/CD Pipeline: 2 versions UPDATE logs SET version = 2 WHERE id = @log_cicd; INSERT INTO versions (log_id, version, title, notes, html_content, created_by, created_at) VALUES (@log_cicd, 1, 'Original CI/CD docs', NULL, '

CI/CD Pipeline

We use GitHub Actions for CI and manual deployments to Kubernetes.

Pipeline Stages

  1. Lint & type check
  2. Unit tests
  3. Container image build & push

Production deploys require SSH access to the cluster.

', @alice_id, '2025-11-03 14:20:00'), (@log_cicd, 2, 'Added ArgoCD and canary deploys', 'Migrated from manual deploys to ArgoCD with canary strategy.', '

CI/CD Pipeline

We use GitHub Actions for CI and ArgoCD for continuous deployment to Kubernetes. Every pull request triggers a full test suite, linting, security scan, and container build.

Pipeline Stages

  1. Lint & type check
  2. Unit tests
  3. Integration tests (with test database)
  4. Container image build & push
  5. Security scan (Trivy)
  6. ArgoCD sync to staging

Production deploys require manual approval after staging validation passes. Canary deployments roll out to 10% of traffic before full promotion.

', @alice_id, '2026-01-10 09:00:00'); -- Database Failover Runbook: 2 versions UPDATE logs SET version = 2 WHERE id = @log_db_failover; INSERT INTO versions (log_id, version, title, notes, html_content, created_by, created_at) VALUES (@log_db_failover, 1, 'Initial runbook', 'First version of the database failover runbook.', '

Runbook: Database Failover

Severity: Critical.

Steps

  1. Check CloudWatch
  2. Initiate manual failover if needed
  3. Verify connectivity
', @dave_id, '2025-10-18 08:00:00'), (@log_db_failover, 2, 'Added post-incident process', 'Expanded with detailed symptoms, monitoring checks, and post-incident procedures.', '

Runbook: Database Failover

Severity: Critical. On-call: Infrastructure squad.

Symptoms

Steps

  1. Verify the issue via CloudWatch RDS metrics
  2. Check Aurora event logs for failover initiation
  3. If automatic failover hasn''t triggered, initiate manual failover via AWS Console
  4. Verify application connectivity to new primary
  5. Monitor replication catch-up on new replica

Post-Incident

File incident report within 24 hours. Schedule root cause analysis meeting.

', @dave_id, '2026-03-05 10:00:00'); -- Component Library Spec: 2 versions UPDATE logs SET version = 2 WHERE id = @log_component_lib; INSERT INTO versions (log_id, version, title, notes, html_content, created_by, created_at) VALUES (@log_component_lib, 1, 'Initial component list', NULL, '

Component Library

Shared React components for the website redesign.

Components

', @carol_id, '2025-11-20 15:00:00'), (@log_component_lib, 2, 'Added Modal, Table, and design tokens', 'Expanded component list and added design token documentation.', '

Component Library

The redesign introduces a shared component library built on React with Tailwind CSS. Components are documented in Storybook.

Core Components

Design Tokens

Colors, spacing, radii, and shadows are defined as CSS custom properties generated from a shared token config.

', @carol_id, '2026-02-14 11:00:00'); -- ========================= -- Comments — across various documents -- ========================= -- API Overview: active discussion INSERT INTO comments (log_id, user_id, content, tag, status, selection_start, selection_end, selected_text, created_at) VALUES (@log_api_overview, @bob_id, 'Should we mention the new v3 beta endpoints here? Some enterprise customers are already testing them.', 'question', 'open', 45, 110, 'RESTful endpoints for managing resources across the Acme ecosystem', '2026-03-20 10:15:00'), (@log_api_overview, @eve_id, 'The 1000 req/min limit feels low for our largest customers. Can we add a note about enterprise tier limits?', 'suggestion', 'open', 280, 340, 'rate limit of 1,000 requests per minute', '2026-03-22 14:30:00'), (@log_api_overview, @carol_id, 'Typo: "Per API key" should clarify whether this is per key or per account.', 'comment', 'resolved', 340, 360, 'per API key', '2026-02-10 09:00:00'); SELECT @comment_api_v3 := id FROM comments WHERE log_id = @log_api_overview AND user_id = @bob_id AND tag = 'question'; SELECT @comment_api_rate := id FROM comments WHERE log_id = @log_api_overview AND user_id = @eve_id AND tag = 'suggestion'; SELECT @comment_api_typo := id FROM comments WHERE log_id = @log_api_overview AND user_id = @carol_id AND status = 'resolved'; UPDATE comments SET resolved_by = @alice_id, resolved_at = '2026-02-10 11:30:00' WHERE id = @comment_api_typo; -- Authentication Guide: security review INSERT INTO comments (log_id, user_id, content, tag, status, selection_start, selection_end, selected_text, created_at) VALUES (@log_auth_guide, @dave_id, 'We should add a note about token rotation best practices. Customers keep using expired tokens and filing support tickets.', 'suggestion', 'open', 200, 270, 'Token expiry is 3600 seconds', '2026-03-25 11:00:00'), (@log_auth_guide, @alice_id, 'Consider adding PKCE flow documentation for mobile/SPA clients — authorization code flow alone is insecure for public clients.', 'issue', 'open', 150, 200, 'authorization code flow', '2026-04-01 09:30:00'); -- Architecture Overview: review comments INSERT INTO comments (log_id, user_id, content, tag, status, selection_start, selection_end, selected_text, created_at) VALUES (@log_arch_overview, @eve_id, 'We should update this to mention the new edge caching layer we deployed in Q1.', 'suggestion', 'open', NULL, NULL, NULL, '2026-04-02 10:00:00'), (@log_arch_overview, @dave_id, 'The Istio version should be pinned here — we''re on 1.20 and it matters for NetworkPolicy behavior.', 'note', 'open', 120, 155, 'Service mesh (Istio)', '2026-03-18 14:00:00'); -- CI/CD Pipeline: process discussion INSERT INTO comments (log_id, user_id, content, tag, status, selection_start, selection_end, selected_text, created_at) VALUES (@log_cicd, @bob_id, 'The canary percentage should be configurable per service. Some services handle 10% fine, others need 1%.', 'suggestion', 'open', 350, 420, 'Canary deployments roll out to 10% of traffic', '2026-03-28 16:00:00'), (@log_cicd, @alice_id, 'Integration tests are flaky ~5% of the time — we should note the retry policy.', 'issue', 'resolved', 180, 230, 'Integration tests (with test database)', '2026-01-15 10:00:00'); SELECT @comment_cicd_flaky := id FROM comments WHERE log_id = @log_cicd AND user_id = @alice_id AND status = 'resolved'; UPDATE comments SET resolved_by = @bob_id, resolved_at = '2026-01-20 11:00:00' WHERE id = @comment_cicd_flaky; -- Monitoring dashboard comments INSERT INTO comments (log_id, user_id, content, tag, status, created_at) VALUES (@log_monitoring, @alice_id, 'Can we add an SLO dashboard section? We track SLOs but they are not documented here.', 'suggestion', 'open', '2026-04-05 09:00:00'), (@log_monitoring, @bob_id, 'LogrDuty → PagerDuty? Is this a typo or do we actually use LogrDuty?', 'question', 'open', '2026-04-08 11:30:00'); -- Database Failover runbook comments INSERT INTO comments (log_id, user_id, content, tag, status, selection_start, selection_end, selected_text, created_at) VALUES (@log_db_failover, @bob_id, 'We should add the specific AWS CLI commands for manual failover so on-call doesn''t have to look them up under pressure.', 'suggestion', 'open', 250, 320, 'initiate manual failover via AWS Console', '2026-03-10 08:45:00'), (@log_db_failover, @alice_id, 'After the March 3 incident, we discovered the health check interval was too long. Note the updated 10s interval.', 'note', 'resolved', NULL, NULL, NULL, '2026-03-06 09:00:00'); SELECT @comment_db_healthcheck := id FROM comments WHERE log_id = @log_db_failover AND user_id = @alice_id AND tag = 'note'; UPDATE comments SET resolved_by = @dave_id, resolved_at = '2026-03-07 14:00:00' WHERE id = @comment_db_healthcheck; -- Performance Budget discussion INSERT INTO comments (log_id, user_id, content, tag, status, selection_start, selection_end, selected_text, created_at) VALUES (@log_perf_budget, @bob_id, 'Initial JS budget of 150 KB gzipped might be tight with the new analytics SDK. Can we get an exemption or find a lighter alternative?', 'issue', 'open', 200, 250, 'Initial JS: < 150 KB gzipped', '2026-04-01 15:00:00'), (@log_perf_budget, @carol_id, 'Font budget is fine — we''re at 82 KB with the current subset. Confirmed with latest build.', 'note', 'resolved', 270, 310, 'Fonts: < 100 KB', '2026-03-15 10:00:00'); SELECT @comment_perf_font := id FROM comments WHERE log_id = @log_perf_budget AND user_id = @carol_id AND tag = 'note'; UPDATE comments SET resolved_by = @carol_id, resolved_at = '2026-03-15 10:05:00' WHERE id = @comment_perf_font; -- Color Palette feedback INSERT INTO comments (log_id, user_id, content, tag, status, selection_start, selection_end, selected_text, created_at) VALUES (@log_color_palette, @alice_id, 'The contrast ratio between Acme Blue and white background is 3.8:1 which barely passes AA for large text. Should we darken it slightly?', 'issue', 'open', 80, 130, 'Acme Blue — #2CA7DB', '2026-03-30 11:00:00'), (@log_color_palette, @eve_id, 'Love the palette! Can we add a dark mode variant column?', 'suggestion', 'open', NULL, NULL, NULL, '2026-04-03 09:30:00'); -- Code Review Guidelines INSERT INTO comments (log_id, user_id, content, tag, status, created_at) VALUES (@log_code_review, @eve_id, 'Should we add a section about reviewing AI-generated code? Becoming more common on our PRs.', 'suggestion', 'open', '2026-04-09 10:00:00'), (@log_code_review, @dave_id, '"Review within one business day" — should this be shorter for critical bugfix PRs?', 'question', 'open', '2026-04-10 14:00:00'); -- Data Quality Framework INSERT INTO comments (log_id, user_id, content, tag, status, selection_start, selection_end, selected_text, created_at) VALUES (@log_data_quality, @eve_id, 'Great Expectations is being deprecated in favor of GX Cloud. We should plan the migration.', 'issue', 'open', 250, 300, 'Great Expectations runs nightly validation suites', '2026-04-07 09:00:00'); -- dbt Model Guide INSERT INTO comments (log_id, user_id, content, tag, status, created_at) VALUES (@log_dbt_guide, @bob_id, 'We also need conventions for snapshot models. Several teams have started using them inconsistently.', 'suggestion', 'open', '2026-03-25 16:00:00'); -- ========================= -- Comment Replies -- ========================= -- Reply thread on API v3 question INSERT INTO comment_replies (comment_id, user_id, content, created_at) VALUES (@comment_api_v3, @alice_id, 'Good point. Let''s add a "Beta Endpoints" callout box at the top. I''ll draft something this week.', '2026-03-20 11:00:00'), (@comment_api_v3, @eve_id, 'The v3 beta is currently opt-in only. We should note that endpoints may change without notice.', '2026-03-20 14:30:00'), (@comment_api_v3, @bob_id, 'Agreed. I''ll also add the beta header requirement: X-API-Version: 3-beta', '2026-03-21 09:00:00'); -- Reply thread on API rate limit INSERT INTO comment_replies (comment_id, user_id, content, created_at) VALUES (@comment_api_rate, @alice_id, 'Enterprise customers can already request custom limits. We should document the process here.', '2026-03-22 15:00:00'), (@comment_api_rate, @bob_id, 'I can add the enterprise rate limit tiers: 5K, 10K, and 25K per minute.', '2026-03-23 10:00:00'); -- Reply on resolved API typo INSERT INTO comment_replies (comment_id, user_id, content, created_at) VALUES (@comment_api_typo, @alice_id, 'Fixed — clarified it''s per API key, not per account. Each key has its own counter.', '2026-02-10 11:30:00'); -- Reply on CI/CD canary INSERT INTO comment_replies (comment_id, user_id, content, created_at) VALUES ((SELECT id FROM comments WHERE log_id = @log_cicd AND user_id = @bob_id AND tag = 'suggestion'), @alice_id, 'Makes sense. Let''s add a canary_percentage field to our ArgoCD app configs.', '2026-03-29 09:00:00'), ((SELECT id FROM comments WHERE log_id = @log_cicd AND user_id = @bob_id AND tag = 'suggestion'), @dave_id, '+1, the payment service definitely needs a smaller canary window.', '2026-03-29 10:30:00'); -- Reply on architecture edge caching INSERT INTO comment_replies (comment_id, user_id, content, created_at) VALUES ((SELECT id FROM comments WHERE log_id = @log_arch_overview AND user_id = @eve_id), @bob_id, 'I can add that section. The Cloudflare Workers cache layer handles about 60% of read traffic now.', '2026-04-02 11:00:00'); -- Reply on DB failover CLI commands INSERT INTO comment_replies (comment_id, user_id, content, created_at) VALUES ((SELECT id FROM comments WHERE log_id = @log_db_failover AND user_id = @bob_id AND tag = 'suggestion'), @dave_id, 'Great idea. I''ll add the full aws rds failover-db-cluster command with our cluster-id.', '2026-03-10 10:00:00'), ((SELECT id FROM comments WHERE log_id = @log_db_failover AND user_id = @bob_id AND tag = 'suggestion'), @alice_id, 'Also add the verification command to check the new primary''s endpoint.', '2026-03-10 11:30:00'); -- Reply on code review AI INSERT INTO comment_replies (comment_id, user_id, content, created_at) VALUES ((SELECT id FROM comments WHERE log_id = @log_code_review AND user_id = @eve_id), @alice_id, 'Yes! Key concern: reviewers need to treat AI code with extra scrutiny for security and correctness.', '2026-04-09 11:30:00'), ((SELECT id FROM comments WHERE log_id = @log_code_review AND user_id = @eve_id), @bob_id, 'We should require authors to label which parts were AI-assisted in the PR description.', '2026-04-09 14:00:00'); -- Reply on performance budget JS size INSERT INTO comment_replies (comment_id, user_id, content, created_at) VALUES ((SELECT id FROM comments WHERE log_id = @log_perf_budget AND user_id = @bob_id AND tag = 'issue'), @carol_id, 'Let''s evaluate Plausible''s lightweight script vs the current SDK. It''s under 1 KB.', '2026-04-01 16:00:00'), ((SELECT id FROM comments WHERE log_id = @log_perf_budget AND user_id = @bob_id AND tag = 'issue'), @alice_id, 'We could also defer the analytics SDK to after first paint — won''t affect LCP.', '2026-04-02 09:00:00'); -- ========================= -- Favorites -- ========================= INSERT INTO favorites (user_id, log_id, created_at) VALUES (@alice_id, @log_api_overview, '2026-01-05 10:00:00'), (@alice_id, @log_cicd, '2026-01-12 14:00:00'), (@alice_id, @log_component_lib, '2026-02-20 09:00:00'), (@alice_id, @log_code_review, '2025-10-20 15:00:00'), (@bob_id, @log_arch_overview, '2025-11-01 10:00:00'), (@bob_id, @log_k8s_setup, '2025-11-05 11:00:00'), (@bob_id, @log_rate_limit, '2025-12-22 09:00:00'), (@bob_id, @log_dbt_guide, '2026-01-15 10:00:00'), (@carol_id, @log_color_palette, '2025-10-30 09:00:00'), (@carol_id, @log_typography, '2025-11-05 10:00:00'), (@carol_id, @log_perf_budget, '2025-11-15 14:00:00'), (@carol_id, @log_component_lib, '2025-11-25 09:00:00'), (@dave_id, @log_db_failover, '2025-10-20 08:00:00'), (@dave_id, @log_high_cpu, '2025-10-28 14:00:00'), (@dave_id, @log_secrets_mgmt, '2025-12-23 15:00:00'), (@dave_id, @log_monitoring, '2025-11-12 10:00:00'), (@dave_id, @log_welcome, '2025-10-12 09:00:00'), (@eve_id, @log_pipeline_arch, '2025-11-05 08:00:00'), (@eve_id, @log_data_quality, '2025-12-05 14:00:00'), (@eve_id, @log_push_notif, '2025-11-18 13:00:00'), (@eve_id, @log_webhooks, '2025-11-15 17:00:00'), (@eve_id, @log_batch_ops, '2025-12-01 09:00:00');