All skills
Skillintermediate
Sudocode CRUD Operations
This directory contains all database CRUD operations for sudocode.
Claude Code Knowledge Pack7/10/2026
Overview
Sudocode CRUD Operations
This directory contains all database CRUD operations for sudocode.
Modules
specs.ts - Spec Operations
- createSpec - Create a new spec
- getSpec - Retrieve a spec by ID
- updateSpec - Update spec fields
- deleteSpec - Delete a spec
- listSpecs - List specs with filters (status, type, priority, etc.)
- getReadySpecs - Get specs with no blockers
- searchSpecs - Full-text search in title and content
issues.ts - Issue Operations
- createIssue - Create a new issue
- getIssue - Retrieve an issue by ID
- updateIssue - Update issue fields
- deleteIssue - Delete an issue
- closeIssue - Close an issue (sets status to closed, records closed_at)
- reopenIssue - Reopen a closed issue
- listIssues - List issues with filters (status, type, priority, assignee, etc.)
- getReadyIssues - Get issues with no blockers
- getBlockedIssues - Get issues blocked by dependencies
- searchIssues - Full-text search in title, description, and content
relationships.ts - Relationship Operations
- addRelationship - Create a relationship between entities
- removeRelationship - Remove a specific relationship
- getOutgoingRelationships - Get relationships where entity is the source
- getIncomingRelationships - Get relationships where entity is the target
- getDependencies - Get what this entity depends on (blockers)
- getDependents - Get what depends on this entity (things it blocks)
- getAllRelationships - Get both incoming and outgoing relationships
- relationshipExists - Check if a relationship exists
- removeAllRelationships - Remove all relationships for an entity
tags.ts - Tag Operations
- addTag - Add a single tag to an entity
- addTags - Add multiple tags at once
- removeTag - Remove a specific tag
- getTags - Get all tags for an entity
- getEntitiesByTag - Find entities with a specific tag
- removeAllTags - Remove all tags from an entity
- hasTag - Check if an entity has a tag
- getAllTags - Get all unique tags in the system
- setTags - Replace all tags for an entity
events.ts - Event Operations
- insertEvent - Record an event in the audit trail
- getEvent - Get an event by ID
- queryEvents - Query events with filters
- getEntityEvents - Get all events for a specific entity
- getRecentEvents - Get recent events across all entities
- getEventsByActor - Get events by a specific actor
- deleteEntityEvents - Delete all events for an entity
transactions.ts - Transaction Support
- transaction - Execute a function in a transaction with auto commit/rollback
- batchTransaction - Execute multiple operations in a single transaction
- withRetry - Execute with automatic retry on busy/locked errors
- SavepointTransaction - Nested transaction support using savepoints
Usage Examples
Creating and Linking Entities
const db = initDatabase({ path: '.sudocode/cache.db' });
// Create a spec
const spec = createSpec(db, {
id: 'spec-001',
title: 'Authentication System',
file_path: '.sudocode/specs/auth.md',
content: '# Auth System\
\
OAuth 2.0 implementation',
type: 'architecture',
status: 'draft',
priority: 1,
created_by: 'alice',
});
// Create an issue that implements the spec
const issue = createIssue(db, {
id: 'issue-001',
title: 'Implement OAuth endpoints',
description: 'Add OAuth 2.0 endpoints',
status: 'open',
priority: 1,
issue_type: 'task',
assignee: 'agent-backend',
created_by: 'alice',
});
// Link them
addRelationship(db, {
from_id: 'issue-001',
from_type: 'issue',
to_id: 'spec-001',
to_type: 'spec',
relationship_type: 'implements',
created_by: 'alice',
});
// Add tags
addTags(db, 'issue-001', 'issue', ['auth', 'backend', 'security']);
Using Transactions
transaction(db, () => {
// All operations succeed or fail together
const issue = createIssue(db, { ... });
addRelationship(db, { ... });
insertEvent(db, {
entity_id: issue.id,
entity_type: 'issue',
event_type: 'created',
actor: 'alice',
new_value: JSON.stringify(issue),
});
});
Querying Ready Work
// Get all issues ready to work on (no blockers)
const ready = getReadyIssues(db);
console.log(`Found ${ready.length} issues ready to work on:`);
for (const issue of ready) {
console.log(`- ${issue.id}: ${issue.title}`);
}
// Check what blocks a specific issue
const blockers = getDependencies(db, 'issue-001', 'issue');
if (blockers.length > 0) {
console.log(`Issue blocked by ${blockers.length} dependencies`);
}
Error Handling
All CRUD operations throw errors on constraint violations:
try {
createIssue(db, {
id: 'issue-001',
title: 'Duplicate ID',
created_by: 'alice',
});
} catch (error) {
if (error.message.includes('Constraint violation')) {
console.error('Issue ID already exists');
}
}
Testing
All operations have comprehensive unit tests:
npm test
Test files:
specs.test.ts- 16 tests for spec operationsissues.test.ts- 15 tests for issue operationsrelationships.test.ts- 11 tests for relationship operationstags.test.ts- 15 tests for tag operationstransactions.test.ts- 9 tests for transaction support
Total: 66 tests, all passing ✅