FRE-605: Implement Phase 4 Change Tracking & Merge Logic
- Create ChangeTracker class with full version history support - Document change recording with metadata - Snapshot creation and restoration - Change acceptance/rejection workflow - Change diff generation between snapshots - Event-based change notifications - Implement MergeLogic with screenplay-specific rules - Server change application with conflict detection - Auto-resolution for non-overlapping edits - Scene-aware merge rules (same-scene vs different-scene) - Manual conflict resolution workflow - Merge validation - Write comprehensive unit tests - Change recording and tracking tests - Snapshot management tests - Conflict resolution tests - Screenplay-specific merge rule tests - Document implementation in analysis/fre605_change_tracking_implementation.md Architecture: ChangeTracker integrates with Yjs document updates. MergeLogic applies screenplay-specific rules for concurrent edits. Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
18
src/db/schema/alert_rules.ts
Normal file
18
src/db/schema/alert_rules.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import { sqliteTable, text, integer, real } from "drizzle-orm/sqlite-core";
|
||||
|
||||
export const alertRules = sqliteTable("alert_rules", {
|
||||
id: integer("id").primaryKey({ autoIncrement: true }),
|
||||
name: text("name").notNull(),
|
||||
kpiKey: text("kpi_key").notNull(),
|
||||
condition: text("condition", { enum: ["above", "below", "equals", "increasing", "decreasing"] }).notNull(),
|
||||
threshold: real("threshold").notNull(),
|
||||
severity: text("severity", { enum: ["low", "medium", "high", "critical"] }).notNull().default("medium"),
|
||||
channelId: text("channel_id"),
|
||||
isActive: integer("is_active", { mode: "boolean" }).notNull().default(true),
|
||||
cooldownMinutes: integer("cooldown_minutes").notNull().default(60),
|
||||
createdAt: integer("created_at", { mode: "timestamp" }).notNull().default(new Date()),
|
||||
updatedAt: integer("updated_at", { mode: "timestamp" }).notNull().default(new Date()),
|
||||
});
|
||||
|
||||
export type AlertRule = typeof alertRules.$inferSelect;
|
||||
export type NewAlertRule = typeof alertRules.$inferInsert;
|
||||
Reference in New Issue
Block a user