Implements batch list/show/ready/next/start/complete commands with dependency validation, migrates 42 implementation batches (2377 features, 2087 tests) from porting_batches.db into the live tracking database, and documents the batch workflow in AGENTS.md.
162 lines
5.7 KiB
SQL
162 lines
5.7 KiB
SQL
-- porting-schema.sql
|
|
-- Schema for NATS server Go-to-.NET porting tracker
|
|
|
|
PRAGMA journal_mode=WAL;
|
|
PRAGMA foreign_keys=ON;
|
|
|
|
CREATE TABLE IF NOT EXISTS modules (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
name TEXT NOT NULL,
|
|
description TEXT,
|
|
go_package TEXT,
|
|
go_file TEXT,
|
|
go_line_start INTEGER,
|
|
go_line_count INTEGER,
|
|
status TEXT NOT NULL DEFAULT 'not_started'
|
|
CHECK (status IN ('not_started', 'stub', 'complete', 'verified', 'n_a')),
|
|
dotnet_project TEXT,
|
|
dotnet_namespace TEXT,
|
|
dotnet_class TEXT,
|
|
notes TEXT,
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS features (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
module_id INTEGER NOT NULL REFERENCES modules(id) ON DELETE CASCADE,
|
|
name TEXT NOT NULL,
|
|
description TEXT,
|
|
go_file TEXT,
|
|
go_class TEXT,
|
|
go_method TEXT,
|
|
go_line_number INTEGER,
|
|
go_line_count INTEGER,
|
|
status TEXT NOT NULL DEFAULT 'not_started'
|
|
CHECK (status IN ('not_started', 'stub', 'complete', 'verified', 'n_a', 'deferred', 'unknown')),
|
|
dotnet_project TEXT,
|
|
dotnet_class TEXT,
|
|
dotnet_method TEXT,
|
|
notes TEXT,
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS unit_tests (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
module_id INTEGER NOT NULL REFERENCES modules(id) ON DELETE CASCADE,
|
|
feature_id INTEGER REFERENCES features(id) ON DELETE SET NULL,
|
|
name TEXT NOT NULL,
|
|
description TEXT,
|
|
go_file TEXT,
|
|
go_class TEXT,
|
|
go_method TEXT,
|
|
go_line_number INTEGER,
|
|
go_line_count INTEGER,
|
|
status TEXT NOT NULL DEFAULT 'not_started'
|
|
CHECK (status IN ('not_started', 'stub', 'complete', 'verified', 'n_a', 'deferred', 'unknown')),
|
|
dotnet_project TEXT,
|
|
dotnet_class TEXT,
|
|
dotnet_method TEXT,
|
|
notes TEXT,
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS dependencies (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
source_type TEXT NOT NULL CHECK (source_type IN ('module', 'feature', 'unit_test')),
|
|
source_id INTEGER NOT NULL,
|
|
target_type TEXT NOT NULL CHECK (target_type IN ('module', 'feature', 'unit_test')),
|
|
target_id INTEGER NOT NULL,
|
|
dependency_kind TEXT DEFAULT 'calls',
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
UNIQUE (source_type, source_id, target_type, target_id)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS library_mappings (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
go_import_path TEXT NOT NULL UNIQUE,
|
|
go_library_name TEXT,
|
|
go_usage_description TEXT,
|
|
dotnet_package TEXT,
|
|
dotnet_namespace TEXT,
|
|
dotnet_usage_notes TEXT,
|
|
status TEXT NOT NULL DEFAULT 'not_mapped'
|
|
CHECK (status IN ('not_mapped', 'mapped', 'verified')),
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS status_overrides (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
table_name TEXT NOT NULL CHECK (table_name IN ('features', 'unit_tests')),
|
|
item_id INTEGER NOT NULL,
|
|
audit_status TEXT NOT NULL,
|
|
audit_reason TEXT NOT NULL,
|
|
requested_status TEXT NOT NULL,
|
|
comment TEXT NOT NULL,
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS implementation_batches (
|
|
id INTEGER PRIMARY KEY,
|
|
name TEXT NOT NULL,
|
|
description TEXT,
|
|
priority INTEGER NOT NULL,
|
|
feature_count INTEGER DEFAULT 0,
|
|
test_count INTEGER DEFAULT 0,
|
|
status TEXT DEFAULT 'pending',
|
|
depends_on TEXT,
|
|
go_files TEXT,
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS batch_features (
|
|
batch_id INTEGER NOT NULL REFERENCES implementation_batches(id),
|
|
feature_id INTEGER NOT NULL REFERENCES features(id),
|
|
PRIMARY KEY (batch_id, feature_id)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS batch_tests (
|
|
batch_id INTEGER NOT NULL REFERENCES implementation_batches(id),
|
|
test_id INTEGER NOT NULL REFERENCES unit_tests(id),
|
|
PRIMARY KEY (batch_id, test_id)
|
|
);
|
|
|
|
-- Indexes
|
|
CREATE INDEX IF NOT EXISTS idx_features_module ON features(module_id);
|
|
CREATE INDEX IF NOT EXISTS idx_features_status ON features(status);
|
|
CREATE INDEX IF NOT EXISTS idx_unit_tests_module ON unit_tests(module_id);
|
|
CREATE INDEX IF NOT EXISTS idx_unit_tests_feature ON unit_tests(feature_id);
|
|
CREATE INDEX IF NOT EXISTS idx_unit_tests_status ON unit_tests(status);
|
|
CREATE INDEX IF NOT EXISTS idx_deps_source ON dependencies(source_type, source_id);
|
|
CREATE INDEX IF NOT EXISTS idx_deps_target ON dependencies(target_type, target_id);
|
|
CREATE INDEX IF NOT EXISTS idx_library_status ON library_mappings(status);
|
|
CREATE INDEX IF NOT EXISTS idx_modules_status ON modules(status);
|
|
CREATE INDEX IF NOT EXISTS idx_batch_features_feature ON batch_features(feature_id);
|
|
CREATE INDEX IF NOT EXISTS idx_batch_tests_test ON batch_tests(test_id);
|
|
CREATE INDEX IF NOT EXISTS idx_batches_status ON implementation_batches(status);
|
|
CREATE INDEX IF NOT EXISTS idx_batches_priority ON implementation_batches(priority);
|
|
|
|
-- Triggers to auto-update updated_at
|
|
CREATE TRIGGER IF NOT EXISTS trg_modules_updated AFTER UPDATE ON modules
|
|
BEGIN
|
|
UPDATE modules SET updated_at = CURRENT_TIMESTAMP WHERE id = NEW.id;
|
|
END;
|
|
|
|
CREATE TRIGGER IF NOT EXISTS trg_features_updated AFTER UPDATE ON features
|
|
BEGIN
|
|
UPDATE features SET updated_at = CURRENT_TIMESTAMP WHERE id = NEW.id;
|
|
END;
|
|
|
|
CREATE TRIGGER IF NOT EXISTS trg_unit_tests_updated AFTER UPDATE ON unit_tests
|
|
BEGIN
|
|
UPDATE unit_tests SET updated_at = CURRENT_TIMESTAMP WHERE id = NEW.id;
|
|
END;
|
|
|
|
CREATE TRIGGER IF NOT EXISTS trg_library_mappings_updated AFTER UPDATE ON library_mappings
|
|
BEGIN
|
|
UPDATE library_mappings SET updated_at = CURRENT_TIMESTAMP WHERE id = NEW.id;
|
|
END;
|