@gitgov/core 1.6.0 ā 1.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/index.js +3 -0
- package/dist/src/index.js.map +1 -1
- package/package.json +1 -1
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/adapters/index.ts","../../src/adapters/backlog_adapter/index.ts","../../src/schemas/generated/actor_record_schema.json","../../src/schemas/generated/agent_record_schema.json","../../src/schemas/generated/changelog_record_schema.json","../../src/schemas/generated/cycle_record_schema.json","../../src/schemas/generated/embedded_metadata_schema.json","../../src/schemas/generated/execution_record_schema.json","../../src/schemas/generated/feedback_record_schema.json","../../src/schemas/generated/task_record_schema.json","../../src/schemas/generated/workflow_methodology_record_schema.json","../../src/schemas/generated/index.ts","../../src/schemas/schema_cache.ts","../../src/schemas/index.ts","../../src/types/common.types.ts","../../src/schemas/errors.ts","../../src/validation/errors.ts","../../src/crypto/checksum.ts","../../src/logger/index.ts","../../src/logger/logger.ts","../../src/crypto/signatures.ts","../../src/validation/embedded_metadata_validator.ts","../../src/validation/task_validator.ts","../../src/utils/id_generator.ts","../../src/factories/task_factory.ts","../../src/validation/cycle_validator.ts","../../src/factories/cycle_factory.ts","../../src/store/index.ts","../../src/config_manager/index.ts","../../src/store/record_store.ts","../../src/adapters/identity_adapter/index.ts","../../src/validation/actor_validator.ts","../../src/factories/actor_factory.ts","../../src/validation/agent_validator.ts","../../src/factories/agent_factory.ts","../../src/adapters/feedback_adapter/index.ts","../../src/validation/feedback_validator.ts","../../src/factories/feedback_factory.ts","../../src/adapters/execution_adapter/index.ts","../../src/validation/execution_validator.ts","../../src/factories/execution_factory.ts","../../src/adapters/changelog_adapter/index.ts","../../src/validation/changelog_validator.ts","../../src/factories/changelog_factory.ts","../../src/adapters/metrics_adapter/index.ts","../../src/adapters/indexer_adapter/index.ts","../../src/adapters/project_adapter/index.ts","../../src/adapters/workflow_methodology_adapter/index.ts","../../src/adapters/workflow_methodology_adapter/workflow_methodology_default.json","../../src/adapters/workflow_methodology_adapter/workflow_methodology_scrum.json","../../src/crypto/index.ts","../../src/factories/index.ts","../../src/validation/workflow_methodology_validator.ts","../../src/factories/workflow_methodology_factory.ts","../../src/factories/embedded_metadata_factory.ts","../../src/validation/index.ts","../../src/types/index.ts","../../src/event_bus/index.ts","../../src/event_bus/event_bus.ts","../../src/diagram_generator/index.ts","../../src/diagram_generator/graph_validator.ts","../../src/diagram_generator/relationship_analyzer.ts","../../src/diagram_generator/mermaid_renderer.ts","../../src/diagram_generator/diagram_generator.ts"],"names":["logger","createHash","fs","projectRoot","path2","path3","fsSync","pathUtils","path","existsSync","path4"],"mappings":"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","file":"index.js","sourcesContent":["export * from \"./backlog_adapter\";\nexport * from \"./changelog_adapter\";\nexport * from \"./execution_adapter\";\nexport * from \"./feedback_adapter\";\nexport * from \"./identity_adapter\";\nexport * from \"./indexer_adapter\";\nexport * from \"./metrics_adapter\";\nexport * from \"./project_adapter\";\nexport * from \"./workflow_methodology_adapter\";\n","import { createTaskRecord } from '../../factories/task_factory';\nimport { createCycleRecord } from '../../factories/cycle_factory';\nimport { RecordStore } from '../../store';\nimport { IdentityAdapter } from '../identity_adapter';\nimport { FeedbackAdapter } from '../feedback_adapter';\nimport { ExecutionAdapter } from '../execution_adapter';\nimport { ChangelogAdapter } from '../changelog_adapter';\nimport { MetricsAdapter } from '../metrics_adapter';\nimport type { TaskRecord } from '../../types';\nimport type { CycleRecord } from '../../types';\nimport type { FeedbackRecord } from '../../types';\nimport type { ExecutionRecord } from '../../types';\nimport type { ChangelogRecord } from '../../types';\nimport type { IWorkflowMethodology } from '../workflow_methodology_adapter';\nimport type { ActorRecord } from '../../types';\nimport type {\n IEventStream,\n TaskCreatedEvent,\n TaskStatusChangedEvent,\n CycleCreatedEvent,\n CycleStatusChangedEvent,\n FeedbackCreatedEvent,\n ExecutionCreatedEvent,\n ChangelogCreatedEvent,\n SystemDailyTickEvent,\n EventMetadata\n} from '../../event_bus';\nimport type { GitGovRecord } from '../../types';\n\n/**\n * BacklogAdapter Dependencies - Facade + Dependency Injection Pattern\n */\nexport type BacklogAdapterDependencies = {\n // Data Layer (Protocols)\n taskStore: RecordStore<TaskRecord>;\n cycleStore: RecordStore<CycleRecord>;\n\n // Cross-Adapter Dependencies (Mediator coordination) - PHASE 3 READY\n feedbackStore: RecordStore<FeedbackRecord>;\n executionStore: RecordStore<ExecutionRecord>;\n changelogStore: RecordStore<ChangelogRecord>;\n\n // Adapter Dependencies (Phase 3 Integration)\n feedbackAdapter: FeedbackAdapter;\n executionAdapter: ExecutionAdapter;\n changelogAdapter: ChangelogAdapter;\n metricsAdapter: MetricsAdapter;\n\n // Business Rules Layer (Methodologies)\n workflowMethodologyAdapter: IWorkflowMethodology;\n planningMethodologyAdapter?: IWorkflowMethodology; // Future\n\n // Infrastructure Layer\n identity: IdentityAdapter;\n eventBus: IEventStream; // For listening to events (consumer pattern)\n\n // Configuration Layer (Optional)\n config?: BacklogAdapterConfig; // Optional configuration, defaults to DEFAULT_CONFIG\n};\n\n/**\n * BacklogAdapter Interface - The Facade/Mediator\n */\nexport interface IBacklogAdapter {\n // Phase 1: Task/Cycle CRUD operations\n createTask(payload: Partial<TaskRecord>, actorId: string): Promise<TaskRecord>;\n getTask(taskId: string): Promise<TaskRecord | null>;\n getAllTasks(): Promise<TaskRecord[]>;\n submitTask(taskId: string, actorId: string): Promise<TaskRecord>;\n approveTask(taskId: string, actorId: string): Promise<TaskRecord>;\n updateTask(taskId: string, payload: Partial<TaskRecord>): Promise<TaskRecord>;\n activateTask(taskId: string, actorId: string): Promise<TaskRecord>;\n completeTask(taskId: string, actorId: string): Promise<TaskRecord>;\n pauseTask(taskId: string, actorId: string, reason?: string): Promise<TaskRecord>;\n resumeTask(taskId: string, actorId: string, force?: boolean): Promise<TaskRecord>;\n discardTask(taskId: string, actorId: string, reason?: string): Promise<TaskRecord>;\n deleteTask(taskId: string, actorId: string): Promise<void>;\n\n createCycle(payload: Partial<CycleRecord>, actorId: string): Promise<CycleRecord>;\n getCycle(cycleId: string): Promise<CycleRecord | null>;\n getAllCycles(): Promise<CycleRecord[]>;\n updateCycle(cycleId: string, payload: Partial<CycleRecord>): Promise<CycleRecord>;\n addTaskToCycle(cycleId: string, taskId: string): Promise<void>;\n removeTasksFromCycle(cycleId: string, taskIds: string[]): Promise<void>;\n moveTasksBetweenCycles(targetCycleId: string, taskIds: string[], sourceCycleId: string): Promise<void>;\n\n // Phase 2: Agent Navigation\n getTasksAssignedToActor(actorId: string): Promise<TaskRecord[]>;\n\n // Phase 3: Event Handlers (NEW)\n handleFeedbackCreated(event: FeedbackCreatedEvent): Promise<void>;\n handleExecutionCreated(event: ExecutionCreatedEvent): Promise<void>;\n handleChangelogCreated(event: ChangelogCreatedEvent): Promise<void>;\n handleCycleStatusChanged(event: CycleStatusChangedEvent): Promise<void>;\n handleDailyTick(event: SystemDailyTickEvent): Promise<void>;\n\n // Phase 4: Stubs and Polish (Future)\n getSystemStatus(): Promise<SystemStatus>;\n getTaskHealth(taskId: string): Promise<TaskHealthReport>;\n lint(): Promise<LintReport>;\n audit(): Promise<AuditReport>;\n processChanges(changes: unknown[]): Promise<ExecutionRecord[]>;\n}\n\n// Type imports from MetricsAdapter\nimport type { SystemStatus, TaskHealthReport } from '../metrics_adapter';\n\n// Configuration types\nexport type BacklogAdapterConfig = {\n healthThresholds: {\n taskMinScore: number; // Minimum task health score before warning\n maxDaysInStage: number; // Maximum days in stage before stale warning\n systemMinScore: number; // Minimum system health score before alert\n };\n}\n\n// Default configuration\nconst DEFAULT_CONFIG: BacklogAdapterConfig = {\n healthThresholds: {\n taskMinScore: 50,\n maxDaysInStage: 7,\n systemMinScore: 60\n }\n};\n\n// Future types\ntype LintReport = { status: 'success' | 'failed'; issues: string[] };\ntype AuditReport = { status: 'success' | 'failed'; violations: string[] };\n\n/**\n * BacklogAdapter - The Facade/Mediator\n * \n * Implements Facade + Dependency Injection Pattern for testeable and configurable orchestration.\n * Acts as Mediator between Task/Cycle protocols and Workflow/Planning methodologies.\n */\nexport class BacklogAdapter implements IBacklogAdapter {\n private taskStore: RecordStore<TaskRecord>;\n private cycleStore: RecordStore<CycleRecord>;\n private feedbackStore: RecordStore<FeedbackRecord>;\n private changelogStore: RecordStore<ChangelogRecord>;\n\n private feedbackAdapter: FeedbackAdapter;\n private metricsAdapter: MetricsAdapter;\n\n private workflowMethodologyAdapter: IWorkflowMethodology;\n private identity: IdentityAdapter;\n private eventBus: IEventStream;\n private config: BacklogAdapterConfig;\n\n\n constructor(dependencies: BacklogAdapterDependencies) {\n // Data Layer\n this.taskStore = dependencies.taskStore;\n this.cycleStore = dependencies.cycleStore;\n this.feedbackStore = dependencies.feedbackStore;\n this.changelogStore = dependencies.changelogStore;\n\n // Adapter Dependencies\n this.feedbackAdapter = dependencies.feedbackAdapter;\n this.metricsAdapter = dependencies.metricsAdapter;\n\n // Business Rules & Infrastructure\n this.workflowMethodologyAdapter = dependencies.workflowMethodologyAdapter;\n this.identity = dependencies.identity;\n this.eventBus = dependencies.eventBus;\n\n // Configuration with defaults\n this.config = dependencies.config || DEFAULT_CONFIG;\n\n // Phase 3: Setup event subscriptions\n this.setupEventSubscriptions();\n }\n\n /**\n * Setup event subscriptions for Phase 3 event handlers\n */\n private setupEventSubscriptions(): void {\n this.eventBus.subscribe<FeedbackCreatedEvent>(\"feedback.created\", (event) =>\n this.handleFeedbackCreated(event)\n );\n this.eventBus.subscribe<ExecutionCreatedEvent>(\"execution.created\", (event) =>\n this.handleExecutionCreated(event)\n );\n this.eventBus.subscribe<ChangelogCreatedEvent>(\"changelog.created\", (event) =>\n this.handleChangelogCreated(event)\n );\n this.eventBus.subscribe<CycleStatusChangedEvent>(\"cycle.status.changed\", (event) =>\n this.handleCycleStatusChanged(event)\n );\n this.eventBus.subscribe<SystemDailyTickEvent>(\"system.daily_tick\", (event) =>\n this.handleDailyTick(event)\n );\n }\n\n // ===== PHASE 1: TASK/CYCLE CRUD OPERATIONS (IMPLEMENTED) =====\n\n /**\n * Creates a new task with workflow validation\n */\n async createTask(payload: Partial<TaskRecord>, actorId: string): Promise<TaskRecord> {\n // 1. Build the record with factory\n const validatedPayload = await createTaskRecord(payload);\n\n // 2. Create unsigned record structure\n const unsignedRecord: GitGovRecord & { payload: TaskRecord } = {\n header: {\n version: '1.0',\n type: 'task',\n payloadChecksum: 'will-be-calculated-by-signRecord',\n signatures: [{\n keyId: actorId,\n role: 'author',\n notes: 'Task created',\n signature: 'placeholder',\n timestamp: Date.now()\n }]\n },\n payload: validatedPayload,\n };\n\n // 3. Sign the record\n const signedRecord = await this.identity.signRecord(unsignedRecord, actorId, 'author');\n\n // 4. Persist the record with validation\n await this.taskStore.write(signedRecord as GitGovRecord & { payload: TaskRecord });\n\n // 5. Emit event\n this.eventBus.publish({\n type: 'task.created',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId: validatedPayload.id,\n actorId\n },\n metadata: {\n eventId: `${Date.now()}-task-created-${validatedPayload.id}`,\n timestamp: Date.now(),\n sourceAdapter: 'backlog_adapter'\n }\n } as TaskCreatedEvent);\n\n return validatedPayload;\n }\n\n /**\n * Gets a specific task by ID\n */\n async getTask(taskId: string): Promise<TaskRecord | null> {\n const record = await this.taskStore.read(taskId);\n return record ? record.payload : null;\n }\n\n /**\n * Gets all tasks in the system\n */\n async getAllTasks(): Promise<TaskRecord[]> {\n const ids = await this.taskStore.list();\n const tasks: TaskRecord[] = [];\n\n for (const id of ids) {\n const record = await this.taskStore.read(id);\n if (record) {\n tasks.push(record.payload);\n }\n }\n\n return tasks;\n }\n\n /**\n * Submits a task for review\n */\n async submitTask(taskId: string, actorId: string): Promise<TaskRecord> {\n // Read and validate task exists\n const taskRecord = await this.taskStore.read(taskId);\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n\n const task = taskRecord.payload;\n\n // Validate current status\n if (task.status !== 'draft') {\n throw new Error(`ProtocolViolationError: Task ${taskId} is not in draft status`);\n }\n\n // Get actor with proper typing\n const actor = await this.getActor(actorId);\n\n // Delegate to workflow methodology for validation\n const transitionRule = await this.workflowMethodologyAdapter.getTransitionRule('draft', 'review', {\n task,\n actor,\n signatures: taskRecord.header.signatures\n });\n\n if (!transitionRule) {\n throw new Error(`ProtocolViolationError: Transition draftāreview not allowed for task ${taskId}`);\n }\n\n // Update task status\n const updatedPayload: TaskRecord = { ...task, status: 'review' as const };\n const updatedRecord = { ...taskRecord, payload: updatedPayload };\n\n // Sign and persist\n const signedRecord = await this.identity.signRecord(updatedRecord, actorId, 'submitter');\n await this.taskStore.write(signedRecord as GitGovRecord & { payload: TaskRecord });\n\n // Emit event\n this.eventBus.publish({\n type: 'task.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId,\n oldStatus: 'draft',\n newStatus: 'review',\n actorId\n }\n } as TaskStatusChangedEvent);\n\n return updatedPayload;\n }\n\n /**\n * Approves a task for next stage with complete workflow validation\n */\n async approveTask(taskId: string, actorId: string): Promise<TaskRecord> {\n // 1. Read and validate task exists\n const taskRecord = await this.taskStore.read(taskId);\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n\n const task = taskRecord.payload;\n const actor = await this.getActor(actorId);\n\n // 2. Determine target transition from available transitions\n const availableTransitions = await this.getAvailableTransitions(task.status);\n const approvalTransition = availableTransitions.find(transition =>\n transition.requires?.signatures && Object.keys(transition.requires.signatures).length > 0\n );\n\n if (!approvalTransition) {\n throw new Error(`ProtocolViolationError: No approval transition available from ${task.status}`);\n }\n\n const targetState = approvalTransition.to;\n\n // 3. Generate temporary signature for validation\n const tempSignature = {\n keyId: actorId,\n role: 'approver',\n notes: 'Task approval',\n signature: 'temp-signature',\n timestamp: Date.now()\n };\n\n // 4. Build complete validation context\n const context = {\n task,\n actor,\n signatures: [...taskRecord.header.signatures, tempSignature],\n transitionTo: targetState as TaskRecord['status']\n };\n\n // 5. Delegate signature validation to methodology\n const isValidSignature = await this.workflowMethodologyAdapter.validateSignature(tempSignature, context);\n if (!isValidSignature) {\n throw new Error(`ProtocolViolationError: Signature is not valid for this approval`);\n }\n\n // 6. Update, sign and persist if validation successful\n const updatedPayload: TaskRecord = { ...task, status: targetState as TaskRecord['status'] };\n const updatedRecord = { ...taskRecord, payload: updatedPayload };\n\n const signedRecord = await this.identity.signRecord(updatedRecord, actorId, 'approver');\n await this.taskStore.write(signedRecord as GitGovRecord & { payload: TaskRecord });\n\n // 7. Emit event\n this.eventBus.publish({\n type: 'task.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId,\n oldStatus: task.status,\n newStatus: targetState,\n actorId\n }\n } as TaskStatusChangedEvent);\n\n return updatedPayload;\n }\n\n /**\n * Activates a task transitioning from ready to active with permission validation\n */\n async activateTask(taskId: string, actorId: string): Promise<TaskRecord> {\n // 1. Read and validate task exists\n const taskRecord = await this.taskStore.read(taskId);\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n\n const task = taskRecord.payload;\n const actor = await this.getActor(actorId);\n\n // 2. Validate current status is 'ready'\n if (task.status !== 'ready') {\n throw new Error(`ProtocolViolationError: Task is in '${task.status}' state. Cannot activate from this state.`);\n }\n\n // 3. Validate transition with WorkflowMethodology\n const context = {\n task,\n actor,\n signatures: taskRecord.header.signatures,\n transitionTo: 'active' as TaskRecord['status']\n };\n\n const transitionRule = await this.workflowMethodologyAdapter.getTransitionRule('ready', 'active', context);\n if (!transitionRule) {\n throw new Error(`ProtocolViolationError: Workflow methodology rejected readyāactive transition`);\n }\n\n // 4. Update task status to 'active'\n const updatedPayload: TaskRecord = { ...task, status: 'active' };\n const updatedRecord = { ...taskRecord, payload: updatedPayload };\n\n // 5. Sign the record with 'executor' role\n const signedRecord = await this.identity.signRecord(updatedRecord, actorId, 'executor');\n await this.taskStore.write(signedRecord as GitGovRecord & { payload: TaskRecord });\n\n // 6. Emit task status changed event\n this.eventBus.publish({\n type: 'task.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId,\n oldStatus: 'ready',\n newStatus: 'active',\n actorId\n }\n } as TaskStatusChangedEvent);\n\n return updatedPayload;\n }\n\n /**\n * Pauses a task manually transitioning from active to paused with optional reason\n */\n async pauseTask(taskId: string, actorId: string, reason?: string): Promise<TaskRecord> {\n // 1. Read and validate task exists\n const taskRecord = await this.taskStore.read(taskId);\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n\n const task = taskRecord.payload;\n\n // 2. Validate current status is 'active'\n if (task.status !== 'active') {\n throw new Error(`ProtocolViolationError: Task is in '${task.status}' state. Cannot pause (requires active).`);\n }\n\n // 3. Resolve actor and validate permissions via workflow methodology\n const actor = await this.getActor(actorId);\n\n const context = {\n task,\n actor,\n signatures: taskRecord.header.signatures,\n transitionTo: 'paused' as TaskRecord['status']\n };\n\n const transitionRule = await this.workflowMethodologyAdapter.getTransitionRule('active', 'paused', context);\n if (!transitionRule) {\n throw new Error('ProtocolViolationError: Workflow methodology rejected activeāpaused transition');\n }\n\n // 4. Update task status to 'paused' and add reason to notes if provided\n const updatedPayload: TaskRecord = {\n ...task,\n status: 'paused',\n // Add reason to notes with [PAUSED] prefix if provided\n ...(reason && {\n notes: `${task.notes || ''}\\n[PAUSED] ${reason} (${new Date().toISOString()})`.trim()\n })\n };\n const updatedRecord = { ...taskRecord, payload: updatedPayload };\n\n // 5. Sign and persist with pauser role\n const signedRecord = await this.identity.signRecord(updatedRecord, actorId, 'pauser');\n await this.taskStore.write(signedRecord as GitGovRecord & { payload: TaskRecord });\n\n // 6. Emit task status changed event\n this.eventBus.publish({\n type: 'task.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId,\n oldStatus: 'active',\n newStatus: 'paused',\n actorId,\n reason: reason || 'Task manually paused'\n }\n } as TaskStatusChangedEvent);\n\n return updatedPayload;\n }\n\n /**\n * Resumes a paused task transitioning back to active with optional force override\n */\n async resumeTask(taskId: string, actorId: string, force: boolean = false): Promise<TaskRecord> {\n // 1. Read and validate task exists\n const taskRecord = await this.taskStore.read(taskId);\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n\n const task = taskRecord.payload;\n\n // 2. Validate current status is 'paused'\n if (task.status !== 'paused') {\n throw new Error(`ProtocolViolationError: Task is in '${task.status}' state. Cannot resume (requires paused).`);\n }\n\n // 3. Resolve actor and validate permissions via workflow methodology\n const actor = await this.getActor(actorId);\n\n if (!force) {\n const taskHealth = await this.metricsAdapter.getTaskHealth(task.id);\n if (taskHealth.blockingFeedbacks > 0) {\n throw new Error('BlockingFeedbackError: Task has blocking feedbacks. Resolve them before resuming or use force.');\n }\n }\n\n const context = {\n task,\n actor,\n signatures: taskRecord.header.signatures,\n transitionTo: 'active' as TaskRecord['status']\n };\n\n const transitionRule = await this.workflowMethodologyAdapter.getTransitionRule('paused', 'active', context);\n if (!transitionRule) {\n throw new Error('ProtocolViolationError: Workflow methodology rejected pausedāactive transition');\n }\n\n // 4. Update task status back to 'active'\n const updatedPayload: TaskRecord = { ...task, status: 'active' };\n const updatedRecord = { ...taskRecord, payload: updatedPayload };\n\n // 5. Sign and persist with resumer role\n const signedRecord = await this.identity.signRecord(updatedRecord, actorId, 'resumer');\n await this.taskStore.write(signedRecord as GitGovRecord & { payload: TaskRecord });\n\n // 6. Emit task status changed event\n this.eventBus.publish({\n type: 'task.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId,\n oldStatus: 'paused',\n newStatus: 'active',\n actorId\n }\n } as TaskStatusChangedEvent);\n\n return updatedPayload;\n }\n\n /**\n * Completes a task transitioning from active to done with signature validation\n */\n async completeTask(taskId: string, actorId: string): Promise<TaskRecord> {\n // 1. Read and validate task exists\n const taskRecord = await this.taskStore.read(taskId);\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n\n const task = taskRecord.payload;\n const actor = await this.getActor(actorId);\n\n // 2. Validate current status is 'active'\n if (task.status !== 'active') {\n throw new Error(`ProtocolViolationError: Task is in '${task.status}' state. Cannot complete from this state.`);\n }\n\n // 3. Validate transition with WorkflowMethodology\n const context = {\n task,\n actor,\n signatures: taskRecord.header.signatures,\n transitionTo: 'done' as TaskRecord['status']\n };\n\n const transitionRule = await this.workflowMethodologyAdapter.getTransitionRule('active', 'done', context);\n if (!transitionRule) {\n throw new Error(`ProtocolViolationError: Workflow methodology rejected activeādone transition`);\n }\n\n // 4. Update task status to 'done'\n const updatedPayload: TaskRecord = { ...task, status: 'done' };\n const updatedRecord = { ...taskRecord, payload: updatedPayload };\n\n // 5. Sign the record with 'approver' role\n const signedRecord = await this.identity.signRecord(updatedRecord, actorId, 'approver');\n await this.taskStore.write(signedRecord as GitGovRecord & { payload: TaskRecord });\n\n // 6. Emit task status changed event\n this.eventBus.publish({\n type: 'task.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId,\n oldStatus: 'active',\n newStatus: 'done',\n actorId\n }\n } as TaskStatusChangedEvent);\n\n return updatedPayload;\n }\n\n /**\n * Discards a task transitioning from ready/active/review to discarded\n * Supports both cancellation (ready/active) and rejection (review) operations\n */\n async discardTask(taskId: string, actorId: string, reason?: string): Promise<TaskRecord> {\n // 1. Read and validate task exists\n const taskRecord = await this.taskStore.read(taskId);\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n\n const task = taskRecord.payload;\n const actor = await this.getActor(actorId);\n\n // 2. Validate current status allows cancellation/rejection with educational error messages\n if (!['ready', 'active', 'review'].includes(task.status)) {\n // Educational error messages for semantic clarity\n if (task.status === 'draft') {\n throw new Error(`ProtocolViolationError: Cannot cancel task in 'draft' state. Use 'gitgov task delete ${taskId}' to remove draft tasks.`);\n }\n throw new Error(`ProtocolViolationError: Task is in '${task.status}' state. Cannot cancel from this state. Only 'ready', 'active', and 'review' tasks can be cancelled.`);\n }\n\n // 3. Validate transition with WorkflowMethodology\n const context = {\n task,\n actor,\n signatures: taskRecord.header.signatures,\n transitionTo: 'discarded' as TaskRecord['status']\n };\n\n const transitionRule = await this.workflowMethodologyAdapter.getTransitionRule(task.status, 'discarded', context);\n if (!transitionRule) {\n throw new Error(`ProtocolViolationError: Workflow methodology rejected ${task.status}ādiscarded transition`);\n }\n\n // 4. Update task status to 'discarded' and add cancellation/rejection reason\n const updatedPayload: TaskRecord = {\n ...task,\n status: 'discarded',\n // Add reason to notes with appropriate prefix based on current state\n ...(reason && {\n notes: `${task.notes || ''}\\n${task.status === 'review' ? '[REJECTED]' : '[CANCELLED]'} ${reason} (${new Date().toISOString()})`.trim()\n })\n };\n const updatedRecord = { ...taskRecord, payload: updatedPayload };\n\n // 5. Sign the record with 'canceller' role\n const signedRecord = await this.identity.signRecord(updatedRecord, actorId, 'canceller');\n await this.taskStore.write(signedRecord as GitGovRecord & { payload: TaskRecord });\n\n // 6. Emit task status changed event\n this.eventBus.publish({\n type: 'task.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId,\n oldStatus: task.status,\n newStatus: 'discarded',\n actorId,\n reason: reason || (task.status === 'review' ? 'Task rejected' : 'Task cancelled')\n }\n } as TaskStatusChangedEvent);\n\n return updatedPayload;\n }\n\n /**\n * Deletes a draft task completely (no discarded state)\n * Only works for tasks in 'draft' status that never entered formal workflow\n */\n async deleteTask(taskId: string, actorId: string): Promise<void> {\n // 1. Read and validate task exists\n const taskRecord = await this.taskStore.read(taskId);\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n\n const task = taskRecord.payload;\n\n // 2. Validate current status is 'draft' with educational error messages\n if (task.status !== 'draft') {\n // Educational error messages for semantic clarity\n if (task.status === 'review') {\n throw new Error(`ProtocolViolationError: Cannot delete task in 'review' state. Use 'gitgov task reject ${taskId}' to discard tasks under review.`);\n } else if (task.status === 'ready' || task.status === 'active') {\n throw new Error(`ProtocolViolationError: Cannot delete task in '${task.status}' state. Use 'gitgov task cancel ${taskId}' to discard tasks from ready/active states.`);\n }\n throw new Error(`ProtocolViolationError: Cannot delete task in '${task.status}' state. Only draft tasks can be deleted.`);\n }\n\n // 3. Validate actor has permission (simplified for MVP - in production would check permissions)\n await this.getActor(actorId);\n\n // 4. Delete the task file directly (no discarded state needed for draft)\n await this.taskStore.delete(taskId);\n\n // 5. Emit task deleted event (not a status change since it's being removed)\n this.eventBus.publish({\n type: 'task.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId,\n oldStatus: 'draft',\n newStatus: 'deleted',\n actorId,\n reason: 'Draft task deleted'\n }\n } as TaskStatusChangedEvent);\n }\n\n /**\n * Updates a task with new payload\n */\n async updateTask(taskId: string, payload: Partial<TaskRecord>): Promise<TaskRecord> {\n const taskRecord = await this.taskStore.read(taskId);\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n\n // Validate not in final state\n if (['archived'].includes(taskRecord.payload.status)) {\n throw new Error(`ProtocolViolationError: Cannot update task in final state: ${taskRecord.payload.status}`);\n }\n\n // Merge and validate with factory\n const updatedPayload = await createTaskRecord({ ...taskRecord.payload, ...payload });\n const updatedRecord = { ...taskRecord, payload: updatedPayload };\n\n await this.taskStore.write(updatedRecord);\n return updatedPayload;\n }\n\n // ===== PHASE 2: AGENT NAVIGATION (IMPLEMENTED) =====\n\n /**\n * Gets tasks assigned to a specific actor\n */\n async getTasksAssignedToActor(actorId: string): Promise<TaskRecord[]> {\n // Read all feedbacks to find assignments\n const feedbackIds = await this.feedbackStore.list();\n const assignedTaskIds: string[] = [];\n\n for (const id of feedbackIds) {\n const record = await this.feedbackStore.read(id);\n if (record &&\n record.payload.type === 'assignment' &&\n record.payload.assignee === actorId) {\n assignedTaskIds.push(record.payload.entityId);\n }\n }\n\n // Deduplicate task IDs (same task may have multiple assignment records)\n const uniqueTaskIds = [...new Set(assignedTaskIds)];\n\n // Read the assigned tasks\n const assignedTasks: TaskRecord[] = [];\n for (const taskId of uniqueTaskIds) {\n const task = await this.getTask(taskId);\n if (task) {\n assignedTasks.push(task);\n }\n }\n\n return assignedTasks;\n }\n\n // ===== PHASE 3: EVENT HANDLERS (NEW IMPLEMENTATION) =====\n\n /**\n * [EARS-31, EARS-33, EARS-34] Handles feedback created events (Immutable Pattern)\n * \n * This handler respects the immutable feedback pattern:\n * - Case 1: Blocking feedback created ā pause task if active/ready\n * - Case 2: Feedback resolving another feedback ā resume task if no more blocks\n * \n * The immutable pattern means:\n * - Original feedbacks NEVER change status\n * - Resolution is expressed by creating a NEW feedback pointing to the original\n * - We detect resolution via: entityType='feedback' + status='resolved' + resolvesFeedbackId\n */\n async handleFeedbackCreated(event: FeedbackCreatedEvent): Promise<void> {\n try {\n const metadata: EventMetadata = {\n eventId: `${Date.now()}-handle-feedback-created`,\n timestamp: Date.now(),\n processedAt: Date.now(),\n sourceAdapter: 'backlog_adapter'\n };\n\n // === CASE 1: Blocking Feedback Created on Task ===\n if (event.payload.type === 'blocking' && event.payload.entityType === 'task') {\n // Read the associated task\n const task = await this.getTask(event.payload.entityId);\n if (!task) {\n console.warn(`Task not found for feedback: ${event.payload.entityId}`);\n return;\n }\n\n // Only pause if task is in a pausable state\n if (!['active', 'ready'].includes(task.status)) {\n return; // EARS-32: Do nothing if task not pausable\n }\n\n // Update task to paused\n const updatedTask = { ...task, status: 'paused' as const };\n const taskRecord = await this.taskStore.read(task.id);\n if (taskRecord) {\n const updatedRecord = { ...taskRecord, payload: updatedTask };\n await this.taskStore.write(updatedRecord);\n\n // Emit status change event\n this.eventBus.publish({\n type: 'task.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId: task.id,\n oldStatus: task.status,\n newStatus: 'paused',\n actorId: 'system'\n },\n metadata\n } as TaskStatusChangedEvent);\n }\n return;\n }\n\n // === CASE 2: Feedback Resolving Another Feedback (Immutable Pattern) ===\n // Detect: entityType='feedback' + status='resolved' + resolvesFeedbackId present\n if (\n event.payload.entityType === 'feedback' &&\n event.payload.status === 'resolved' &&\n event.payload.resolvesFeedbackId\n ) {\n // 1. Get the ORIGINAL feedback that was resolved\n const originalFeedback = await this.feedbackAdapter.getFeedback(event.payload.resolvesFeedbackId);\n if (!originalFeedback || originalFeedback.type !== 'blocking') {\n return; // Only care about blocking feedbacks\n }\n\n // 2. Get the task associated with the original blocking feedback\n const task = await this.getTask(originalFeedback.entityId);\n if (!task || task.status !== 'paused') {\n return; // Only resume if task is paused\n }\n\n // 3. Check if other blocking feedbacks remain open (EARS-34)\n const taskHealth = await this.metricsAdapter.getTaskHealth(task.id);\n if (taskHealth.blockingFeedbacks > 0) {\n return; // Don't resume if other blocks remain\n }\n\n // 4. Resume task automatically\n const updatedTask = { ...task, status: 'active' as const };\n const taskRecord = await this.taskStore.read(task.id);\n if (taskRecord) {\n const updatedRecord = { ...taskRecord, payload: updatedTask };\n await this.taskStore.write(updatedRecord);\n\n this.eventBus.publish({\n type: 'task.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId: task.id,\n oldStatus: 'paused',\n newStatus: 'active',\n actorId: 'system'\n },\n metadata\n } as TaskStatusChangedEvent);\n }\n return;\n }\n\n // Other feedback types: do nothing\n } catch (error) {\n console.error('Error in handleFeedbackCreated:', error);\n }\n }\n\n\n /**\n * [EARS-35] Handles execution created events - transitions readyāactive on first execution\n */\n async handleExecutionCreated(event: ExecutionCreatedEvent): Promise<void> {\n try {\n // EARS-35: Use ExecutionAdapter isFirstExecution logic\n if (!event.payload.isFirstExecution) {\n return; // EARS-36: Do nothing on subsequent executions\n }\n\n const task = await this.getTask(event.payload.taskId);\n if (!task || task.status !== 'ready') {\n return;\n }\n\n // EARS-36: Validate with WorkflowMethodology before transition\n const actor = await this.getActor(event.payload.triggeredBy);\n const transitionRule = await this.workflowMethodologyAdapter.getTransitionRule('ready', 'active', {\n task,\n actor,\n signatures: []\n });\n\n if (!transitionRule) {\n console.warn(`Workflow methodology rejected readyāactive transition for task ${task.id}`);\n return;\n }\n\n // Transition to active\n const updatedTask = { ...task, status: 'active' as const };\n const taskRecord = await this.taskStore.read(task.id);\n if (taskRecord) {\n const updatedRecord = { ...taskRecord, payload: updatedTask };\n await this.taskStore.write(updatedRecord);\n\n this.eventBus.publish({\n type: 'task.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId: task.id,\n oldStatus: 'ready',\n newStatus: 'active',\n actorId: event.payload.triggeredBy\n }\n } as TaskStatusChangedEvent);\n }\n } catch (error) {\n console.error('Error in handleExecutionCreated:', error);\n }\n }\n\n /**\n * [EARS-37] Handles changelog created events - transitions doneāarchived\n */\n async handleChangelogCreated(event: ChangelogCreatedEvent): Promise<void> {\n try {\n // Get changelog record to access entityType and entityId\n const changelogRecord = await this.changelogStore.read(event.payload.changelogId);\n if (!changelogRecord) {\n console.warn(`Changelog not found: ${event.payload.changelogId}`);\n return;\n }\n\n // EARS-37: Handle changelogs with relatedTasks\n if (!changelogRecord.payload.relatedTasks || changelogRecord.payload.relatedTasks.length === 0) {\n return;\n }\n\n // Archive all related tasks that are in 'done' status\n for (const taskId of changelogRecord.payload.relatedTasks) {\n const task = await this.getTask(taskId);\n if (!task || task.status !== 'done') {\n continue;\n }\n\n // Transition to archived\n const updatedTask = { ...task, status: 'archived' as const };\n const taskRecord = await this.taskStore.read(task.id);\n if (taskRecord) {\n const updatedRecord = { ...taskRecord, payload: updatedTask };\n await this.taskStore.write(updatedRecord);\n\n this.eventBus.publish({\n type: 'task.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId: task.id,\n oldStatus: 'done',\n newStatus: 'archived',\n actorId: 'system'\n }\n } as TaskStatusChangedEvent);\n }\n } // Close for loop\n } catch (error) {\n console.error('Error in handleChangelogCreated:', error);\n }\n }\n\n /**\n * [EARS-38] Handles daily tick events - proactive health auditing\n */\n async handleDailyTick(_event: SystemDailyTickEvent): Promise<void> {\n try {\n // EARS-38: Use MetricsAdapter for proactive auditing\n const systemStatus = await this.metricsAdapter.getSystemStatus();\n\n // Get all active tasks for health analysis\n const allTasks = await this.getAllTasks();\n const activeTasks = allTasks.filter(task => task.status === 'active');\n\n for (const task of activeTasks) {\n const taskHealth = await this.metricsAdapter.getTaskHealth(task.id);\n\n // Apply configurable health thresholds\n if (taskHealth.healthScore < this.config.healthThresholds.taskMinScore ||\n taskHealth.timeInCurrentStage > this.config.healthThresholds.maxDaysInStage) {\n // Create automated warning feedback\n await this.feedbackAdapter.create({\n entityType: 'task',\n entityId: task.id,\n type: 'suggestion',\n content: `Automated health warning: Task health score is ${taskHealth.healthScore}%. ${taskHealth.recommendations.join('. ')}.`,\n status: 'open'\n }, 'system');\n }\n }\n\n // Log system health alert if critical issues (no custom event needed)\n if (systemStatus.health.overallScore < this.config.healthThresholds.systemMinScore) {\n console.warn(`System health alert: Score ${systemStatus.health.overallScore}%, blocked: ${systemStatus.health.blockedTasks}, stale: ${systemStatus.health.staleTasks}`);\n // Note: Health alerts are logged, not emitted as events. \n // System monitoring should read logs for alerting.\n }\n } catch (error) {\n console.error('Error in handleDailyTick:', error);\n }\n }\n\n /**\n * [EARS-45] Handles cycle status changed events - manages cycle hierarchy completion\n */\n async handleCycleStatusChanged(event: CycleStatusChangedEvent): Promise<void> {\n try {\n // Only handle cycle completion\n if (event.payload.newStatus !== 'completed') {\n return;\n }\n\n const completedCycle = await this.getCycle(event.payload.cycleId);\n if (!completedCycle) {\n console.warn(`Completed cycle not found: ${event.payload.cycleId}`);\n return;\n }\n\n // Find parent cycles that contain this completed cycle\n const allCycles = await this.getAllCycles();\n const parentCycles = allCycles.filter(cycle =>\n cycle.childCycleIds?.includes(event.payload.cycleId)\n );\n\n for (const parentCycle of parentCycles) {\n // Check if ALL child cycles are completed\n const childCycles = await Promise.all(\n (parentCycle.childCycleIds || []).map(id => this.getCycle(id))\n );\n\n const allChildrenCompleted = childCycles.every(child =>\n child && child.status === 'completed'\n );\n\n if (allChildrenCompleted) {\n // Complete the parent cycle\n await this.updateCycle(parentCycle.id, { status: 'completed' });\n\n // TODO: Delegate epic task completion to planning methodology\n // The logic for completing epic tasks based on cycle completion\n // should be handled by planningMethodology, not backlogAdapter\n /*\n if (this.planningMethodology) {\n await this.planningMethodology.handleEpicCompletion({\n completedCycleId: parentCycle.id,\n event\n });\n }\n */\n\n // For now, just log the completion - epic logic will be in planning methodology\n console.log(`Parent cycle ${parentCycle.id} completed - epic task completion delegated to planning methodology`);\n }\n }\n } catch (error) {\n console.error('Error in handleCycleStatusChanged:', error);\n }\n }\n\n // ===== PHASE 4: STUBS AND POLISH (DELEGATE TO ADAPTERS) =====\n\n /**\n * Gets system status by delegating to MetricsAdapter\n */\n async getSystemStatus(): Promise<SystemStatus> {\n return await this.metricsAdapter.getSystemStatus();\n }\n\n /**\n * Gets task health by delegating to MetricsAdapter\n */\n async getTaskHealth(taskId: string): Promise<TaskHealthReport> {\n return await this.metricsAdapter.getTaskHealth(taskId);\n }\n\n // ===== HELPER METHODS =====\n\n /**\n * Helper to get actor record\n */\n private async getActor(actorId: string): Promise<ActorRecord> {\n // Use IdentityAdapter to get real actor data\n const actor = await this.identity.getActor(actorId);\n if (!actor) {\n throw new Error(`RecordNotFoundError: Actor not found: ${actorId}`);\n }\n return actor;\n }\n\n /**\n * Helper to get available transitions from current state\n */\n private async getAvailableTransitions(fromStatus: string): Promise<Array<{ from: string; to: string; requires?: { signatures?: Record<string, { role: string }> } }>> {\n // This would normally be implemented using workflowMethodology.getAvailableTransitions()\n // For now, implementing basic logic based on canonical workflow\n const transitions = [\n { from: 'review', to: 'ready', requires: { signatures: { __default__: { role: 'approver' } } } },\n { from: 'active', to: 'done', requires: { signatures: { __default__: { role: 'approver' } } } }\n ];\n\n return transitions.filter(t => t.from === fromStatus);\n }\n\n // ===== PHASE 1: CYCLE CRUD OPERATIONS (IMPLEMENTED) =====\n\n /**\n * Creates a new cycle with workflow validation\n */\n async createCycle(payload: Partial<CycleRecord>, actorId: string): Promise<CycleRecord> {\n // 1. Build the record with factory\n const validatedPayload = await createCycleRecord(payload);\n\n // 2. Create unsigned record structure\n const unsignedRecord: GitGovRecord & { payload: CycleRecord } = {\n header: {\n version: '1.0',\n type: 'cycle',\n payloadChecksum: 'will-be-calculated-by-signRecord',\n signatures: [{\n keyId: actorId,\n role: 'author',\n notes: 'Cycle created',\n signature: 'placeholder',\n timestamp: Date.now()\n }]\n },\n payload: validatedPayload,\n };\n\n // 3. Sign the record\n const signedRecord = await this.identity.signRecord(unsignedRecord, actorId, 'author');\n\n // 4. Persist the record\n await this.cycleStore.write(signedRecord as GitGovRecord & { payload: CycleRecord });\n\n // 5. Emit event\n this.eventBus.publish({\n type: 'cycle.created',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n cycleId: validatedPayload.id,\n actorId\n },\n metadata: {\n eventId: `${Date.now()}-cycle-created-${validatedPayload.id}`,\n timestamp: Date.now(),\n sourceAdapter: 'backlog_adapter'\n }\n } as CycleCreatedEvent);\n\n return validatedPayload;\n }\n\n /**\n * Gets a specific cycle by ID\n */\n async getCycle(cycleId: string): Promise<CycleRecord | null> {\n const record = await this.cycleStore.read(cycleId);\n return record ? record.payload : null;\n }\n\n /**\n * Gets all cycles in the system\n */\n async getAllCycles(): Promise<CycleRecord[]> {\n const ids = await this.cycleStore.list();\n const cycles: CycleRecord[] = [];\n\n for (const id of ids) {\n const record = await this.cycleStore.read(id);\n if (record) {\n cycles.push(record.payload);\n }\n }\n\n return cycles;\n }\n\n /**\n * Updates a cycle with new payload\n */\n async updateCycle(cycleId: string, payload: Partial<CycleRecord>): Promise<CycleRecord> {\n const cycleRecord = await this.cycleStore.read(cycleId);\n if (!cycleRecord) {\n throw new Error(`RecordNotFoundError: Cycle not found: ${cycleId}`);\n }\n\n // Validate not in final state\n if (['archived'].includes(cycleRecord.payload.status)) {\n throw new Error(`ProtocolViolationError: Cannot update cycle in final state: ${cycleRecord.payload.status}`);\n }\n\n // Merge and validate with factory\n const updatedPayload = await createCycleRecord({ ...cycleRecord.payload, ...payload });\n const updatedRecord = { ...cycleRecord, payload: updatedPayload };\n\n // Emit event if status changed\n if (cycleRecord.payload.status !== updatedPayload.status) {\n this.eventBus.publish({\n type: 'cycle.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n cycleId,\n oldStatus: cycleRecord.payload.status,\n newStatus: updatedPayload.status,\n actorId: 'system'\n }\n } as CycleStatusChangedEvent);\n }\n\n await this.cycleStore.write(updatedRecord);\n return updatedPayload;\n }\n\n /**\n * Creates bidirectional link between task and cycle\n */\n async addTaskToCycle(cycleId: string, taskId: string): Promise<void> {\n // Read both records\n const cycleRecord = await this.cycleStore.read(cycleId);\n const taskRecord = await this.taskStore.read(taskId);\n\n if (!cycleRecord) {\n throw new Error(`RecordNotFoundError: Cycle not found: ${cycleId}`);\n }\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n\n // Create bidirectional links\n const updatedCycle = {\n ...cycleRecord.payload,\n taskIds: [...(cycleRecord.payload.taskIds || []), taskId]\n };\n const updatedTask = {\n ...taskRecord.payload,\n cycleIds: [...(taskRecord.payload.cycleIds || []), cycleId]\n };\n\n // Get current actor for signing (MVP mode)\n const currentActor = await this.identity.getCurrentActor();\n\n // Sign and persist both records with current actor\n const signedCycleRecord = await this.identity.signRecord(\n { ...cycleRecord, payload: updatedCycle },\n currentActor.id,\n 'author'\n );\n const signedTaskRecord = await this.identity.signRecord(\n { ...taskRecord, payload: updatedTask },\n currentActor.id,\n 'author'\n );\n\n await Promise.all([\n this.cycleStore.write(signedCycleRecord as GitGovRecord & { payload: CycleRecord }),\n this.taskStore.write(signedTaskRecord as GitGovRecord & { payload: TaskRecord })\n ]);\n }\n\n /**\n * Removes multiple tasks from a cycle with bidirectional unlinking\n * All business logic and validation happens here in the adapter\n */\n async removeTasksFromCycle(cycleId: string, taskIds: string[]): Promise<void> {\n // 1. Validate inputs\n if (!cycleId || typeof cycleId !== 'string') {\n throw new Error('ValidationError: cycleId must be a non-empty string');\n }\n if (!Array.isArray(taskIds) || taskIds.length === 0) {\n throw new Error('ValidationError: taskIds must be a non-empty array');\n }\n\n // 2. Read cycle record\n const cycleRecord = await this.cycleStore.read(cycleId);\n if (!cycleRecord) {\n throw new Error(`RecordNotFoundError: Cycle not found: ${cycleId}`);\n }\n\n // 3. Read all task records and validate they exist\n const taskRecords = await Promise.all(\n taskIds.map(async (taskId) => {\n const taskRecord = await this.taskStore.read(taskId);\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n return { taskId, record: taskRecord };\n })\n );\n\n // 4. Validate that all tasks are actually linked to this cycle\n const cycleTaskIds = cycleRecord.payload.taskIds || [];\n const notLinkedTasks = taskIds.filter(taskId => !cycleTaskIds.includes(taskId));\n if (notLinkedTasks.length > 0) {\n throw new Error(`ValidationError: Tasks not linked to cycle ${cycleId}: ${notLinkedTasks.join(', ')}`);\n }\n\n // 5. Prepare updated cycle (remove all taskIds)\n const updatedCycle = {\n ...cycleRecord.payload,\n taskIds: cycleTaskIds.filter(id => !taskIds.includes(id))\n };\n\n // 6. Get current actor for signing\n const currentActor = await this.identity.getCurrentActor();\n\n // 7. Sign cycle record\n const signedCycleRecord = await this.identity.signRecord(\n { ...cycleRecord, payload: updatedCycle },\n currentActor.id,\n 'author'\n );\n\n // 8. Prepare and sign all task records (remove cycleId from each)\n const signedTaskRecords = await Promise.all(\n taskRecords.map(async ({ record }) => {\n const taskCycleIds = record.payload.cycleIds || [];\n const updatedTask = {\n ...record.payload,\n cycleIds: taskCycleIds.filter(id => id !== cycleId)\n };\n return await this.identity.signRecord(\n { ...record, payload: updatedTask },\n currentActor.id,\n 'author'\n );\n })\n );\n\n // 9. Atomic write - all or nothing\n await Promise.all([\n this.cycleStore.write(signedCycleRecord as GitGovRecord & { payload: CycleRecord }),\n ...signedTaskRecords.map(signedTask =>\n this.taskStore.write(signedTask as GitGovRecord & { payload: TaskRecord })\n )\n ]);\n }\n\n /**\n * Moves multiple tasks from one cycle to another atomically\n * Provides transactional semantics - all tasks move or none do\n * All business logic and validation happens here in the adapter\n */\n async moveTasksBetweenCycles(targetCycleId: string, taskIds: string[], sourceCycleId: string): Promise<void> {\n // 1. Validate inputs\n if (!sourceCycleId || typeof sourceCycleId !== 'string') {\n throw new Error('ValidationError: sourceCycleId must be a non-empty string');\n }\n if (!targetCycleId || typeof targetCycleId !== 'string') {\n throw new Error('ValidationError: targetCycleId must be a non-empty string');\n }\n if (!Array.isArray(taskIds) || taskIds.length === 0) {\n throw new Error('ValidationError: taskIds must be a non-empty array');\n }\n if (sourceCycleId === targetCycleId) {\n throw new Error('ValidationError: Source and target cycles must be different');\n }\n\n // 2. Read all records\n const [sourceCycleRecord, targetCycleRecord] = await Promise.all([\n this.cycleStore.read(sourceCycleId),\n this.cycleStore.read(targetCycleId)\n ]);\n\n if (!sourceCycleRecord) {\n throw new Error(`RecordNotFoundError: Source cycle not found: ${sourceCycleId}`);\n }\n if (!targetCycleRecord) {\n throw new Error(`RecordNotFoundError: Target cycle not found: ${targetCycleId}`);\n }\n\n // 3. Read all task records and validate they exist\n const taskRecords = await Promise.all(\n taskIds.map(async (taskId) => {\n const taskRecord = await this.taskStore.read(taskId);\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n return { taskId, record: taskRecord };\n })\n );\n\n // 4. Validate that all tasks are actually linked to source cycle\n const sourceTaskIds = sourceCycleRecord.payload.taskIds || [];\n const notLinkedTasks = taskIds.filter(taskId => !sourceTaskIds.includes(taskId));\n if (notLinkedTasks.length > 0) {\n throw new Error(`ValidationError: Tasks not linked to source cycle ${sourceCycleId}: ${notLinkedTasks.join(', ')}`);\n }\n\n // 5. Prepare updated cycles\n const updatedSourceCycle = {\n ...sourceCycleRecord.payload,\n taskIds: sourceTaskIds.filter(id => !taskIds.includes(id))\n };\n const updatedTargetCycle = {\n ...targetCycleRecord.payload,\n taskIds: [...(targetCycleRecord.payload.taskIds || []), ...taskIds]\n };\n\n // 6. Get current actor for signing\n const currentActor = await this.identity.getCurrentActor();\n\n // 7. Sign both cycle records\n const [signedSourceCycle, signedTargetCycle] = await Promise.all([\n this.identity.signRecord(\n { ...sourceCycleRecord, payload: updatedSourceCycle },\n currentActor.id,\n 'author'\n ),\n this.identity.signRecord(\n { ...targetCycleRecord, payload: updatedTargetCycle },\n currentActor.id,\n 'author'\n )\n ]);\n\n // 8. Prepare and sign all task records (update cycleIds)\n const signedTaskRecords = await Promise.all(\n taskRecords.map(async ({ record }) => {\n const taskCycleIds = record.payload.cycleIds || [];\n const updatedTask = {\n ...record.payload,\n cycleIds: taskCycleIds\n .filter(id => id !== sourceCycleId) // Remove source\n .concat(targetCycleId) // Add target\n };\n return await this.identity.signRecord(\n { ...record, payload: updatedTask },\n currentActor.id,\n 'author'\n );\n })\n );\n\n // 9. Atomic write - all or nothing\n try {\n await Promise.all([\n this.cycleStore.write(signedSourceCycle as GitGovRecord & { payload: CycleRecord }),\n this.cycleStore.write(signedTargetCycle as GitGovRecord & { payload: CycleRecord }),\n ...signedTaskRecords.map(signedTask =>\n this.taskStore.write(signedTask as GitGovRecord & { payload: TaskRecord })\n )\n ]);\n } catch (error) {\n throw new Error(`AtomicOperationError: Failed to move tasks between cycles: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n }\n\n // TODO: Implement when lint_command.md is implemented\n async lint(): Promise<LintReport> {\n throw new Error('NotImplementedError: lint() will be implemented when lint_command.md is ready');\n }\n\n // TODO: Implement when audit_command.md is implemented \n async audit(): Promise<AuditReport> {\n throw new Error('NotImplementedError: audit() will be implemented when audit_command.md is ready');\n }\n\n // TODO: Implement when commit_processor.md is implemented\n async processChanges(_changes: unknown[]): Promise<ExecutionRecord[]> {\n throw new Error('NotImplementedError: processChanges() will be implemented when commit_processor.md is ready');\n }\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"actor_record_schema.json\",\n \"title\": \"ActorRecord\",\n \"description\": \"Canonical schema for actor records as defined in actor_protocol.md\",\n \"additionalProperties\": false,\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"type\",\n \"displayName\",\n \"publicKey\",\n \"roles\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"pattern\": \"^(human|agent)(:[a-z0-9-]+)+$\",\n \"description\": \"Unique, human-readable identifier for the actor.\",\n \"examples\": [\n \"human:camilo\",\n \"agent:aion\",\n \"agent:camilo:cursor\"\n ]\n },\n \"type\": {\n \"type\": \"string\",\n \"enum\": [\n \"human\",\n \"agent\"\n ],\n \"description\": \"The type of actor.\"\n },\n \"displayName\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 100,\n \"description\": \"The name of the actor to be used in user interfaces.\"\n },\n \"publicKey\": {\n \"type\": \"string\",\n \"minLength\": 44,\n \"maxLength\": 44,\n \"description\": \"The Ed25519 public key (base64 encoded, 44 characters) for verifying the actor's signatures.\"\n },\n \"roles\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"pattern\": \"^[a-z0-9-]+(:[a-z0-9-]+)*$\"\n },\n \"minItems\": 1,\n \"uniqueItems\": true,\n \"description\": \"List of capacity roles defining the actor's skills and permissions. Uses hierarchical format with colons.\",\n \"examples\": [\n [\n \"developer:backend:go\",\n \"auditor\"\n ],\n [\n \"planner:ai\"\n ]\n ]\n },\n \"status\": {\n \"type\": \"string\",\n \"enum\": [\n \"active\",\n \"revoked\"\n ],\n \"default\": \"active\",\n \"description\": \"Optional. The lifecycle status of the actor. Defaults to 'active' if not specified.\"\n },\n \"supersededBy\": {\n \"type\": \"string\",\n \"pattern\": \"^(human|agent)(:[a-z0-9-]+)+$\",\n \"description\": \"Optional. The ID of the actor that replaces this one.\"\n },\n \"metadata\": {\n \"type\": \"object\",\n \"description\": \"An optional field for additional, non-canonical metadata.\",\n \"examples\": [\n {\n \"version\": \"1.2.0\",\n \"source\": \"https://github.com/...\"\n },\n {\n \"team\": \"frontend\"\n }\n ]\n }\n }\n}","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"agent_record_schema.json\",\n \"title\": \"AgentRecord\",\n \"description\": \"Canonical schema for agent operational manifests.\",\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"engine\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"pattern\": \"^agent:[a-z0-9:-]+$\",\n \"description\": \"Unique identifier for the agent, linking to an ActorRecord.\"\n },\n \"status\": {\n \"type\": \"string\",\n \"enum\": [\n \"active\",\n \"archived\"\n ],\n \"default\": \"active\"\n },\n \"triggers\": {\n \"type\": \"array\",\n \"default\": [],\n \"description\": \"Optional list of triggers that activate the agent.\\nAdditional fields are allowed and depend on trigger type:\\n- webhook triggers: 'event' (event identifier), 'filter' (condition)\\n- scheduled triggers: 'cron' (cron expression)\\n- manual triggers: 'command' (example CLI command)\\n\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"enum\": [\n \"manual\",\n \"webhook\",\n \"scheduled\"\n ],\n \"description\": \"Type of trigger that activates the agent\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"additionalProperties\": true\n }\n },\n \"knowledge_dependencies\": {\n \"type\": \"array\",\n \"default\": [],\n \"items\": {\n \"type\": \"string\",\n \"description\": \"Glob patterns for blueprint files this agent needs access to\"\n }\n },\n \"prompt_engine_requirements\": {\n \"type\": \"object\",\n \"properties\": {\n \"roles\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"skills\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n }\n },\n \"metadata\": {\n \"type\": \"object\",\n \"description\": \"Optional framework-specific or deployment-specific metadata for agent extensions.\\nCommon use cases: framework identification (langchain, google-adk), deployment info (provider, image, region),\\ncost tracking (cost_per_invocation, currency), tool capabilities, maintainer info.\\nThis field does NOT affect agent execution - it is purely informational.\\n\",\n \"additionalProperties\": true\n },\n \"engine\": {\n \"type\": \"object\",\n \"oneOf\": [\n {\n \"required\": [\n \"type\"\n ],\n \"additionalProperties\": false,\n \"properties\": {\n \"type\": {\n \"const\": \"local\"\n },\n \"runtime\": {\n \"type\": \"string\",\n \"description\": \"Runtime environment (typescript, python, etc.)\"\n },\n \"entrypoint\": {\n \"type\": \"string\",\n \"description\": \"Path to the agent entry file\"\n },\n \"function\": {\n \"type\": \"string\",\n \"description\": \"Function name to invoke\"\n }\n }\n },\n {\n \"required\": [\n \"type\",\n \"url\"\n ],\n \"additionalProperties\": false,\n \"properties\": {\n \"type\": {\n \"const\": \"api\"\n },\n \"url\": {\n \"type\": \"string\",\n \"format\": \"uri\",\n \"description\": \"HTTP endpoint for the agent\"\n },\n \"method\": {\n \"type\": \"string\",\n \"enum\": [\n \"POST\",\n \"GET\"\n ],\n \"default\": \"POST\"\n },\n \"auth\": {\n \"type\": \"object\",\n \"description\": \"Authentication configuration for API requests\",\n \"additionalProperties\": true,\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"enum\": [\n \"bearer\",\n \"oauth\",\n \"api-key\",\n \"actor-signature\"\n ],\n \"description\": \"Authentication type. 'actor-signature' uses the agent's ActorRecord keypair to sign requests.\"\n },\n \"secret_key\": {\n \"type\": \"string\",\n \"description\": \"Reference to secret in Secret Manager (for bearer/api-key/oauth auth types)\"\n },\n \"token\": {\n \"type\": \"string\",\n \"description\": \"Direct token value (not recommended for production, use secret_key instead)\"\n }\n }\n }\n }\n },\n {\n \"required\": [\n \"type\",\n \"url\"\n ],\n \"additionalProperties\": false,\n \"properties\": {\n \"type\": {\n \"const\": \"mcp\"\n },\n \"url\": {\n \"type\": \"string\",\n \"format\": \"uri\",\n \"description\": \"MCP server endpoint\"\n },\n \"auth\": {\n \"type\": \"object\",\n \"description\": \"Authentication configuration for MCP server\",\n \"additionalProperties\": true,\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"enum\": [\n \"bearer\",\n \"oauth\",\n \"api-key\",\n \"actor-signature\"\n ],\n \"description\": \"Authentication type. 'actor-signature' uses the agent's ActorRecord keypair to sign requests.\"\n },\n \"secret_key\": {\n \"type\": \"string\",\n \"description\": \"Reference to secret in Secret Manager (for bearer/api-key/oauth auth types)\"\n },\n \"token\": {\n \"type\": \"string\",\n \"description\": \"Direct token value (not recommended for production, use secret_key instead)\"\n }\n }\n }\n }\n },\n {\n \"required\": [\n \"type\"\n ],\n \"additionalProperties\": false,\n \"properties\": {\n \"type\": {\n \"const\": \"custom\"\n },\n \"protocol\": {\n \"type\": \"string\",\n \"description\": \"Custom protocol identifier (e.g., 'a2a', 'grpc')\"\n },\n \"config\": {\n \"type\": \"object\",\n \"description\": \"Protocol-specific configuration\"\n }\n }\n }\n ]\n }\n },\n \"examples\": [\n {\n \"id\": \"agent:scribe\",\n \"status\": \"active\",\n \"engine\": {\n \"type\": \"local\",\n \"runtime\": \"typescript\",\n \"entrypoint\": \"packages/agents/scribe/index.ts\",\n \"function\": \"runScribe\"\n },\n \"metadata\": {\n \"purpose\": \"documentation-generation\",\n \"maintainer\": \"team:platform\"\n },\n \"triggers\": [\n {\n \"type\": \"manual\"\n }\n ],\n \"knowledge_dependencies\": [\n \"packages/blueprints/**/*.md\"\n ]\n },\n {\n \"id\": \"agent:langchain-analyzer\",\n \"status\": \"active\",\n \"engine\": {\n \"type\": \"api\",\n \"url\": \"https://langchain-service-xyz.a.run.app/analyze\",\n \"method\": \"POST\",\n \"auth\": {\n \"type\": \"actor-signature\"\n }\n },\n \"metadata\": {\n \"framework\": \"langchain\",\n \"version\": \"0.2.0\",\n \"model\": \"gpt-4-turbo\",\n \"deployment\": {\n \"provider\": \"gcp\",\n \"service\": \"cloud-run\",\n \"region\": \"us-central1\"\n },\n \"cost_per_invocation\": 0.03,\n \"currency\": \"USD\"\n },\n \"triggers\": [\n {\n \"type\": \"webhook\",\n \"event\": \"task.ready\"\n }\n ],\n \"knowledge_dependencies\": [\n \"docs/architecture/**/*.md\"\n ]\n },\n {\n \"id\": \"agent:sentiment-analyzer\",\n \"status\": \"active\",\n \"engine\": {\n \"type\": \"api\",\n \"url\": \"http://sentiment-analyzer:8082/analyze\",\n \"method\": \"POST\",\n \"auth\": {\n \"type\": \"actor-signature\"\n }\n },\n \"metadata\": {\n \"framework\": \"google-adk\",\n \"version\": \"1.0.0\",\n \"model\": \"gemini-pro\",\n \"deployment\": {\n \"runtime\": \"docker\",\n \"image\": \"gitgov/sentiment-analyzer:v1.2.0\",\n \"port\": 8082\n },\n \"max_tokens\": 1024\n },\n \"triggers\": [\n {\n \"type\": \"webhook\",\n \"event\": \"feedback.created\"\n }\n ]\n },\n {\n \"id\": \"agent:cursor-reviewer\",\n \"status\": \"active\",\n \"engine\": {\n \"type\": \"mcp\",\n \"url\": \"http://localhost:8083/mcp\",\n \"auth\": {\n \"type\": \"actor-signature\"\n }\n },\n \"metadata\": {\n \"ide\": \"cursor\",\n \"tool\": \"code-review\",\n \"accepts_tools\": [\n \"review\",\n \"refactor\",\n \"test\"\n ]\n },\n \"knowledge_dependencies\": [\n \"packages/**/*.ts\",\n \"packages/**/*.tsx\"\n ],\n \"triggers\": [\n {\n \"type\": \"webhook\",\n \"event\": \"task.status.ready\"\n }\n ]\n },\n {\n \"id\": \"agent:deepl-translator\",\n \"status\": \"active\",\n \"engine\": {\n \"type\": \"api\",\n \"url\": \"https://api.deepl.com/v2/translate\",\n \"method\": \"POST\",\n \"auth\": {\n \"type\": \"bearer\",\n \"secret_key\": \"DEEPL_API_KEY\"\n }\n },\n \"metadata\": {\n \"provider\": \"deepl\",\n \"supported_languages\": [\n \"EN\",\n \"ES\",\n \"FR\",\n \"DE\",\n \"PT\"\n ],\n \"max_chars_per_request\": 5000\n },\n \"triggers\": [\n {\n \"type\": \"manual\"\n }\n ]\n },\n {\n \"id\": \"agent:coordinator\",\n \"status\": \"active\",\n \"engine\": {\n \"type\": \"custom\",\n \"protocol\": \"a2a\",\n \"config\": {\n \"endpoint\": \"https://agent-hub.gitgov.io/a2a\",\n \"version\": \"draft-2025-01\",\n \"capabilities\": [\n \"task-delegation\",\n \"status-sync\",\n \"feedback-loop\"\n ]\n }\n },\n \"metadata\": {\n \"purpose\": \"multi-agent-orchestration\",\n \"experimental\": true\n },\n \"triggers\": [\n {\n \"type\": \"scheduled\",\n \"cron\": \"0 */4 * * *\"\n }\n ]\n },\n {\n \"id\": \"agent:minimal-watcher\",\n \"engine\": {\n \"type\": \"local\"\n }\n },\n {\n \"id\": \"agent:local-mcp-server\",\n \"status\": \"active\",\n \"engine\": {\n \"type\": \"mcp\",\n \"url\": \"http://localhost:9000/mcp\"\n },\n \"knowledge_dependencies\": [\n \"packages/blueprints/**/*.md\"\n ],\n \"triggers\": [\n {\n \"type\": \"manual\"\n }\n ]\n },\n {\n \"id\": \"agent:code-reviewer\",\n \"status\": \"active\",\n \"engine\": {\n \"type\": \"local\",\n \"runtime\": \"typescript\",\n \"entrypoint\": \"packages/agents/code-reviewer/index.ts\",\n \"function\": \"reviewCode\"\n },\n \"prompt_engine_requirements\": {\n \"roles\": [\n \"code-reviewer\",\n \"security-auditor\"\n ],\n \"skills\": [\n \"typescript\",\n \"security-best-practices\",\n \"code-quality-analysis\"\n ]\n },\n \"knowledge_dependencies\": [\n \"packages/**/*.ts\",\n \"packages/**/*.tsx\"\n ],\n \"triggers\": [\n {\n \"type\": \"webhook\",\n \"event\": \"pull-request.opened\",\n \"filter\": \"branch:main\"\n }\n ]\n }\n ]\n}","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"changelog_record_schema.json\",\n \"title\": \"ChangelogRecord\",\n \"description\": \"Canonical schema for changelog records - aggregates N tasks into 1 release note\",\n \"additionalProperties\": false,\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"title\",\n \"description\",\n \"relatedTasks\",\n \"completedAt\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d{10}-changelog-[a-z0-9-]{1,50}$\",\n \"maxLength\": 71,\n \"description\": \"Unique identifier for the changelog entry\",\n \"examples\": [\n \"1752707800-changelog-sistema-autenticacion-v1\",\n \"1752707800-changelog-sprint-24-api-performance\"\n ]\n },\n \"title\": {\n \"type\": \"string\",\n \"minLength\": 10,\n \"maxLength\": 150,\n \"description\": \"Executive title of the deliverable\",\n \"examples\": [\n \"Sistema de Autenticación Completo v1.0\",\n \"Sprint 24 - Performance Optimizations\"\n ]\n },\n \"description\": {\n \"type\": \"string\",\n \"minLength\": 20,\n \"maxLength\": 5000,\n \"description\": \"Detailed description of the value delivered, including key decisions and impact\"\n },\n \"relatedTasks\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d{10}-task-[a-z0-9-]{1,50}$\"\n },\n \"minItems\": 1,\n \"description\": \"IDs of tasks that compose this deliverable (minimum 1 required)\"\n },\n \"completedAt\": {\n \"type\": \"number\",\n \"minimum\": 0,\n \"description\": \"Unix timestamp in seconds when the deliverable was completed\"\n },\n \"relatedCycles\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d{10}-cycle-[a-z0-9-]{1,50}$\"\n },\n \"default\": [],\n \"description\": \"Optional IDs of cycles related to this deliverable\"\n },\n \"relatedExecutions\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d{10}-exec-[a-z0-9-]{1,50}$\"\n },\n \"default\": [],\n \"description\": \"Optional IDs of key execution records related to this work\"\n },\n \"version\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 50,\n \"description\": \"Optional version or release identifier (e.g., 'v1.0.0', 'sprint-24')\",\n \"examples\": [\n \"v1.0.0\",\n \"v2.1.3\",\n \"sprint-24\"\n ]\n },\n \"tags\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"pattern\": \"^[a-z0-9-]+(:[a-z0-9-]+)*$\"\n },\n \"default\": [],\n \"description\": \"Optional tags for categorization (e.g., 'feature:auth', 'bugfix', 'security')\"\n },\n \"commits\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"maxLength\": 100\n },\n \"default\": [],\n \"description\": \"Optional list of git commit hashes related to this deliverable\"\n },\n \"files\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"maxLength\": 500\n },\n \"default\": [],\n \"description\": \"Optional list of main files that were created or modified\"\n },\n \"notes\": {\n \"type\": \"string\",\n \"maxLength\": 3000,\n \"description\": \"Optional additional context, decisions, or learnings\"\n }\n },\n \"examples\": [\n {\n \"id\": \"1752707800-changelog-sistema-autenticacion-v1\",\n \"title\": \"Sistema de Autenticación Completo v1.0\",\n \"description\": \"Implementación completa del sistema de autenticación con OAuth2, 2FA via TOTP, recuperación de contraseƱa, y UI responsive. Incluye tests E2E completos (95% coverage) y documentación tĆ©cnica actualizada.\",\n \"relatedTasks\": [\n \"1752274500-task-crear-ui-login\",\n \"1752274600-task-integrar-oauth2-backend\",\n \"1752274700-task-implementar-2fa-totp\",\n \"1752274800-task-tests-e2e-auth\",\n \"1752274900-task-documentar-flujo-auth\"\n ],\n \"completedAt\": 1752707800,\n \"relatedCycles\": [\n \"1752200000-cycle-q1-auth-milestone\"\n ],\n \"relatedExecutions\": [\n \"1752274550-exec-analisis-auth-providers\",\n \"1752707750-exec-final-integration-test\"\n ],\n \"version\": \"v1.0.0\",\n \"tags\": [\n \"feature:auth\",\n \"security\",\n \"frontend\",\n \"backend\"\n ],\n \"commits\": [\n \"abc123def\",\n \"456ghi789\",\n \"jkl012mno\"\n ],\n \"files\": [\n \"src/pages/Login.tsx\",\n \"src/services/auth.ts\",\n \"src/components/TwoFactorSetup.tsx\",\n \"e2e/auth.spec.ts\"\n ],\n \"notes\": \"Decisión tĆ©cnica: Usamos NextAuth.js despuĆ©s de evaluar Passport.js. El 2FA se implementó con TOTP (Google Authenticator compatible) en lugar de SMS por seguridad y costo.\"\n },\n {\n \"id\": \"1752707900-changelog-hotfix-payment-timeout\",\n \"title\": \"Hotfix: Critical Payment Timeout Fix\",\n \"description\": \"Fixed critical payment timeout issue affecting 15% of transactions. Increased timeout from 5s to 30s and added circuit breaker pattern for third-party API calls.\",\n \"relatedTasks\": [\n \"1752707850-task-fix-payment-timeout\",\n \"1752707870-task-add-circuit-breaker\"\n ],\n \"completedAt\": 1752707900,\n \"version\": \"v1.2.1\",\n \"tags\": [\n \"hotfix\",\n \"critical\",\n \"payment\"\n ],\n \"commits\": [\n \"xyz789abc\"\n ],\n \"notes\": \"Emergency response to production incident. Deployed to production within 2 hours.\"\n }\n ]\n}","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"cycle_record_schema.json\",\n \"title\": \"CycleRecord\",\n \"description\": \"Canonical schema for cycle records - strategic grouping of work\",\n \"additionalProperties\": false,\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"title\",\n \"status\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d{10}-cycle-[a-z0-9-]{1,50}$\",\n \"maxLength\": 67,\n \"description\": \"Unique identifier for the cycle (10 timestamp + 1 dash + 5 'cycle' + 1 dash + max 50 slug = 67 max)\",\n \"examples\": [\n \"1754400000-cycle-sprint-24-api-performance\",\n \"1754500000-cycle-auth-system-v2\",\n \"1754600000-cycle-q4-2025-growth\"\n ]\n },\n \"title\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 256,\n \"description\": \"Human-readable title for the cycle (e.g., 'Sprint 24', 'Auth v2.0', 'Q4 2025')\",\n \"examples\": [\n \"Sprint 24 - API Performance\",\n \"Authentication System v2.0\",\n \"Q4 2025 - Growth & Scale\"\n ]\n },\n \"status\": {\n \"type\": \"string\",\n \"enum\": [\n \"planning\",\n \"active\",\n \"completed\",\n \"archived\"\n ],\n \"description\": \"The lifecycle status of the cycle\"\n },\n \"taskIds\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d{10}-task-[a-z0-9-]{1,50}$\",\n \"maxLength\": 66\n },\n \"default\": [],\n \"description\": \"Optional array of Task IDs that belong to this cycle. Can be empty for cycles that only contain child cycles. (10 timestamp + 1 dash + 4 'task' + 1 dash + max 50 slug = 66 max)\",\n \"examples\": [\n [\n \"1752274500-task-optimizar-endpoint-search\",\n \"1752360900-task-anadir-cache-a-redis\"\n ]\n ]\n },\n \"childCycleIds\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d{10}-cycle-[a-z0-9-]{1,50}$\",\n \"maxLength\": 67\n },\n \"default\": [],\n \"description\": \"Optional array of Cycle IDs that are children of this cycle, allowing for hierarchies (e.g., Q1 containing Sprint 1, Sprint 2, Sprint 3). (10 timestamp + 1 dash + 5 'cycle' + 1 dash + max 50 slug = 67 max)\",\n \"examples\": [\n [\n \"1754400000-cycle-sprint-24\",\n \"1754500000-cycle-sprint-25\"\n ]\n ]\n },\n \"tags\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"pattern\": \"^[a-z0-9-]+(:[a-z0-9-]+)*$\",\n \"maxLength\": 100\n },\n \"default\": [],\n \"description\": \"Optional list of key:value tags for categorization (e.g., 'roadmap:q4', 'team:alpha', 'okr:growth').\",\n \"examples\": [\n [\n \"roadmap:q4\",\n \"team:backend\"\n ],\n [\n \"sprint:24\",\n \"focus:performance\"\n ],\n [\n \"milestone:v2\",\n \"security\"\n ]\n ]\n },\n \"notes\": {\n \"type\": \"string\",\n \"minLength\": 0,\n \"maxLength\": 10000,\n \"description\": \"Optional description of the cycle's goals, objectives, and context\"\n }\n },\n \"examples\": [\n {\n \"id\": \"1754400000-cycle-sprint-24-api-performance\",\n \"title\": \"Sprint 24 - API Performance\",\n \"status\": \"active\",\n \"taskIds\": [\n \"1752274500-task-optimizar-endpoint-search\",\n \"1752360900-task-anadir-cache-a-redis\",\n \"1752447300-task-implementar-rate-limiting\"\n ],\n \"tags\": [\n \"sprint:24\",\n \"team:backend\",\n \"focus:performance\"\n ],\n \"notes\": \"Objetivo: Reducir la latencia p95 de la API por debajo de 200ms y preparar infraestructura para Black Friday.\"\n },\n {\n \"id\": \"1754500000-cycle-auth-system-v2\",\n \"title\": \"Authentication System v2.0\",\n \"status\": \"planning\",\n \"taskIds\": [\n \"1752274500-task-oauth2-integration\",\n \"1752360900-task-2fa-implementation\",\n \"1752447300-task-password-recovery\",\n \"1752533700-task-session-management\"\n ],\n \"tags\": [\n \"milestone:v2\",\n \"security\",\n \"feature:auth\"\n ],\n \"notes\": \"Milestone mayor: Sistema completo de autenticación con OAuth2, 2FA, y gestión avanzada de sesiones. CrĆtico para lanzamiento Q4.\"\n },\n {\n \"id\": \"1754600000-cycle-q4-2025-growth\",\n \"title\": \"Q4 2025 - Growth & Scale\",\n \"status\": \"active\",\n \"childCycleIds\": [\n \"1754400000-cycle-sprint-24-api-performance\",\n \"1754500000-cycle-auth-system-v2\",\n \"1754650000-cycle-mobile-app-launch\"\n ],\n \"tags\": [\n \"roadmap:q4\",\n \"strategy:growth\",\n \"okr:scale-to-1m-users\"\n ],\n \"notes\": \"Objetivo trimestral: Escalar a 1M usuarios activos. Incluye mejoras de performance, nuevo sistema de auth, y lanzamiento de app móvil.\"\n }\n ]\n}","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"embedded_metadata_schema.json\",\n \"title\": \"EmbeddedMetadataRecord\",\n \"description\": \"Canonical schema for the wrapper structure of all GitGovernance records.\",\n \"type\": \"object\",\n \"properties\": {\n \"header\": {\n \"type\": \"object\",\n \"properties\": {\n \"version\": {\n \"type\": \"string\",\n \"enum\": [\n \"1.0\"\n ],\n \"description\": \"Version of the embedded metadata format.\"\n },\n \"type\": {\n \"type\": \"string\",\n \"enum\": [\n \"actor\",\n \"agent\",\n \"task\",\n \"execution\",\n \"changelog\",\n \"feedback\",\n \"cycle\",\n \"custom\"\n ],\n \"description\": \"The type of the record contained in the payload.\"\n },\n \"schemaUrl\": {\n \"type\": \"string\",\n \"description\": \"Optional URL to a custom schema for the payload.\"\n },\n \"schemaChecksum\": {\n \"type\": \"string\",\n \"pattern\": \"^[a-fA-F0-9]{64}$\",\n \"description\": \"Optional SHA-256 checksum of the custom schema.\"\n },\n \"payloadChecksum\": {\n \"type\": \"string\",\n \"pattern\": \"^[a-fA-F0-9]{64}$\",\n \"description\": \"SHA-256 checksum of the canonically serialized payload.\"\n },\n \"signatures\": {\n \"type\": \"array\",\n \"minItems\": 1,\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"keyId\": {\n \"type\": \"string\",\n \"pattern\": \"^(human|agent)(:[a-z0-9-]+)+$\",\n \"description\": \"The Actor ID of the signer (must match ActorRecord.id pattern).\"\n },\n \"role\": {\n \"type\": \"string\",\n \"pattern\": \"^([a-z-]+|custom:[a-z0-9-]+)$\",\n \"minLength\": 1,\n \"maxLength\": 50,\n \"description\": \"The context role of the signature (e.g., 'author', 'reviewer', 'auditor', or 'custom:*').\"\n },\n \"notes\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 1000,\n \"description\": \"Human-readable note from the signer. Part of the signature digest.\"\n },\n \"signature\": {\n \"type\": \"string\",\n \"pattern\": \"^[A-Za-z0-9+/]{86}==$\",\n \"description\": \"The Ed25519 signature (base64 encoded, 88 chars with padding) of the signature digest.\"\n },\n \"timestamp\": {\n \"type\": \"integer\",\n \"description\": \"Unix timestamp of the signature.\"\n }\n },\n \"required\": [\n \"keyId\",\n \"role\",\n \"notes\",\n \"signature\",\n \"timestamp\"\n ],\n \"additionalProperties\": false\n },\n \"description\": \"An array of one or more signature objects.\"\n }\n },\n \"required\": [\n \"version\",\n \"type\",\n \"payloadChecksum\",\n \"signatures\"\n ],\n \"additionalProperties\": false\n },\n \"payload\": {\n \"type\": \"object\",\n \"description\": \"The specific record data, validated against the schema defined by header.type.\"\n }\n },\n \"required\": [\n \"header\",\n \"payload\"\n ],\n \"additionalProperties\": false,\n \"oneOf\": [\n {\n \"if\": {\n \"properties\": {\n \"header\": {\n \"type\": \"object\",\n \"properties\": {\n \"type\": {\n \"const\": \"actor\"\n }\n }\n }\n }\n },\n \"then\": {\n \"properties\": {\n \"payload\": {\n \"$ref\": \"ref:actor_record_schema\"\n }\n }\n },\n \"else\": false\n },\n {\n \"if\": {\n \"properties\": {\n \"header\": {\n \"type\": \"object\",\n \"properties\": {\n \"type\": {\n \"const\": \"agent\"\n }\n }\n }\n }\n },\n \"then\": {\n \"properties\": {\n \"payload\": {\n \"$ref\": \"ref:agent_record_schema\"\n }\n }\n },\n \"else\": false\n },\n {\n \"if\": {\n \"properties\": {\n \"header\": {\n \"type\": \"object\",\n \"properties\": {\n \"type\": {\n \"const\": \"task\"\n }\n }\n }\n }\n },\n \"then\": {\n \"properties\": {\n \"payload\": {\n \"$ref\": \"ref:task_record_schema\"\n }\n }\n },\n \"else\": false\n },\n {\n \"if\": {\n \"properties\": {\n \"header\": {\n \"type\": \"object\",\n \"properties\": {\n \"type\": {\n \"const\": \"execution\"\n }\n }\n }\n }\n },\n \"then\": {\n \"properties\": {\n \"payload\": {\n \"$ref\": \"ref:execution_record_schema\"\n }\n }\n },\n \"else\": false\n },\n {\n \"if\": {\n \"properties\": {\n \"header\": {\n \"type\": \"object\",\n \"properties\": {\n \"type\": {\n \"const\": \"changelog\"\n }\n }\n }\n }\n },\n \"then\": {\n \"properties\": {\n \"payload\": {\n \"$ref\": \"ref:changelog_record_schema\"\n }\n }\n },\n \"else\": false\n },\n {\n \"if\": {\n \"properties\": {\n \"header\": {\n \"type\": \"object\",\n \"properties\": {\n \"type\": {\n \"const\": \"feedback\"\n }\n }\n }\n }\n },\n \"then\": {\n \"properties\": {\n \"payload\": {\n \"$ref\": \"ref:feedback_record_schema\"\n }\n }\n },\n \"else\": false\n },\n {\n \"if\": {\n \"properties\": {\n \"header\": {\n \"type\": \"object\",\n \"properties\": {\n \"type\": {\n \"const\": \"cycle\"\n }\n }\n }\n }\n },\n \"then\": {\n \"properties\": {\n \"payload\": {\n \"$ref\": \"ref:cycle_record_schema\"\n }\n }\n },\n \"else\": false\n },\n {\n \"if\": {\n \"properties\": {\n \"header\": {\n \"type\": \"object\",\n \"properties\": {\n \"type\": {\n \"const\": \"custom\"\n }\n }\n }\n }\n },\n \"then\": {\n \"properties\": {\n \"header\": {\n \"type\": \"object\",\n \"required\": [\n \"schemaUrl\",\n \"schemaChecksum\"\n ]\n }\n }\n },\n \"else\": false\n }\n ],\n \"examples\": [\n {\n \"header\": {\n \"version\": \"1.0\",\n \"type\": \"task\",\n \"payloadChecksum\": \"a1b2c3d4e5f6...\",\n \"signatures\": [\n {\n \"keyId\": \"human:lead-dev\",\n \"role\": \"author\",\n \"notes\": \"Initial task creation for OAuth 2.0 implementation\",\n \"signature\": \"...\",\n \"timestamp\": 1752274500\n }\n ]\n },\n \"payload\": {\n \"id\": \"1752274500-task-implementar-auth\",\n \"status\": \"pending\",\n \"priority\": \"high\",\n \"description\": \"Implementar autenticación OAuth 2.0.\",\n \"tags\": [\n \"skill:go\",\n \"area:backend\"\n ]\n }\n },\n {\n \"header\": {\n \"version\": \"1.0\",\n \"type\": \"execution\",\n \"payloadChecksum\": \"b2c3d4e5f6a1...\",\n \"signatures\": [\n {\n \"keyId\": \"agent:cursor\",\n \"role\": \"author\",\n \"notes\": \"OAuth 2.0 flow completed with GitHub provider integration\",\n \"signature\": \"...\",\n \"timestamp\": 1752274600\n },\n {\n \"keyId\": \"human:camilo\",\n \"role\": \"reviewer\",\n \"notes\": \"Reviewed and tested locally. LGTM.\",\n \"signature\": \"...\",\n \"timestamp\": 1752274650\n }\n ]\n },\n \"payload\": {\n \"id\": \"1752274600-exec-implement-oauth\",\n \"taskId\": \"1752274500-task-implement-oauth\",\n \"type\": \"progress\",\n \"title\": \"OAuth 2.0 flow implemented\",\n \"result\": \"Completed the OAuth 2.0 authentication flow...\"\n }\n },\n {\n \"header\": {\n \"version\": \"1.0\",\n \"type\": \"actor\",\n \"payloadChecksum\": \"c3d4e5f6a1b2...\",\n \"signatures\": [\n {\n \"keyId\": \"human:admin\",\n \"role\": \"author\",\n \"notes\": \"New developer onboarded to team\",\n \"signature\": \"...\",\n \"timestamp\": 1752274700\n },\n {\n \"keyId\": \"agent:aion\",\n \"role\": \"auditor\",\n \"notes\": \"Actor verification: 10/10. Credentials validated.\",\n \"signature\": \"...\",\n \"timestamp\": 1752274705\n }\n ]\n },\n \"payload\": {\n \"id\": \"human:new-developer\",\n \"type\": \"human\",\n \"displayName\": \"New Developer\",\n \"publicKey\": \"...\",\n \"roles\": [\n \"developer\"\n ]\n }\n }\n ]\n}","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"execution_record_schema.json\",\n \"title\": \"ExecutionRecord\",\n \"description\": \"Canonical schema for execution log records - the universal event stream\",\n \"additionalProperties\": false,\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"taskId\",\n \"type\",\n \"title\",\n \"result\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d{10}-exec-[a-z0-9-]{1,50}$\",\n \"maxLength\": 66,\n \"description\": \"Unique identifier for the execution log entry (10 timestamp + 1 dash + 4 'exec' + 1 dash + max 50 slug = 66 max)\",\n \"examples\": [\n \"1752275000-exec-refactor-queries\",\n \"1752361200-exec-api-externa-caida\"\n ]\n },\n \"taskId\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d{10}-task-[a-z0-9-]{1,50}$\",\n \"maxLength\": 66,\n \"description\": \"ID of the parent task this execution belongs to (10 timestamp + 1 dash + 4 'task' + 1 dash + max 50 slug = 66 max)\"\n },\n \"type\": {\n \"type\": \"string\",\n \"enum\": [\n \"analysis\",\n \"progress\",\n \"blocker\",\n \"completion\",\n \"info\",\n \"correction\"\n ],\n \"description\": \"Semantic classification of the execution event\",\n \"examples\": [\n \"progress\",\n \"analysis\",\n \"blocker\",\n \"completion\"\n ]\n },\n \"title\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 256,\n \"description\": \"Human-readable title for the execution (used to generate ID)\",\n \"examples\": [\n \"Refactor de queries N+1\",\n \"API Externa CaĆda\",\n \"Plan de implementación OAuth2\"\n ]\n },\n \"result\": {\n \"type\": \"string\",\n \"minLength\": 10,\n \"maxLength\": 22000,\n \"description\": \"The tangible, verifiable output or result of the execution. \\nThis is the \\\"WHAT\\\" - evidence of work or event summary.\\n\"\n },\n \"notes\": {\n \"type\": \"string\",\n \"maxLength\": 6500,\n \"description\": \"Optional narrative, context and decisions behind the execution.\\nThis is the \\\"HOW\\\" and \\\"WHY\\\" - the story behind the result.\\n\"\n },\n \"references\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"maxLength\": 500\n },\n \"default\": [],\n \"description\": \"Optional list of typed references to relevant commits, files, PRs, or external documents.\\nShould use typed prefixes for clarity and trazabilidad (see execution_protocol_appendix.md):\\n- commit: Git commit SHA\\n- pr: Pull Request number\\n- file: File path (relative to repo root)\\n- url: External URL\\n- issue: GitHub Issue number\\n- task: TaskRecord ID\\n- exec: ExecutionRecord ID (for corrections or dependencies)\\n- changelog: ChangelogRecord ID\\n\"\n }\n },\n \"examples\": [\n {\n \"id\": \"1752275500-exec-refactor-queries\",\n \"taskId\": \"1752274500-task-optimizar-api\",\n \"type\": \"progress\",\n \"title\": \"Refactor de queries N+1\",\n \"result\": \"Refactorizados 3 queries N+1 a un solo JOIN optimizado. Performance mejoró de 2.5s a 200ms.\",\n \"notes\": \"Identificados 3 N+1 queries en el endpoint /api/search. Aplicado eager loading y caching de relaciones.\",\n \"references\": [\n \"commit:b2c3d4e\",\n \"file:src/api/search.ts\"\n ]\n },\n {\n \"id\": \"1752361200-exec-api-externa-caida\",\n \"taskId\": \"1752274500-task-optimizar-api\",\n \"type\": \"blocker\",\n \"title\": \"API Externa CaĆda\",\n \"result\": \"No se puede continuar con testing de integración. API de pagos devuelve 503.\",\n \"notes\": \"La API de pagos de terceros (api.payments.com) estĆ” devolviendo errores 503. Contactado soporte del proveedor. ETA de resolución: 2-3 horas.\",\n \"references\": [\n \"url:https://status.payments.com\"\n ]\n },\n {\n \"id\": \"1752188000-exec-plan-oauth-implementation\",\n \"taskId\": \"1752274500-task-oauth-implementation\",\n \"type\": \"analysis\",\n \"title\": \"Plan de implementación OAuth2\",\n \"result\": \"Documento de diseƱo tĆ©cnico completado. 5 sub-tareas identificadas con estimaciones de complejidad.\",\n \"notes\": \"Evaluadas 3 opciones: NextAuth.js (elegida), Passport.js, custom implementation. NextAuth.js por madurez y soporte de mĆŗltiples providers.\",\n \"references\": [\n \"file:docs/oauth-design.md\"\n ]\n },\n {\n \"id\": \"1752707800-exec-oauth-completed\",\n \"taskId\": \"1752274500-task-oauth-implementation\",\n \"type\": \"completion\",\n \"title\": \"OAuth Implementation Completed\",\n \"result\": \"Sistema OAuth2 completamente implementado, testeado y deployado a staging. 95% test coverage. Todos los acceptance criteria cumplidos.\",\n \"notes\": \"Implementación finalizada. Code review aprobado. Tests E2E passing. Ready para changelog y deploy a producción.\",\n \"references\": [\n \"pr:456\",\n \"commit:def789abc\",\n \"url:https://staging.app.com/login\"\n ]\n },\n {\n \"id\": \"1752275600-exec-cambio-estrategia-redis\",\n \"taskId\": \"1752274500-task-oauth-implementation\",\n \"type\": \"info\",\n \"title\": \"Cambio de estrategia: Usar Redis para sessions\",\n \"result\": \"Decisión: Migrar de JWT stateless a sessions en Redis por requisito de revocación inmediata.\",\n \"notes\": \"Durante code review se identificó requisito crĆtico: revocar sesiones inmediatamente (ej: compromiso de cuenta). JWT stateless no permite esto sin lista negra compleja. Redis sessions permite revocación instantĆ”nea.\",\n \"references\": [\n \"issue:567\",\n \"url:https://redis.io/docs/manual/keyspace-notifications/\"\n ]\n },\n {\n \"id\": \"1752275700-exec-correccion-metricas\",\n \"taskId\": \"1752274500-task-optimizar-api\",\n \"type\": \"correction\",\n \"title\": \"Corrección: MĆ©tricas de performance\",\n \"result\": \"Corrección de execution 1752275500-exec-refactor-queries: El performance fue 200ms, no 50ms como se reportó.\",\n \"notes\": \"Error de tipeo en execution original. La mejora real fue de 2.5s a 200ms (no 50ms). Sigue siendo significativa (92% mejora) pero nĆŗmeros correctos son importantes para mĆ©tricas.\",\n \"references\": [\n \"exec:1752275500-exec-refactor-queries\"\n ]\n }\n ]\n}","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"feedback_record_schema.json\",\n \"title\": \"FeedbackRecord\",\n \"description\": \"Canonical schema for feedback records - structured conversation about work\",\n \"additionalProperties\": false,\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"entityType\",\n \"entityId\",\n \"type\",\n \"status\",\n \"content\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d{10}-feedback-[a-z0-9-]{1,50}$\",\n \"maxLength\": 70,\n \"description\": \"Unique identifier for the feedback entry\",\n \"examples\": [\n \"1752788100-feedback-blocking-rest-api\",\n \"1752788200-feedback-question-test-coverage\"\n ]\n },\n \"entityType\": {\n \"type\": \"string\",\n \"enum\": [\n \"task\",\n \"execution\",\n \"changelog\",\n \"feedback\",\n \"cycle\"\n ],\n \"description\": \"The type of entity this feedback refers to\"\n },\n \"entityId\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 256,\n \"description\": \"The ID of the entity this feedback refers to.\\nMust match the pattern for its entityType:\\n- task: ^\\\\d{10}-task-[a-z0-9-]{1,50}$\\n- execution: ^\\\\d{10}-exec-[a-z0-9-]{1,50}$\\n- changelog: ^\\\\d{10}-changelog-[a-z0-9-]{1,50}$\\n- feedback: ^\\\\d{10}-feedback-[a-z0-9-]{1,50}$\\n- cycle: ^\\\\d{10}-cycle-[a-z0-9-]{1,50}$\\n\",\n \"examples\": [\n \"1752274500-task-implementar-oauth\",\n \"1752642000-exec-subtarea-9-4\",\n \"1752788100-feedback-blocking-rest-api\"\n ]\n },\n \"type\": {\n \"type\": \"string\",\n \"enum\": [\n \"blocking\",\n \"suggestion\",\n \"question\",\n \"approval\",\n \"clarification\",\n \"assignment\"\n ],\n \"description\": \"The semantic intent of the feedback\",\n \"examples\": [\n \"blocking\",\n \"question\",\n \"approval\"\n ]\n },\n \"status\": {\n \"type\": \"string\",\n \"enum\": [\n \"open\",\n \"acknowledged\",\n \"resolved\",\n \"wontfix\"\n ],\n \"description\": \"The lifecycle status of the feedback. \\nNote: FeedbackRecords are immutable. To change status, create a new feedback \\nthat references this one using entityType: \\\"feedback\\\" and resolvesFeedbackId.\\n\"\n },\n \"content\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 5000,\n \"description\": \"The content of the feedback. Reduced from 10000 to 5000 chars for practical use.\"\n },\n \"assignee\": {\n \"type\": \"string\",\n \"pattern\": \"^(human|agent)(:[a-z0-9-]+)+$\",\n \"maxLength\": 256,\n \"description\": \"Optional. The Actor ID responsible for addressing the feedback (e.g., 'human:maria', 'agent:camilo:cursor')\",\n \"examples\": [\n \"human:maria\",\n \"agent:code-reviewer\",\n \"agent:camilo:cursor\"\n ]\n },\n \"resolvesFeedbackId\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d{10}-feedback-[a-z0-9-]{1,50}$\",\n \"maxLength\": 70,\n \"description\": \"Optional. The ID of another feedback record that this one resolves or responds to\",\n \"examples\": [\n \"1752788100-feedback-blocking-rest-api\"\n ]\n }\n },\n \"examples\": [\n {\n \"id\": \"1752788100-feedback-blocking-rest-api\",\n \"entityType\": \"execution\",\n \"entityId\": \"1752642000-exec-subtarea-9-4\",\n \"type\": \"blocking\",\n \"status\": \"open\",\n \"content\": \"Esta implementación no cumple el estĆ”ndar de rutas REST. Los endpoints deben seguir el patrón /api/v1/{resource}/{id}. Actualmente usa /get-user?id=X que no es RESTful.\"\n },\n {\n \"id\": \"1752788200-feedback-rest-api-fixed\",\n \"entityType\": \"feedback\",\n \"entityId\": \"1752788100-feedback-blocking-rest-api\",\n \"type\": \"clarification\",\n \"status\": \"resolved\",\n \"content\": \"Implementada la corrección. Ahora todos los endpoints siguen el estĆ”ndar REST: GET /api/v1/users/:id, POST /api/v1/users, etc. Tests actualizados y passing.\",\n \"resolvesFeedbackId\": \"1752788100-feedback-blocking-rest-api\"\n },\n {\n \"id\": \"1752788300-feedback-assign-auth-task\",\n \"entityType\": \"task\",\n \"entityId\": \"1752274500-task-implementar-oauth\",\n \"type\": \"assignment\",\n \"status\": \"open\",\n \"content\": \"Asignando esta tarea a MarĆa por su experiencia con OAuth2. Prioridad alta para el sprint actual.\",\n \"assignee\": \"human:maria\"\n },\n {\n \"id\": \"1752788400-feedback-question-test-coverage\",\n \"entityType\": \"task\",\n \"entityId\": \"1752274500-task-implementar-oauth\",\n \"type\": \"question\",\n \"status\": \"open\",\n \"content\": \"ĀæCuĆ”l es el nivel de test coverage esperado para esta feature? El spec no lo menciona explĆcitamente. ĀæDebemos apuntar a 80% como el resto del proyecto?\"\n }\n ]\n}","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"task_record_schema.json\",\n \"title\": \"TaskRecord\",\n \"description\": \"Canonical schema for task records as defined in task_protocol.md\",\n \"additionalProperties\": false,\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"title\",\n \"status\",\n \"priority\",\n \"description\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d{10}-task-[a-z0-9-]{1,50}$\",\n \"maxLength\": 66,\n \"description\": \"Unique identifier for the task (10 timestamp + 1 dash + 4 'task' + 1 dash + max 50 slug = 66 max)\",\n \"examples\": [\n \"1752274500-task-implementar-auth\",\n \"1752347700-task-fix-logging\"\n ]\n },\n \"title\": {\n \"type\": \"string\",\n \"minLength\": 3,\n \"maxLength\": 150,\n \"description\": \"A brief, human-readable title for the task. Used to generate the ID slug.\"\n },\n \"cycleIds\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"pattern\": \"^\\\\d{10}-cycle-[a-z0-9-]{1,50}$\",\n \"maxLength\": 67\n },\n \"default\": [],\n \"description\": \"Optional. The IDs of the strategic cycles this task belongs to. (10 timestamp + 1 dash + 5 'cycle' + 1 dash + max 50 slug = 67 max)\"\n },\n \"status\": {\n \"type\": \"string\",\n \"enum\": [\n \"draft\",\n \"review\",\n \"ready\",\n \"active\",\n \"done\",\n \"archived\",\n \"paused\",\n \"discarded\"\n ],\n \"maxLength\": 40,\n \"description\": \"Current state of the task in the institutional flow\"\n },\n \"priority\": {\n \"type\": \"string\",\n \"enum\": [\n \"low\",\n \"medium\",\n \"high\",\n \"critical\"\n ],\n \"maxLength\": 40,\n \"description\": \"Strategic or tactical priority level\"\n },\n \"description\": {\n \"type\": \"string\",\n \"minLength\": 10,\n \"maxLength\": 22000,\n \"description\": \"Functional, technical or strategic summary of the objective\"\n },\n \"tags\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"pattern\": \"^[a-z0-9-]+(:[a-z0-9-:]+)*$\"\n },\n \"default\": [],\n \"description\": \"Optional. List of key:value tags for categorization and role suggestion (e.g., 'skill:react', 'role:agent:developer').\"\n },\n \"references\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 500\n },\n \"default\": [],\n \"description\": \"Valid links or files, when mentioned\"\n },\n \"notes\": {\n \"type\": \"string\",\n \"minLength\": 0,\n \"maxLength\": 3000,\n \"description\": \"Additional comments, decisions made or added context\"\n }\n },\n \"examples\": [\n {\n \"id\": \"1752274500-task-implement-oauth-flow\",\n \"title\": \"Implement OAuth 2.0 authentication flow\",\n \"status\": \"draft\",\n \"priority\": \"high\",\n \"description\": \"Implement complete OAuth 2.0 flow with GitHub provider. Include token refresh, session management, and secure storage. Must support both web and CLI flows.\",\n \"cycleIds\": [\n \"1752270000-cycle-auth-mvp\"\n ],\n \"tags\": [\n \"skill:security\",\n \"category:feature\",\n \"package:core\"\n ],\n \"references\": [\n \"url:https://docs.github.com/en/apps/oauth-apps/building-oauth-apps\"\n ],\n \"notes\": \"Consider using proven library like passport.js or implement from scratch for learning.\"\n },\n {\n \"id\": \"1752347700-task-fix-memory-leak-indexer\",\n \"title\": \"Fix memory leak in indexer process\",\n \"status\": \"active\",\n \"priority\": \"critical\",\n \"description\": \"Indexer process consuming >2GB RAM after 24h uptime. Profiling shows EventEmitter listeners not being cleaned up properly. Fix leak and add monitoring.\",\n \"cycleIds\": [],\n \"tags\": [\n \"category:bug\",\n \"skill:performance\",\n \"package:core\"\n ],\n \"references\": [\n \"file:packages/core/src/adapters/indexer_adapter/index.ts\",\n \"commit:a1b2c3d4\",\n \"issue:789\"\n ],\n \"notes\": \"Discovered during production monitoring. Affects long-running processes only.\"\n },\n {\n \"id\": \"1752448900-task-add-typescript-linting\",\n \"title\": \"Add TypeScript strict mode and ESLint rules\",\n \"status\": \"done\",\n \"priority\": \"medium\",\n \"description\": \"Enable TypeScript strict mode across all packages. Configure ESLint with recommended rules. Fix all existing violations. Add pre-commit hook.\",\n \"cycleIds\": [\n \"1752440000-cycle-code-quality-q1\"\n ],\n \"tags\": [\n \"category:tooling\",\n \"skill:typescript\",\n \"epic:code-quality\"\n ],\n \"references\": [\n \"pr:123\",\n \"file:.eslintrc.js\",\n \"file:tsconfig.json\"\n ],\n \"notes\": \"Approved by tech lead. All 47 violations fixed in PR #123.\"\n },\n {\n \"id\": \"1752550000-task-research-graphql-migration\",\n \"title\": \"Research GraphQL migration feasibility\",\n \"status\": \"draft\",\n \"priority\": \"low\",\n \"description\": \"Evaluate feasibility of migrating REST API to GraphQL. Document pros/cons, effort estimation, and recommended approach. Focus on developer experience and performance.\",\n \"cycleIds\": [],\n \"tags\": [\n \"category:research\",\n \"skill:graphql\",\n \"skill:backend\"\n ],\n \"references\": []\n }\n ]\n}","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"workflow_methodology_schema.json\",\n \"title\": \"WorkflowMethodologyRecord\",\n \"description\": \"Complete schema for workflow methodology configuration files that define state transitions, signatures, and view configurations\",\n \"type\": \"object\",\n \"required\": [\n \"version\",\n \"name\",\n \"state_transitions\"\n ],\n \"additionalProperties\": false,\n \"properties\": {\n \"$schema\": {\n \"type\": \"string\",\n \"description\": \"JSON Schema reference\"\n },\n \"version\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d+\\\\.\\\\d+\\\\.\\\\d+$\",\n \"description\": \"Semantic version of the methodology configuration\"\n },\n \"name\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 100,\n \"description\": \"Human-readable name of the methodology\"\n },\n \"description\": {\n \"type\": \"string\",\n \"maxLength\": 500,\n \"description\": \"Brief description of the methodology's purpose and scope\"\n },\n \"state_transitions\": {\n \"type\": \"object\",\n \"description\": \"Defines valid state transitions and their requirements\",\n \"additionalProperties\": {\n \"type\": \"object\",\n \"required\": [\n \"from\",\n \"requires\"\n ],\n \"additionalProperties\": false,\n \"properties\": {\n \"from\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"enum\": [\n \"draft\",\n \"review\",\n \"ready\",\n \"active\",\n \"done\",\n \"archived\",\n \"paused\",\n \"discarded\"\n ]\n },\n \"minItems\": 1,\n \"description\": \"Valid source states for this transition\"\n },\n \"requires\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"command\": {\n \"type\": \"string\",\n \"description\": \"CLI command that triggers this transition\"\n },\n \"event\": {\n \"type\": \"string\",\n \"description\": \"System event that triggers this transition\"\n },\n \"signatures\": {\n \"type\": \"object\",\n \"description\": \"Signature requirements keyed by role (e.g., 'approver:quality', 'developer:backend')\",\n \"additionalProperties\": {\n \"type\": \"object\",\n \"required\": [\n \"role\",\n \"capability_roles\",\n \"min_approvals\"\n ],\n \"additionalProperties\": false,\n \"properties\": {\n \"role\": {\n \"type\": \"string\",\n \"description\": \"Required signature role\"\n },\n \"capability_roles\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n },\n \"minItems\": 1,\n \"description\": \"Required capability roles in actor record\"\n },\n \"min_approvals\": {\n \"type\": \"integer\",\n \"minimum\": 1,\n \"description\": \"Minimum number of required approvals\"\n },\n \"actor_type\": {\n \"type\": \"string\",\n \"enum\": [\n \"human\",\n \"agent\"\n ],\n \"description\": \"Optional: restrict to specific actor type\"\n },\n \"specific_actors\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n },\n \"description\": \"Optional: specific actors that can sign\"\n }\n }\n }\n },\n \"custom_rules\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n },\n \"description\": \"List of custom rule identifiers to validate\"\n }\n }\n }\n }\n }\n },\n \"custom_rules\": {\n \"type\": \"object\",\n \"description\": \"Definitions for custom validation rules\",\n \"additionalProperties\": {\n \"type\": \"object\",\n \"required\": [\n \"description\",\n \"validation\"\n ],\n \"additionalProperties\": false,\n \"properties\": {\n \"description\": {\n \"type\": \"string\",\n \"maxLength\": 200,\n \"description\": \"Human-readable description of the rule\"\n },\n \"validation\": {\n \"type\": \"string\",\n \"enum\": [\n \"assignment_required\",\n \"sprint_capacity\",\n \"epic_complexity\",\n \"custom\",\n \"javascript\"\n ],\n \"description\": \"Validation type identifier\"\n },\n \"parameters\": {\n \"type\": \"object\",\n \"description\": \"Optional parameters for the validation rule\"\n },\n \"javascript_function\": {\n \"type\": \"string\",\n \"description\": \"JavaScript function code for 'javascript' validation type. Must return Promise<boolean>\"\n },\n \"module_path\": {\n \"type\": \"string\",\n \"description\": \"Path to external module for custom validation (alternative to javascript_function)\"\n }\n }\n }\n },\n \"view_configs\": {\n \"type\": \"object\",\n \"description\": \"Visual representation configurations for different view types\",\n \"additionalProperties\": {\n \"type\": \"object\",\n \"required\": [\n \"columns\"\n ],\n \"additionalProperties\": false,\n \"properties\": {\n \"columns\": {\n \"type\": \"object\",\n \"description\": \"Column definitions mapping visual names to task states\",\n \"additionalProperties\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"enum\": [\n \"draft\",\n \"review\",\n \"ready\",\n \"active\",\n \"done\",\n \"archived\",\n \"paused\",\n \"discarded\"\n ]\n },\n \"minItems\": 1\n }\n },\n \"theme\": {\n \"type\": \"string\",\n \"enum\": [\n \"default\",\n \"dark\",\n \"minimal\",\n \"corporate\"\n ],\n \"description\": \"Visual theme for this view configuration\"\n },\n \"layout\": {\n \"type\": \"string\",\n \"enum\": [\n \"horizontal\",\n \"vertical\",\n \"grid\"\n ],\n \"description\": \"Layout direction for the view\"\n }\n }\n }\n },\n \"agent_integration\": {\n \"type\": \"object\",\n \"description\": \"Optional agent automation configuration for methodology\",\n \"additionalProperties\": false,\n \"properties\": {\n \"description\": {\n \"type\": \"string\",\n \"maxLength\": 200,\n \"description\": \"Brief description of the agent integration\"\n },\n \"required_agents\": {\n \"type\": \"array\",\n \"description\": \"List of agents required for this methodology\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"engine\"\n ],\n \"anyOf\": [\n {\n \"required\": [\n \"id\"\n ]\n },\n {\n \"required\": [\n \"required_roles\"\n ]\n }\n ],\n \"additionalProperties\": false,\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"pattern\": \"^agent:[a-z0-9:-]+$\",\n \"description\": \"Optional: Specific agent ID. If provided, uses this exact agent.\"\n },\n \"required_roles\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"pattern\": \"^[a-z0-9-]+(:[a-z0-9-]+)*$\"\n },\n \"minItems\": 1,\n \"description\": \"Optional: Required capability roles. Matches any agent with these roles (from ActorRecord).\"\n },\n \"engine\": {\n \"type\": \"object\",\n \"oneOf\": [\n {\n \"required\": [\n \"type\"\n ],\n \"properties\": {\n \"type\": {\n \"const\": \"local\"\n },\n \"runtime\": {\n \"type\": \"string\"\n },\n \"entrypoint\": {\n \"type\": \"string\"\n },\n \"function\": {\n \"type\": \"string\"\n }\n }\n },\n {\n \"required\": [\n \"type\"\n ],\n \"properties\": {\n \"type\": {\n \"const\": \"api\"\n },\n \"url\": {\n \"type\": \"string\"\n },\n \"method\": {\n \"type\": \"string\",\n \"enum\": [\n \"POST\",\n \"GET\"\n ]\n },\n \"auth\": {\n \"type\": \"object\"\n }\n }\n },\n {\n \"required\": [\n \"type\"\n ],\n \"properties\": {\n \"type\": {\n \"const\": \"mcp\"\n },\n \"url\": {\n \"type\": \"string\"\n },\n \"auth\": {\n \"type\": \"object\"\n }\n }\n }\n ]\n },\n \"triggers\": {\n \"type\": \"array\",\n \"description\": \"Event triggers for this agent\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"event\",\n \"action\"\n ],\n \"additionalProperties\": false,\n \"properties\": {\n \"event\": {\n \"type\": \"string\",\n \"description\": \"Event that triggers the agent\"\n },\n \"action\": {\n \"type\": \"string\",\n \"description\": \"Action the agent should perform\"\n }\n }\n }\n },\n \"knowledge_dependencies\": {\n \"type\": \"array\",\n \"description\": \"Knowledge files this agent depends on\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n }\n }\n },\n \"automation_rules\": {\n \"type\": \"array\",\n \"description\": \"Automation rules linking triggers to agents\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"trigger\",\n \"agent\",\n \"action\"\n ],\n \"additionalProperties\": false,\n \"properties\": {\n \"trigger\": {\n \"type\": \"string\",\n \"description\": \"Event or condition that triggers automation\"\n },\n \"agent\": {\n \"type\": \"string\",\n \"pattern\": \"^agent:[a-z0-9:-]+$\",\n \"description\": \"Agent ID that handles this automation\"\n },\n \"action\": {\n \"type\": \"string\",\n \"description\": \"Specific action the agent should perform\"\n }\n }\n }\n }\n }\n }\n },\n \"examples\": [\n {\n \"version\": \"1.0.0\",\n \"name\": \"Simple Kanban\",\n \"description\": \"Basic workflow for small teams\",\n \"state_transitions\": {\n \"review\": {\n \"from\": [\n \"draft\"\n ],\n \"requires\": {\n \"command\": \"gitgov task submit\"\n }\n },\n \"ready\": {\n \"from\": [\n \"review\"\n ],\n \"requires\": {\n \"command\": \"gitgov task approve\",\n \"signatures\": {\n \"__default__\": {\n \"role\": \"approver\",\n \"capability_roles\": [\n \"approver:product\"\n ],\n \"min_approvals\": 1\n }\n }\n }\n },\n \"active\": {\n \"from\": [\n \"ready\"\n ],\n \"requires\": {\n \"event\": \"first_execution_record_created\"\n }\n },\n \"done\": {\n \"from\": [\n \"active\"\n ],\n \"requires\": {\n \"command\": \"gitgov task complete\"\n }\n }\n },\n \"view_configs\": {\n \"kanban-3col\": {\n \"columns\": {\n \"To Do\": [\n \"draft\",\n \"review\"\n ],\n \"In Progress\": [\n \"ready\",\n \"active\"\n ],\n \"Done\": [\n \"done\"\n ]\n },\n \"theme\": \"minimal\",\n \"layout\": \"horizontal\"\n }\n }\n },\n {\n \"version\": \"1.0.0\",\n \"name\": \"GitGovernance Default Methodology\",\n \"description\": \"Standard GitGovernance workflow with quality gates and agent collaboration\",\n \"state_transitions\": {\n \"review\": {\n \"from\": [\n \"draft\"\n ],\n \"requires\": {\n \"command\": \"gitgov task submit\",\n \"signatures\": {\n \"__default__\": {\n \"role\": \"submitter\",\n \"capability_roles\": [\n \"author\"\n ],\n \"min_approvals\": 1\n }\n }\n }\n },\n \"ready\": {\n \"from\": [\n \"review\"\n ],\n \"requires\": {\n \"command\": \"gitgov task approve\",\n \"signatures\": {\n \"__default__\": {\n \"role\": \"approver\",\n \"capability_roles\": [\n \"approver:product\"\n ],\n \"min_approvals\": 1\n },\n \"design\": {\n \"role\": \"approver\",\n \"capability_roles\": [\n \"approver:design\"\n ],\n \"min_approvals\": 1\n },\n \"quality\": {\n \"role\": \"approver\",\n \"capability_roles\": [\n \"approver:quality\"\n ],\n \"min_approvals\": 1\n }\n }\n }\n },\n \"active\": {\n \"from\": [\n \"ready\",\n \"paused\"\n ],\n \"requires\": {\n \"event\": \"first_execution_record_created\",\n \"custom_rules\": [\n \"task_must_have_valid_assignment_for_executor\"\n ]\n }\n },\n \"done\": {\n \"from\": [\n \"active\"\n ],\n \"requires\": {\n \"command\": \"gitgov task complete\",\n \"signatures\": {\n \"__default__\": {\n \"role\": \"approver\",\n \"capability_roles\": [\n \"approver:quality\"\n ],\n \"min_approvals\": 1\n }\n }\n }\n },\n \"archived\": {\n \"from\": [\n \"done\"\n ],\n \"requires\": {\n \"event\": \"changelog_record_created\"\n }\n },\n \"paused\": {\n \"from\": [\n \"active\",\n \"review\"\n ],\n \"requires\": {\n \"event\": \"feedback_blocking_created\"\n }\n },\n \"discarded\": {\n \"from\": [\n \"ready\",\n \"active\"\n ],\n \"requires\": {\n \"command\": \"gitgov task cancel\",\n \"signatures\": {\n \"__default__\": {\n \"role\": \"canceller\",\n \"capability_roles\": [\n \"approver:product\",\n \"approver:quality\"\n ],\n \"min_approvals\": 1\n }\n }\n }\n }\n },\n \"custom_rules\": {\n \"task_must_have_valid_assignment_for_executor\": {\n \"description\": \"Task must have a valid assignment before execution can begin\",\n \"validation\": \"assignment_required\"\n }\n },\n \"view_configs\": {\n \"kanban-4col\": {\n \"columns\": {\n \"Draft\": [\n \"draft\"\n ],\n \"In Progress\": [\n \"review\",\n \"ready\",\n \"active\"\n ],\n \"Review\": [\n \"done\"\n ],\n \"Done\": [\n \"archived\"\n ],\n \"Cancelled\": [\n \"discarded\"\n ]\n },\n \"theme\": \"minimal\",\n \"layout\": \"horizontal\"\n },\n \"kanban-7col\": {\n \"columns\": {\n \"Draft\": [\n \"draft\"\n ],\n \"Review\": [\n \"review\"\n ],\n \"Ready\": [\n \"ready\"\n ],\n \"Active\": [\n \"active\"\n ],\n \"Done\": [\n \"done\"\n ],\n \"Archived\": [\n \"archived\"\n ],\n \"Blocked\": [\n \"paused\"\n ],\n \"Cancelled\": [\n \"discarded\"\n ]\n },\n \"theme\": \"corporate\",\n \"layout\": \"vertical\"\n }\n }\n }\n ]\n}","/**\n * GitGovernance Protocol Schemas\n * \n * Auto-generated from blueprints. Do not edit manually.\n * Run 'pnpm sync:schemas' to update.\n */\n\nimport actorRecordSchema from \"./actor_record_schema.json\";\nimport agentRecordSchema from \"./agent_record_schema.json\";\nimport changelogRecordSchema from \"./changelog_record_schema.json\";\nimport cycleRecordSchema from \"./cycle_record_schema.json\";\nimport embeddedMetadataSchema from \"./embedded_metadata_schema.json\";\nimport executionRecordSchema from \"./execution_record_schema.json\";\nimport feedbackRecordSchema from \"./feedback_record_schema.json\";\nimport taskRecordSchema from \"./task_record_schema.json\";\nimport workflowMethodologyRecordSchema from \"./workflow_methodology_record_schema.json\";\n\n/**\n * All GitGovernance protocol schemas\n */\nexport const Schemas = {\n ActorRecord: actorRecordSchema,\n AgentRecord: agentRecordSchema,\n ChangelogRecord: changelogRecordSchema,\n CycleRecord: cycleRecordSchema,\n EmbeddedMetadata: embeddedMetadataSchema,\n ExecutionRecord: executionRecordSchema,\n FeedbackRecord: feedbackRecordSchema,\n TaskRecord: taskRecordSchema,\n WorkflowMethodologyRecord: workflowMethodologyRecordSchema,\n} as const;\n\n/**\n * Schema names for type safety\n */\nexport type SchemaName = \n | \"ActorRecord\"\n | \"AgentRecord\"\n | \"ChangelogRecord\"\n | \"CycleRecord\"\n | \"EmbeddedMetadata\"\n | \"ExecutionRecord\"\n | \"FeedbackRecord\"\n | \"TaskRecord\"\n | \"WorkflowMethodologyRecord\";\n\n/**\n * Get a schema by name\n */\nexport function getSchema(name: SchemaName) {\n return Schemas[name];\n}\n\n/**\n * Get all schema names\n */\nexport function getSchemaNames(): SchemaName[] {\n return Object.keys(Schemas) as SchemaName[];\n}\n\n/**\n * Check if a schema exists\n */\nexport function hasSchema(name: string): name is SchemaName {\n return name in Schemas;\n}\n","import Ajv from \"ajv\";\nimport type { ValidateFunction } from \"ajv\";\nimport addFormats from \"ajv-formats\";\nimport * as fs from \"fs\";\nimport * as yaml from \"js-yaml\";\n\n// Direct import from generated schemas\nimport { Schemas } from \"./generated\";\n\n/**\n * Singleton cache for schema validators to avoid repeated I/O and AJV compilation.\n * Improves performance by caching compiled validators for schema files.\n */\nexport class SchemaValidationCache {\n private static validators = new Map<string, ValidateFunction>();\n private static schemaValidators = new Map<string, ValidateFunction>();\n private static ajv: Ajv | null = null;\n\n /**\n * Gets or creates a cached validator for the specified schema path.\n * @param schemaPath Absolute path to the YAML schema file\n * @returns Compiled AJV validator function\n */\n static getValidator(schemaPath: string): ValidateFunction {\n if (!this.validators.has(schemaPath)) {\n // Initialize AJV instance if not already done\n if (!this.ajv) {\n this.ajv = new Ajv({ allErrors: true });\n addFormats(this.ajv);\n }\n\n // Load and compile schema\n const schemaContent = fs.readFileSync(schemaPath, \"utf8\");\n const schema = yaml.load(schemaContent);\n const validator = this.ajv.compile(schema as object);\n\n this.validators.set(schemaPath, validator);\n }\n\n return this.validators.get(schemaPath)!;\n }\n\n /**\n * Gets or creates a cached validator for a schema object.\n * @param schema The schema object (already parsed YAML/JSON)\n * @returns Compiled AJV validator function\n */\n static getValidatorFromSchema<T = unknown>(schema: object): ValidateFunction<T> {\n // Create a stable key from the schema object\n const schemaKey = JSON.stringify(schema);\n\n if (!this.schemaValidators.has(schemaKey)) {\n // Initialize AJV instance if not already done\n if (!this.ajv) {\n this.ajv = new Ajv({ allErrors: true });\n addFormats(this.ajv);\n\n // Pre-load all schemas for reference resolution\n this.preloadSchemas();\n }\n\n // Remove $id temporarily to avoid conflicts with preloaded schemas\n // (This doesn't modify the original schema object)\n const { $id, ...schemaWithoutId } = schema as any;\n\n // Compile schema directly - AJV will resolve $ref using preloaded aliases\n const validator = this.ajv.compile(schemaWithoutId);\n this.schemaValidators.set(schemaKey, validator);\n }\n\n return this.schemaValidators.get(schemaKey)! as ValidateFunction<T>;\n }\n\n /**\n * Pre-loads referenced schema files for $ref resolution.\n * Uses direct imports and dynamic iteration.\n */\n private static preloadSchemas(): void {\n if (!this.ajv) return;\n\n try {\n // Map schema names to their expected ref aliases\n const schemaRefMap: Record<string, string> = {\n 'ActorRecord': 'ref:actor_record_schema',\n 'AgentRecord': 'ref:agent_record_schema',\n 'ChangelogRecord': 'ref:changelog_record_schema',\n 'CycleRecord': 'ref:cycle_record_schema',\n 'ExecutionRecord': 'ref:execution_record_schema',\n 'FeedbackRecord': 'ref:feedback_record_schema',\n 'TaskRecord': 'ref:task_record_schema',\n 'WorkflowMethodologyRecord': 'ref:workflow_methodology_record_schema'\n };\n\n // Register schemas with correct aliases\n Object.entries(Schemas).forEach(([name, schema]) => {\n if (name !== 'EmbeddedMetadata' && schemaRefMap[name]) {\n const refName = schemaRefMap[name];\n this.ajv!.addSchema(schema, refName);\n }\n });\n } catch {\n // If preloading fails, continue without it\n }\n }\n\n /**\n * Clears the cache (useful for testing or schema updates).\n */\n static clearCache(): void {\n this.validators.clear();\n this.schemaValidators.clear();\n this.ajv = null;\n }\n\n /**\n * Gets cache statistics for monitoring.\n */\n static getCacheStats(): { cachedSchemas: number; schemasLoaded: string[] } {\n return {\n cachedSchemas: this.validators.size + this.schemaValidators.size,\n schemasLoaded: Array.from(this.validators.keys())\n };\n }\n}\n","export * from \"./generated\";\nexport * from \"./schema_cache\";\nexport * from \"./errors\";","import type { ActorRecord } from \"../types\";\nimport type { AgentRecord } from \"../types\";\nimport type { CycleRecord } from \"../types\";\nimport type { TaskRecord } from \"../types\";\nimport type { ExecutionRecord } from \"../types\";\nimport type { ChangelogRecord } from \"../types\";\nimport type { FeedbackRecord } from \"../types\";\nimport type { EmbeddedMetadataRecord } from \"./embedded.types\";\n\n/**\n * A custom record type for testing purposes.\n */\nexport type CustomRecord = {\n type: 'custom';\n data: unknown;\n}\n\n/**\n * Defines the possible 'type' values for any record in the system.\n */\nexport type GitGovRecordType =\n | \"actor\"\n | \"agent\"\n | \"cycle\"\n | \"task\"\n | \"execution\"\n | \"changelog\"\n | \"feedback\"\n | \"custom\";\n\n/**\n * The canonical payload for any GitGovernance record.\n */\nexport type GitGovRecordPayload =\n | ActorRecord\n | AgentRecord\n | CycleRecord\n | TaskRecord\n | ExecutionRecord\n | ChangelogRecord\n | FeedbackRecord\n | CustomRecord;\n\n/**\n * The canonical type for any record in GitGovernance, wrapping a payload with metadata.\n */\nexport type GitGovRecord = EmbeddedMetadataRecord<GitGovRecordPayload>;\n\n/**\n * Specific GitGov record types with full metadata (header + payload).\n * These types provide clean, type-safe access to records with their signatures and checksums.\n * \n * @example\n * const taskRecord: GitGovTaskRecord = await taskStore.read(taskId);\n * const authorId = taskRecord.header.signatures[0].keyId;\n */\nexport type GitGovTaskRecord = EmbeddedMetadataRecord<TaskRecord>;\nexport type GitGovCycleRecord = EmbeddedMetadataRecord<CycleRecord>;\nexport type GitGovFeedbackRecord = EmbeddedMetadataRecord<FeedbackRecord>;\nexport type GitGovExecutionRecord = EmbeddedMetadataRecord<ExecutionRecord>;\nexport type GitGovChangelogRecord = EmbeddedMetadataRecord<ChangelogRecord>;\nexport type GitGovActorRecord = EmbeddedMetadataRecord<ActorRecord>;\nexport type GitGovAgentRecord = EmbeddedMetadataRecord<AgentRecord>;\n\n// Payloads for creating new records\nexport type ActorPayload = Partial<ActorRecord>;\nexport type AgentPayload = Partial<AgentRecord>;\nexport type CyclePayload = Partial<CycleRecord>;\nexport type TaskPayload = Partial<TaskRecord>;\nexport type ExecutionPayload = Partial<ExecutionRecord>;\nexport type ChangelogPayload = Partial<ChangelogRecord>;\nexport type FeedbackPayload = Partial<FeedbackRecord>;\n\n/**\n * Base class for all GitGovernance-specific errors.\n * Centralized here as it's used across multiple modules (schemas, validation, etc.)\n */\nexport class GitGovError extends Error {\n constructor(message: string, public readonly code: string) {\n super(message);\n this.name = this.constructor.name;\n }\n}\n\n","/**\n * Schema-specific error types for GitGovernance core.\n * These errors are thrown during JSON Schema validation and compilation.\n */\n\n// Import GitGovError from models (common types) - no circular dependencies\nimport { GitGovError } from '../types/common.types';\n\n// Re-export for backward compatibility\nexport { GitGovError };\n\n/**\n * Custom Error type for failures related to JSON Schema validation.\n */\nexport class SchemaValidationError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"SchemaValidationError\";\n }\n}\n\n/**\n * Error for detailed AJV validation failures with multiple field errors.\n */\nexport class DetailedValidationError extends GitGovError {\n constructor(\n recordType: string,\n public readonly errors: Array<{\n field: string;\n message: string;\n value: unknown;\n }>\n ) {\n const errorSummary = errors\n .map(err => `${err.field}: ${err.message}`)\n .join(', ');\n\n super(\n `${recordType} validation failed: ${errorSummary}`,\n 'DETAILED_VALIDATION_ERROR'\n );\n }\n}\n","/**\n * Validation and common error types for GitGovernance core.\n * These errors are thrown during record validation, checksum verification, and general operations.\n */\n\n// Import GitGovError from models (common types)\nexport { GitGovError } from '../types/common.types';\n\n/**\n * Custom Error type for failures when a payload's checksum does not match\n * the one specified in the header.\n */\nexport class ChecksumMismatchError extends Error {\n constructor(message: string = \"Payload checksum does not match the header.\") {\n super(message);\n this.name = \"ChecksumMismatchError\";\n }\n}\n\n/**\n * Custom Error type for failures during cryptographic signature verification.\n */\nexport class SignatureVerificationError extends Error {\n constructor(message: string = \"Signature verification failed.\") {\n super(message);\n this.name = \"SignatureVerificationError\";\n }\n}\n\n/**\n * Error for when required fields are missing during record creation.\n */\nexport class RequiredFieldError extends Error {\n constructor(recordType: string, missingFields: string[]) {\n super(`${recordType} requires ${missingFields.join(', ')}`);\n this.name = \"RequiredFieldError\";\n }\n}\n\n/**\n * Error for when a record is not found during operations.\n */\nexport class RecordNotFoundError extends Error {\n constructor(recordType: string, recordId: string) {\n super(`${recordType} with id ${recordId} not found`);\n this.name = \"RecordNotFoundError\";\n }\n}\n\n/**\n * Error for when project root cannot be determined.\n */\nexport class ProjectRootError extends Error {\n constructor() {\n super('Could not find project root. Are you in a git repository?');\n this.name = \"ProjectRootError\";\n }\n}\n\n/**\n * Error for when record creation validation fails.\n */\nexport class RecordCreationError extends Error {\n constructor(recordType: string, details: string) {\n super(`Invalid ${recordType} created: ${details}`);\n this.name = \"RecordCreationError\";\n }\n}\n\n/**\n * Error for when operations are not implemented or require external components.\n */\nexport class NotImplementedError extends Error {\n constructor(operation: string, reason: string) {\n super(`${operation} not implemented yet - ${reason}`);\n this.name = \"NotImplementedError\";\n }\n}\n\n/**\n * Error for protocol violations in workflow operations.\n */\nexport class ProtocolViolationError extends Error {\n constructor(message: string, violationType?: string) {\n super(`Protocol violation: ${message}`);\n this.name = \"ProtocolViolationError\";\n if (violationType) {\n this.message += ` (Type: ${violationType})`;\n }\n }\n}\n\n/**\n * Standard validation result interface for all validators.\n * Ensures consistency across all validateXDetailed functions.\n */\nexport interface ValidationResult {\n isValid: boolean;\n errors: Array<{\n field: string;\n message: string;\n value: unknown;\n }>;\n}\n","import { createHash } from \"crypto\";\nimport type { GitGovRecordPayload } from \"../types\";\n\n/**\n * Recursively sorts the keys of an object, including nested objects.\n * This is the core of canonical serialization.\n * @param obj The object to sort.\n * @returns A new object with all keys sorted alphabetically.\n */\nfunction sortKeys(obj: any): any {\n if (typeof obj !== 'object' || obj === null) {\n return obj;\n }\n if (Array.isArray(obj)) {\n return obj.map(sortKeys);\n }\n const sortedKeys = Object.keys(obj).sort();\n const newObj: Record<string, any> = {};\n for (const key of sortedKeys) {\n newObj[key] = sortKeys(obj[key]);\n }\n return newObj;\n}\n\n/**\n * Canonically serializes a payload object.\n * @param payload The object to serialize.\n * @returns A deterministic JSON string.\n */\nfunction canonicalize(payload: object): string {\n const sortedPayload = sortKeys(payload);\n return JSON.stringify(sortedPayload);\n}\n\n/**\n * Calculates the SHA-256 checksum of a record's payload.\n */\nexport function calculatePayloadChecksum(payload: GitGovRecordPayload): string {\n const jsonString = canonicalize(payload);\n return createHash(\"sha256\").update(jsonString, \"utf8\").digest(\"hex\");\n} ","export * from \"./logger\";","export type LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\" | \"silent\";\n\nexport interface Logger {\n debug(message: string, ...args: any[]): void;\n info(message: string, ...args: any[]): void;\n warn(message: string, ...args: any[]): void;\n error(message: string, ...args: any[]): void;\n}\n\nclass ConsoleLogger implements Logger {\n private level: LogLevel;\n private prefix: string;\n\n constructor(prefix: string = \"\", level: LogLevel = \"info\") {\n this.prefix = prefix;\n this.level = level;\n }\n\n private shouldLog(level: LogLevel): boolean {\n const levels: LogLevel[] = [\"debug\", \"info\", \"warn\", \"error\", \"silent\"];\n const currentLevelIndex = levels.indexOf(this.level);\n const messageLevelIndex = levels.indexOf(level);\n\n return currentLevelIndex <= messageLevelIndex && this.level !== \"silent\";\n }\n\n debug(message: string, ...args: any[]): void {\n if (this.shouldLog(\"debug\")) {\n console.log(`${this.prefix}${message}`, ...args);\n }\n }\n\n info(message: string, ...args: any[]): void {\n if (this.shouldLog(\"info\")) {\n console.log(`${this.prefix}${message}`, ...args);\n }\n }\n\n warn(message: string, ...args: any[]): void {\n if (this.shouldLog(\"warn\")) {\n console.warn(`${this.prefix}${message}`, ...args);\n }\n }\n\n error(message: string, ...args: any[]): void {\n if (this.shouldLog(\"error\")) {\n console.error(`${this.prefix}${message}`, ...args);\n }\n }\n\n setLevel(level: LogLevel): void {\n this.level = level;\n }\n}\n\n// Factory function para crear loggers\nexport function createLogger(prefix: string = \"\", level?: LogLevel): Logger {\n const logLevel = level ||\n (process.env['NODE_ENV'] === \"test\" ? \"silent\" : \"info\") ||\n (process.env['LOG_LEVEL'] as LogLevel) ||\n \"info\";\n\n return new ConsoleLogger(prefix, logLevel);\n}\n\n// Logger global para uso directo\nexport const logger = createLogger(\"[App] \"); ","import { generateKeyPair, sign, verify, createHash } from \"crypto\";\nimport { promisify } from \"util\";\nimport { calculatePayloadChecksum } from \"./checksum\";\nimport type { GitGovRecordPayload, Signature } from \"../types\";\nimport { createLogger } from \"../logger\";\nconst logger = createLogger(\"[CryptoModule] \");\nconst generateKeyPairAsync = promisify(generateKeyPair);\n\n/**\n * Generates a new Ed25519 key pair.\n * @returns A promise that resolves to an object with publicKey and privateKey in base64 format.\n * \n * The publicKey is the raw Ed25519 key (32 bytes -> 44 chars in base64).\n * The privateKey is stored in PKCS8 PEM format for compatibility.\n * \n * Note: Node.js crypto does not support 'raw' format directly for Ed25519,\n * so we extract the raw 32-byte key from the SPKI DER encoding (RFC 8410).\n * SPKI DER structure: [algorithm identifier (12 bytes)] + [raw public key (32 bytes)]\n */\nexport async function generateKeys(): Promise<{ publicKey: string; privateKey: string; }> {\n const { publicKey, privateKey } = await generateKeyPairAsync('ed25519', {\n publicKeyEncoding: { type: 'spki', format: 'der' },\n privateKeyEncoding: { type: 'pkcs8', format: 'pem' },\n });\n\n // Extract raw Ed25519 public key (last 32 bytes of SPKI DER format)\n const rawPublicKey = publicKey.subarray(-32);\n\n return {\n publicKey: rawPublicKey.toString('base64'), // 32 bytes -> 44 chars\n privateKey: Buffer.from(privateKey).toString('base64'),\n };\n}\n\n/**\n * Creates a signature for a given payload.\n */\nexport function signPayload(\n payload: GitGovRecordPayload,\n privateKey: string,\n keyId: string,\n role: string,\n notes: string,\n): Signature {\n const payloadChecksum = calculatePayloadChecksum(payload);\n const timestamp = Math.floor(Date.now() / 1000);\n const digest = `${payloadChecksum}:${keyId}:${role}:${notes}:${timestamp}`;\n\n // Per the blueprint, sign the SHA-256 hash of the digest\n const digestHash = createHash('sha256').update(digest).digest();\n\n const signature = sign(null, digestHash, {\n key: Buffer.from(privateKey, 'base64'),\n type: 'pkcs8',\n format: 'pem'\n });\n\n return {\n keyId,\n role,\n notes,\n signature: signature.toString('base64'),\n timestamp,\n };\n}\n\n/**\n * Verifies all signatures on a record.\n * \n * Reconstructs SPKI DER format from raw Ed25519 key for verification.\n */\nexport async function verifySignatures(\n record: { header: { payloadChecksum: string, signatures: Signature[] }, payload: GitGovRecordPayload },\n getActorPublicKey: (keyId: string) => Promise<string | null>\n): Promise<boolean> {\n for (const signature of record.header.signatures) {\n const publicKeyBase64 = await getActorPublicKey(signature.keyId);\n if (!publicKeyBase64) {\n logger.warn(`Public key not found for actor: ${signature.keyId}`);\n return false;\n }\n\n const digest = `${record.header.payloadChecksum}:${signature.keyId}:${signature.role}:${signature.notes}:${signature.timestamp}`;\n const digestHash = createHash('sha256').update(digest).digest();\n\n // Reconstruct SPKI DER from raw Ed25519 public key (RFC 8410)\n // SPKI DER structure: [algorithm identifier (12 bytes)] + [raw key (32 bytes)]\n const algorithmIdentifier = Buffer.from([\n 0x30, 0x2a, 0x30, 0x05, 0x06, 0x03, 0x2b, 0x65,\n 0x70, 0x03, 0x21, 0x00\n ]);\n const rawPublicKey = Buffer.from(publicKeyBase64, 'base64');\n const spkiPublicKey = Buffer.concat([algorithmIdentifier, rawPublicKey]);\n\n const isValid = verify(\n null,\n digestHash,\n {\n key: spkiPublicKey,\n type: 'spki',\n format: 'der'\n },\n Buffer.from(signature.signature, 'base64')\n );\n\n if (!isValid) {\n return false;\n }\n }\n return true;\n}\n","import type { ValidateFunction, ErrorObject } from \"ajv\";\nimport type { EmbeddedMetadataRecord } from '../types/embedded.types';\nimport type { GitGovRecordPayload } from '../types/common.types';\nimport type { ValidationResult } from './errors';\nimport { SchemaValidationCache } from '../schemas/schema_cache';\nimport { calculatePayloadChecksum } from '../crypto/checksum';\nimport { verifySignatures } from '../crypto/signatures';\nimport { DetailedValidationError, ChecksumMismatchError, SignatureVerificationError } from './common';\nimport { Schemas } from '../schemas';\n\n/**\n * Schema-based validation for EmbeddedMetadata wrapper\n */\nexport function validateEmbeddedMetadataSchema(\n data: unknown\n): [boolean, ValidateFunction[\"errors\"]] {\n const validator = SchemaValidationCache.getValidatorFromSchema(Schemas.EmbeddedMetadata);\n const isValid = validator(data);\n\n return [isValid, validator.errors];\n}\n\n/**\n * Type guard to check if data is a valid EmbeddedMetadataRecord\n */\nexport function isEmbeddedMetadataRecord<T extends GitGovRecordPayload>(data: unknown): data is EmbeddedMetadataRecord<T> {\n const [isValid] = validateEmbeddedMetadataSchema(data);\n return isValid;\n}\n\n/**\n * Detailed validation for EmbeddedMetadataRecord with formatted errors\n */\nexport function validateEmbeddedMetadataDetailed(data: unknown): ValidationResult {\n const [isValid, ajvErrors] = validateEmbeddedMetadataSchema(data);\n\n const formattedErrors = ajvErrors?.map((error: ErrorObject) => ({\n field: error.instancePath || error.schemaPath,\n message: error.message || 'Validation failed',\n value: error.data\n })) || [];\n\n return {\n isValid,\n errors: formattedErrors\n };\n}\n\n/**\n * Full validation for EmbeddedMetadataRecord including schema, checksum, and signatures\n */\nexport async function validateFullEmbeddedMetadataRecord<T extends GitGovRecordPayload>(\n record: EmbeddedMetadataRecord<T>,\n getActorPublicKey: (keyId: string) => Promise<string | null>\n): Promise<void> {\n // 1. Schema Validation - validate the entire record structure\n const [isValidSchema, errors] = validateEmbeddedMetadataSchema(record);\n if (!isValidSchema) {\n const formattedErrors = errors?.map(error => ({\n field: error.instancePath || error.schemaPath,\n message: error.message || 'Validation failed',\n value: error.data\n })) || [];\n\n throw new DetailedValidationError('EmbeddedMetadata', formattedErrors);\n }\n\n // 2. Checksum Validation\n const expectedChecksum = calculatePayloadChecksum(record.payload);\n if (expectedChecksum !== record.header.payloadChecksum) {\n throw new ChecksumMismatchError();\n }\n\n // 3. Signature Verification\n const areSignaturesValid = await verifySignatures(\n record,\n getActorPublicKey\n );\n if (!areSignaturesValid) {\n throw new SignatureVerificationError();\n }\n}\n\n/**\n * Business rules validation for EmbeddedMetadata\n * Validates conditional requirements based on header.type\n */\nexport function validateEmbeddedMetadataBusinessRules<T extends GitGovRecordPayload>(data: EmbeddedMetadataRecord<T>): ValidationResult {\n const errors: Array<{ field: string; message: string; value: unknown }> = [];\n\n // Rule 1: If header.type is \"custom\", schemaUrl and schemaChecksum are required\n if (data.header.type === 'custom') {\n if (!data.header.schemaUrl) {\n errors.push({\n field: 'header.schemaUrl',\n message: 'schemaUrl is required when header.type is \"custom\"',\n value: data.header.schemaUrl\n });\n }\n\n if (!data.header.schemaChecksum) {\n errors.push({\n field: 'header.schemaChecksum',\n message: 'schemaChecksum is required when header.type is \"custom\"',\n value: data.header.schemaChecksum\n });\n }\n }\n\n // Rule 2: Validate payloadChecksum format (SHA-256)\n const sha256Pattern = /^[a-fA-F0-9]{64}$/;\n if (!sha256Pattern.test(data.header.payloadChecksum)) {\n errors.push({\n field: 'header.payloadChecksum',\n message: 'payloadChecksum must be a valid SHA-256 hash (64 hex characters)',\n value: data.header.payloadChecksum\n });\n }\n\n // Rule 3: Validate schemaChecksum format if present\n if (data.header.schemaChecksum && !sha256Pattern.test(data.header.schemaChecksum)) {\n errors.push({\n field: 'header.schemaChecksum',\n message: 'schemaChecksum must be a valid SHA-256 hash (64 hex characters)',\n value: data.header.schemaChecksum\n });\n }\n\n // Rule 4: Validate signatures array is not empty\n if (!data.header.signatures || data.header.signatures.length === 0) {\n errors.push({\n field: 'header.signatures',\n message: 'At least one signature is required',\n value: data.header.signatures\n });\n }\n\n return {\n isValid: errors.length === 0,\n errors\n };\n}\n","import type { ValidateFunction, ErrorObject } from \"ajv\";\nimport type { TaskRecord } from \"../types\";\nimport type { GitGovRecord } from \"../types\";\nimport { SchemaValidationCache } from \"../schemas/schema_cache\";\nimport { Schemas } from '../schemas';\nimport {\n DetailedValidationError\n} from \"./common\";\nimport type { ValidationResult } from './errors';\nimport { validateFullEmbeddedMetadataRecord } from './embedded_metadata_validator';\n\n// --- Schema Validation ---\nexport function validateTaskRecordSchema(\n data: unknown\n): [boolean, ValidateFunction[\"errors\"]] {\n const validateSchema = SchemaValidationCache.getValidatorFromSchema(Schemas.TaskRecord);\n const isValid = validateSchema(data) as boolean;\n return [isValid, validateSchema.errors];\n}\n\n/**\n * Type guard to check if data is a valid TaskRecord.\n */\nexport function isTaskRecord(data: unknown): data is TaskRecord {\n const validateSchema = SchemaValidationCache.getValidatorFromSchema(Schemas.TaskRecord);\n return validateSchema(data) as boolean;\n}\n\n/**\n * Validates a TaskRecord and returns detailed validation result.\n * Use this in factories and adapters for comprehensive error reporting.\n */\nexport function validateTaskRecordDetailed(data: unknown): ValidationResult {\n const [isValid, ajvErrors] = validateTaskRecordSchema(data);\n\n const formattedErrors = ajvErrors ? ajvErrors.map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n })) : [];\n\n return {\n isValid,\n errors: formattedErrors\n };\n}\n\n// --- Full Validation Orchestrator ---\n/**\n * Performs a complete validation of a TaskRecord, including schema,\n * checksum, and signature checks.\n * @param record The full GitGovRecord containing the task payload.\n * @param getActorPublicKey A function to retrieve the public key for a given actor ID.\n */\nexport async function validateFullTaskRecord(\n record: GitGovRecord & { payload: TaskRecord },\n getActorPublicKey: (keyId: string) => Promise<string | null>\n): Promise<void> {\n // 1. Schema Validation\n const [isValidSchema, errors] = validateTaskRecordSchema(record.payload);\n if (!isValidSchema) {\n const formattedErrors = (errors || []).map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n }));\n throw new DetailedValidationError('TaskRecord', formattedErrors);\n }\n\n // 2. Embedded Metadata Validation (header + wrapper)\n await validateFullEmbeddedMetadataRecord(record, getActorPublicKey);\n}\n","/**\n * Sanitizes a string to be used in a GitGovernance ID slug.\n * Converts to lower-case, replaces spaces with hyphens, and removes invalid characters.\n */\nfunction sanitizeForId(name: string): string {\n return name\n .toLowerCase()\n .replace(/\\s+/g, \"-\")\n .replace(/[^a-z0-9-]/g, \"\")\n .slice(0, 50); // Ensure slug is not too long\n}\n\n/**\n * Generates an Actor ID (e.g., 'human:camilo-velandia').\n */\nexport function generateActorId(type: 'human' | 'agent', displayName: string): string {\n const slug = sanitizeForId(displayName);\n return `${type}:${slug}`;\n}\n\n/**\n * Generates a Task ID (e.g., '12345-task-implement-auth').\n */\nexport function generateTaskId(title: string, timestamp: number): string {\n const slug = sanitizeForId(title);\n return `${timestamp}-task-${slug}`;\n}\n\n/**\n * Generates a Cycle ID (e.g., '12345-cycle-release-v1').\n */\nexport function generateCycleId(title: string, timestamp: number): string {\n const slug = sanitizeForId(title);\n return `${timestamp}-cycle-${slug}`;\n}\n\n/**\n * Generates an Execution ID (e.g., '12345-exec-commit-changes').\n */\nexport function generateExecutionId(title: string, timestamp: number): string {\n const slug = sanitizeForId(title);\n return `${timestamp}-exec-${slug}`;\n}\n\n/**\n * Generates a Changelog ID from title (Protocol v2.0.0).\n * \n * Pattern: {timestamp}-changelog-{slug}\n * Example: '1752707800-changelog-sistema-autenticacion-v1'\n * \n * This follows the official changelog_record_schema.yaml pattern for\n * Release Notes System that aggregates N tasks into 1 deliverable.\n */\nexport function generateChangelogId(title: string, timestamp: number): string {\n const slug = sanitizeForId(title);\n return `${timestamp}-changelog-${slug}`;\n}\n\n/**\n * Generates a Feedback ID (e.g., '12345-feedback-code-review').\n */\nexport function generateFeedbackId(title: string, timestamp: number): string {\n const slug = sanitizeForId(title);\n return `${timestamp}-feedback-${slug}`;\n}\n\n/**\n * Parses a timestamp-based record ID (e.g., '12345-task-slug') into its components.\n */\nexport function parseTimestampedId(id: string): { timestamp: number; prefix: string; slug: string } | null {\n if (typeof id !== 'string') return null;\n const match = id.match(/^(\\d+)-(\\w+)-(.+)$/);\n if (!match || !match[1] || !match[2] || !match[3]) {\n return null;\n }\n return {\n timestamp: parseInt(match[1], 10),\n prefix: match[2],\n slug: match[3],\n };\n}\n\n/**\n * Parses an Actor ID (e.g., 'human:camilo') into its components.\n */\nexport function parseActorId(id: string): { type: 'human' | 'agent'; slug: string } | null {\n if (typeof id !== 'string') return null;\n const parts = id.split(':');\n if (parts.length < 2 || (parts[0] !== 'human' && parts[0] !== 'agent')) {\n return null;\n }\n const type = parts[0] as 'human' | 'agent';\n const slug = parts.slice(1).join(':'); // Re-join in case slug contains ':'\n return { type, slug };\n}\n\n/**\n * Valid prefixes for timestamp-based record IDs.\n */\nconst VALID_PREFIXES = ['task', 'cycle', 'exec', 'changelog', 'feedback'] as const;\n\n/**\n * Validates the format of a timestamp-based record ID.\n */\nexport function isValidTimestampedId(id: string): boolean {\n const parsed = parseTimestampedId(id);\n if (!parsed) return false;\n\n // Check if prefix is valid and slug is not empty\n return VALID_PREFIXES.includes(parsed.prefix as any) && parsed.slug.length > 0;\n}\n","import type { TaskRecord } from \"../types\";\nimport { validateTaskRecordDetailed } from \"../validation/task_validator\";\nimport { DetailedValidationError } from \"../validation/common\";\nimport { generateTaskId } from \"../utils/id_generator\";\n\n/**\n * Creates a new, fully-formed TaskRecord with validation.\n */\nexport async function createTaskRecord(\n payload: Partial<TaskRecord>\n): Promise<TaskRecord> {\n // Generate timestamp for ID if not provided\n const timestamp = Math.floor(Date.now() / 1000);\n\n // Build task with defaults for optional fields\n const task: TaskRecord = {\n id: payload.id || generateTaskId(payload.title || '', timestamp),\n title: payload.title || '',\n status: payload.status || 'draft',\n priority: payload.priority || 'medium',\n description: payload.description || '',\n tags: payload.tags || [],\n cycleIds: payload.cycleIds,\n references: payload.references,\n notes: payload.notes,\n ...payload,\n } as TaskRecord;\n\n // Use validator to check complete schema with detailed errors\n const validation = validateTaskRecordDetailed(task);\n if (!validation.isValid) {\n throw new DetailedValidationError('TaskRecord', validation.errors);\n }\n\n return task;\n}\n\n","import type { ValidateFunction, ErrorObject } from \"ajv\";\nimport type { CycleRecord } from \"../types\";\nimport type { GitGovRecord } from \"../types\";\nimport { SchemaValidationCache } from \"../schemas/schema_cache\";\nimport { DetailedValidationError } from \"./common\";\nimport type { ValidationResult } from './errors';\nimport { validateFullEmbeddedMetadataRecord } from './embedded_metadata_validator';\nimport { Schemas } from \"../schemas\";\n\n// --- Schema Validation ---\nconst cycleSchema = Schemas.CycleRecord;\n\nexport function validateCycleRecordSchema(\n data: unknown\n): [boolean, ValidateFunction[\"errors\"]] {\n const validateSchema = SchemaValidationCache.getValidatorFromSchema(cycleSchema);\n const isValid = validateSchema(data) as boolean;\n return [isValid, validateSchema.errors];\n}\n\n/**\n * Type guard to check if data is a valid CycleRecord.\n */\nexport function isCycleRecord(data: unknown): data is CycleRecord {\n const validateSchema = SchemaValidationCache.getValidatorFromSchema(cycleSchema);\n return validateSchema(data) as boolean;\n}\n\n/**\n * Validates a CycleRecord and returns detailed validation result.\n * Use this in factories and adapters for comprehensive error reporting.\n */\nexport function validateCycleRecordDetailed(data: unknown): ValidationResult {\n const [isValid, ajvErrors] = validateCycleRecordSchema(data);\n\n const formattedErrors = ajvErrors ? ajvErrors.map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n })) : [];\n\n return {\n isValid,\n errors: formattedErrors\n };\n}\n\n// --- Full Validation Orchestrator ---\n/**\n * Performs a complete validation of a CycleRecord, including schema,\n * checksum, and signature checks.\n * @param record The full GitGovRecord containing the cycle payload.\n * @param getActorPublicKey A function to retrieve the public key for a given actor ID.\n */\nexport async function validateFullCycleRecord(\n record: GitGovRecord & { payload: CycleRecord },\n getActorPublicKey: (keyId: string) => Promise<string | null>\n): Promise<void> {\n // 1. Schema Validation\n const [isValidSchema, errors] = validateCycleRecordSchema(record.payload);\n if (!isValidSchema) {\n const formattedErrors = (errors || []).map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n }));\n throw new DetailedValidationError('CycleRecord', formattedErrors);\n }\n\n // 2. Embedded Metadata Validation (header + wrapper)\n await validateFullEmbeddedMetadataRecord(record, getActorPublicKey);\n}\n","import type { CycleRecord } from \"../types\";\nimport { validateCycleRecordDetailed } from \"../validation/cycle_validator\";\nimport { DetailedValidationError } from \"../validation/common\";\nimport { generateCycleId } from \"../utils/id_generator\";\n\n/**\n * Creates a new, fully-formed CycleRecord with validation.\n */\nexport async function createCycleRecord(\n payload: Partial<CycleRecord>\n): Promise<CycleRecord> {\n // Generate timestamp for ID if not provided\n const timestamp = Math.floor(Date.now() / 1000);\n\n // Build cycle with defaults for optional fields\n const cycle: CycleRecord = {\n id: payload.id || generateCycleId(payload.title || '', timestamp),\n title: payload.title || '',\n status: payload.status || 'planning',\n taskIds: payload.taskIds || [], // EARS-21: Default empty array\n childCycleIds: payload.childCycleIds,\n tags: payload.tags,\n notes: payload.notes,\n ...payload,\n } as CycleRecord;\n\n // Use validator to check complete schema with detailed errors\n const validation = validateCycleRecordDetailed(cycle);\n if (!validation.isValid) {\n throw new DetailedValidationError('CycleRecord', validation.errors);\n }\n\n return cycle;\n}\n\n","export * from \"./record_store\";\n","import { promises as fs } from 'fs';\nimport * as path from 'path';\nimport { existsSync } from 'fs';\n\n// Project root cache for performance\nlet projectRoot: string | null = null;\nlet lastSearchPath: string | null = null;\n\n/**\n * GitGovernance Configuration Types\n * Based on config_file.md blueprint\n */\n\nexport interface GitGovConfig {\n protocolVersion: string; // Obligatorio segĆŗn config_file.md\n projectId: string; // Obligatorio segĆŗn config_file.md\n projectName: string; // Obligatorio segĆŗn config_file.md\n rootCycle: string; // Obligatorio: ID del ciclo raĆz (creado durante 'gitgov init')\n blueprints?: {\n root?: string; // Opcional, default: \"./blueprints\"\n };\n state?: {\n branch?: string; // Opcional, default: \"gitgov-state\"\n };\n cloud?: {\n projectId?: string; // Opcional, para SaaS integration\n providerMappings?: Record<string, string>; // Opcional\n };\n}\n\n/**\n * GitGovernance Session State Types\n * Based on session_state.md blueprint\n */\n\nexport interface ActorState {\n activeTaskId?: string;\n activeCycleId?: string;\n lastSync?: string;\n [key: string]: any; // Allow additional actor-specific state\n}\n\nexport interface GitGovSession {\n cloud?: {\n sessionToken?: string;\n };\n lastSession?: {\n actorId: string;\n timestamp: string;\n };\n actorState?: Record<string, ActorState>;\n}\n\n/**\n * Configuration Manager Class\n * Provides typed access to GitGovernance configuration and session state\n */\nexport class ConfigManager {\n private configPath: string;\n private sessionPath: string;\n\n constructor(projectRootPath: string = ConfigManager.findProjectRoot() || process.cwd()) {\n this.configPath = path.join(projectRootPath, '.gitgov', 'config.json');\n this.sessionPath = path.join(projectRootPath, '.gitgov', '.session.json');\n }\n\n /**\n * Load GitGovernance configuration\n */\n async loadConfig(): Promise<GitGovConfig | null> {\n try {\n const configContent = await fs.readFile(this.configPath, 'utf-8');\n return JSON.parse(configContent) as GitGovConfig;\n } catch (error) {\n // Config file doesn't exist or is invalid\n return null;\n }\n }\n\n /**\n * Load GitGovernance session state\n */\n async loadSession(): Promise<GitGovSession | null> {\n try {\n const sessionContent = await fs.readFile(this.sessionPath, 'utf-8');\n return JSON.parse(sessionContent) as GitGovSession;\n } catch (error) {\n // Session file doesn't exist or is invalid\n return null;\n }\n }\n\n /**\n * Get root cycle from configuration\n */\n async getRootCycle(): Promise<string | null> {\n const config = await this.loadConfig();\n return config?.rootCycle || null;\n }\n\n /**\n * Get project information from configuration\n */\n async getProjectInfo(): Promise<{ id: string; name: string } | null> {\n const config = await this.loadConfig();\n if (!config) return null;\n\n return {\n id: config.projectId,\n name: config.projectName\n };\n }\n\n /**\n * Get actor state for a specific actor\n */\n async getActorState(actorId: string): Promise<ActorState | null> {\n const session = await this.loadSession();\n return session?.actorState?.[actorId] || null;\n }\n\n /**\n * Update actor state for a specific actor\n */\n async updateActorState(actorId: string, state: Partial<ActorState>): Promise<void> {\n const session = await this.loadSession() || {};\n if (!session.actorState) session.actorState = {};\n\n session.actorState[actorId] = {\n ...session.actorState[actorId],\n ...state,\n lastSync: new Date().toISOString()\n };\n\n await fs.writeFile(this.sessionPath, JSON.stringify(session, null, 2), 'utf-8');\n }\n\n /**\n * Get cloud session token\n */\n async getCloudSessionToken(): Promise<string | null> {\n const session = await this.loadSession();\n return session?.cloud?.sessionToken || null;\n }\n\n // --- Static Utility Methods (consolidated from project-utils) ---\n\n /**\n * Finds the project root by searching upwards for a .git directory.\n * Caches the result for subsequent calls.\n * @param startPath The path to start searching from. Defaults to the current working directory.\n * @returns The absolute path to the project root, or null if not found.\n */\n static findProjectRoot(startPath: string = process.cwd()): string | null {\n // In test environment, allow cache reset via global\n if (typeof (global as any).projectRoot !== 'undefined' && (global as any).projectRoot === null) {\n projectRoot = null;\n lastSearchPath = null;\n }\n\n // Reset cache if we're searching from a different directory\n if (lastSearchPath && lastSearchPath !== startPath) {\n projectRoot = null;\n lastSearchPath = null;\n }\n\n if (projectRoot && lastSearchPath === startPath) {\n return projectRoot;\n }\n\n // Update last search path\n lastSearchPath = startPath;\n\n let currentPath = startPath;\n // Prevent infinite loop by stopping at the filesystem root\n while (currentPath !== path.parse(currentPath).root) {\n if (existsSync(path.join(currentPath, '.git'))) {\n projectRoot = currentPath;\n return projectRoot;\n }\n currentPath = path.dirname(currentPath);\n }\n\n // Final check at the root directory\n if (existsSync(path.join(currentPath, '.git'))) {\n projectRoot = currentPath;\n return projectRoot;\n }\n\n return null;\n }\n\n /**\n * Finds the appropriate project root by searching upwards.\n * First looks for .gitgov (initialized project), then .git (for init).\n * @param startPath The path to start searching from. Defaults to the current working directory.\n * @returns The absolute path to the project root, or null if not found.\n */\n static findGitgovRoot(startPath: string = process.cwd()): string | null {\n let currentPath = startPath;\n\n // First pass: Look for .gitgov (initialized GitGovernance project)\n while (currentPath !== path.parse(currentPath).root) {\n if (existsSync(path.join(currentPath, '.gitgov'))) {\n return currentPath;\n }\n currentPath = path.dirname(currentPath);\n }\n\n // Final check at root for .gitgov\n if (existsSync(path.join(currentPath, '.gitgov'))) {\n return currentPath;\n }\n\n // Second pass: Look for .git (for init command)\n currentPath = startPath;\n while (currentPath !== path.parse(currentPath).root) {\n if (existsSync(path.join(currentPath, '.git'))) {\n return currentPath;\n }\n currentPath = path.dirname(currentPath);\n }\n\n // Final check at root for .git\n if (existsSync(path.join(currentPath, '.git'))) {\n return currentPath;\n }\n\n return null;\n }\n\n /**\n * Gets the .gitgov directory path from project root\n */\n static getGitgovPath(): string {\n const root = ConfigManager.findGitgovRoot();\n if (!root) {\n throw new Error(\"Could not find project root. Make sure you are inside a GitGovernance repository.\");\n }\n return path.join(root, '.gitgov');\n }\n\n /**\n * Checks if current directory is a GitGovernance project\n */\n static isGitgovProject(): boolean {\n try {\n const gitgovPath = ConfigManager.getGitgovPath();\n return existsSync(gitgovPath);\n } catch {\n return false;\n }\n }\n}\n\n/**\n * Create a ConfigManager instance for the current project\n */\nexport function createConfigManager(projectRoot?: string): ConfigManager {\n return new ConfigManager(projectRoot);\n}\n","import { promises as fs, constants } from 'fs';\nimport * as path from 'path';\nimport { ConfigManager } from '../config_manager';\nimport type { GitGovRecord, GitGovRecordPayload, CustomRecord } from '../types';\n\ntype StorablePayload = Exclude<GitGovRecordPayload, CustomRecord>;\n\n// Define an interface for the filesystem dependencies for mocking\nexport interface FsDependencies {\n mkdir: typeof fs.mkdir;\n writeFile: typeof fs.writeFile;\n readFile: typeof fs.readFile;\n readdir: typeof fs.readdir;\n unlink: typeof fs.unlink;\n access: typeof fs.access;\n}\n\nexport class RecordStore<T extends StorablePayload> {\n private recordType: string;\n private recordsDir: string;\n private fs: FsDependencies;\n\n constructor(\n recordType: string,\n rootPath?: string,\n fsDeps: FsDependencies = fs\n ) {\n const foundRoot = rootPath || ConfigManager.findProjectRoot();\n if (!foundRoot) {\n throw new Error(\"Could not find project root. RecordStore requires a valid project root.\");\n }\n this.recordType = recordType;\n this.recordsDir = path.join(foundRoot, '.gitgov', this.recordType);\n this.fs = fsDeps;\n }\n\n private getRecordPath(recordId: string): string {\n const safeId = recordId.replace(/:/g, '_');\n return path.join(this.recordsDir, `${safeId}.json`);\n }\n\n private async ensureDirExists(): Promise<void> {\n await this.fs.mkdir(this.recordsDir, { recursive: true });\n }\n\n async write(record: GitGovRecord & { payload: T }): Promise<void> {\n await this.ensureDirExists();\n const filePath = this.getRecordPath(record.payload.id);\n const content = JSON.stringify(record, null, 2);\n await this.fs.writeFile(filePath, content, 'utf-8');\n }\n\n\n async read(recordId: string): Promise<(GitGovRecord & { payload: T }) | null> {\n const filePath = this.getRecordPath(recordId);\n try {\n const content = await this.fs.readFile(filePath, 'utf-8');\n const record = JSON.parse(content) as GitGovRecord & { payload: T };\n\n return record;\n } catch (e: unknown) {\n const error = e as NodeJS.ErrnoException;\n if (error.code === 'ENOENT') {\n return null;\n }\n throw error;\n }\n }\n\n\n async delete(recordId: string): Promise<void> {\n const filePath = this.getRecordPath(recordId);\n try {\n await this.fs.unlink(filePath);\n } catch (e: unknown) {\n const error = e as NodeJS.ErrnoException;\n if (error.code !== 'ENOENT') {\n throw error;\n }\n }\n }\n\n async list(): Promise<string[]> {\n try {\n const files = await this.fs.readdir(this.recordsDir, { withFileTypes: true });\n return files\n .filter(file => file.isFile() && file.name.endsWith('.json'))\n .map(file => file.name.replace(/\\.json$/, '').replace(/_/g, ':'));\n } catch (e: unknown) {\n const error = e as NodeJS.ErrnoException;\n if (error.code === 'ENOENT') {\n return [];\n }\n throw error;\n }\n }\n\n async exists(recordId: string): Promise<boolean> {\n const filePath = this.getRecordPath(recordId);\n try {\n await this.fs.access(filePath, constants.F_OK);\n return true;\n } catch {\n return false;\n }\n }\n}\n","import type { ActorRecord } from \"../../types\";\nimport type { AgentRecord } from \"../../types\";\nimport type {\n GitGovRecord,\n ActorPayload,\n AgentPayload,\n} from \"../../types\";\nimport { RecordStore } from \"../../store/record_store\";\nimport { createActorRecord } from \"../../factories/actor_factory\";\nimport { validateFullActorRecord } from \"../../validation/actor_validator\";\nimport { createAgentRecord } from \"../../factories/agent_factory\";\nimport { validateFullAgentRecord } from \"../../validation/agent_validator\";\nimport { generateKeys, signPayload } from \"../../crypto/signatures\";\nimport { calculatePayloadChecksum } from \"../../crypto/checksum\";\nimport { generateActorId } from \"../../utils/id_generator\";\nimport type { Signature } from \"../../types\";\nimport type {\n IEventStream,\n ActorCreatedEvent,\n ActorRevokedEvent,\n AgentRegisteredEvent\n} from \"../../event_bus\";\nimport { ConfigManager } from \"../../config_manager\";\n\n/**\n * IdentityAdapter Interface - The Identity Management Contract\n */\nexport interface IIdentityAdapter {\n // ActorRecord Operations\n createActor(payload: ActorPayload, signerId: string): Promise<ActorRecord>;\n getActor(actorId: string): Promise<ActorRecord | null>;\n listActors(): Promise<ActorRecord[]>;\n revokeActor(actorId: string, revokedBy?: string, reason?: \"compromised\" | \"rotation\" | \"manual\", supersededBy?: string): Promise<ActorRecord>;\n\n // Succession Chain Resolution\n resolveCurrentActorId(originalActorId: string): Promise<string>;\n getCurrentActor(): Promise<ActorRecord>;\n getEffectiveActorForAgent(agentId: string): Promise<ActorRecord | null>;\n\n // Advanced Operations\n signRecord(record: GitGovRecord, actorId: string, role: string): Promise<GitGovRecord>;\n rotateActorKey(actorId: string): Promise<{ oldActor: ActorRecord; newActor: ActorRecord }>;\n authenticate(sessionToken: string): Promise<void>;\n getActorPublicKey(keyId: string): Promise<string | null>;\n\n // AgentRecord Operations\n createAgentRecord(payload: Partial<AgentPayload>): Promise<AgentRecord>;\n getAgentRecord(agentId: string): Promise<AgentRecord | null>;\n listAgentRecords(): Promise<AgentRecord[]>;\n}\n\n/**\n * IdentityAdapter Dependencies - Facade + Dependency Injection Pattern\n */\nexport interface IdentityAdapterDependencies {\n // Data Layer (Protocols)\n actorStore: RecordStore<ActorRecord>;\n agentStore: RecordStore<AgentRecord>;\n\n // Optional: Event Bus for event-driven integration (graceful degradation)\n eventBus?: IEventStream;\n}\n\nexport class IdentityAdapter implements IIdentityAdapter {\n private actorStore: RecordStore<ActorRecord>;\n private agentStore: RecordStore<AgentRecord>;\n private eventBus: IEventStream | undefined;\n\n constructor(dependencies: IdentityAdapterDependencies) {\n this.actorStore = dependencies.actorStore;\n this.agentStore = dependencies.agentStore;\n this.eventBus = dependencies.eventBus; // Graceful degradation\n }\n\n /**\n * Get actor public key for validation - used by other adapters\n */\n async getActorPublicKey(keyId: string): Promise<string | null> {\n try {\n const actor = await this.getActor(keyId);\n return actor?.publicKey || null;\n } catch (error) {\n return null;\n }\n }\n\n async createActor(\n payload: ActorPayload,\n _signerId: string\n ): Promise<ActorRecord> {\n // Validate required fields\n if (!payload.type || !payload.displayName) {\n throw new Error('ActorRecord requires type and displayName');\n }\n\n // Generate new keys for the actor\n const { publicKey, privateKey } = await generateKeys();\n\n // Generate ID if not provided\n const actorId = payload.id || generateActorId(payload.type, payload.displayName);\n\n // Create complete ActorRecord payload\n const completePayload: ActorRecord = {\n id: actorId,\n type: payload.type,\n displayName: payload.displayName,\n publicKey,\n roles: payload.roles || ['author'],\n status: payload.status || 'active',\n ...payload\n };\n\n // Validate the payload using the factory\n const validatedPayload = await createActorRecord(completePayload);\n\n // Calculate checksum for the payload\n const payloadChecksum = calculatePayloadChecksum(validatedPayload);\n\n // Create signature for the record\n const signature = await signPayload(validatedPayload, privateKey, actorId, 'author', 'Actor registration');\n\n // Create the complete GitGovRecord structure\n const record: GitGovRecord & { payload: ActorRecord } = {\n header: {\n version: '1.0',\n type: 'actor',\n payloadChecksum,\n signatures: [signature]\n },\n payload: validatedPayload\n };\n\n // Validate the complete record\n await validateFullActorRecord(record, async (keyId) => {\n if (keyId === actorId) {\n return publicKey; // Self-referential for bootstrap\n }\n const signerActor = await this.getActor(keyId);\n return signerActor?.publicKey || null;\n });\n\n // Store the record with validation\n await this.actorStore.write(record);\n\n // Emit actor created event (graceful degradation if no eventBus)\n if (this.eventBus) {\n // Check if this is the first actor (bootstrap)\n const allActorIds = await this.actorStore.list();\n const isBootstrap = allActorIds.length === 1; // Only the actor we just created\n\n const event: ActorCreatedEvent = {\n type: \"identity.actor.created\",\n timestamp: Date.now(),\n source: \"identity_adapter\",\n payload: {\n actorId,\n type: validatedPayload.type,\n publicKey: validatedPayload.publicKey,\n roles: validatedPayload.roles,\n isBootstrap,\n },\n };\n this.eventBus.publish(event);\n }\n\n // TODO: Store private key securely (outside of this core module)\n // For now, we'll just log it (NOT for production)\n console.warn(`Private key for ${actorId}: ${privateKey} (STORE SECURELY)`);\n\n return validatedPayload;\n }\n\n async getActor(actorId: string): Promise<ActorRecord | null> {\n const record = await this.actorStore.read(actorId);\n return record ? record.payload : null;\n }\n\n async listActors(): Promise<ActorRecord[]> {\n const ids = await this.actorStore.list();\n const actors: ActorRecord[] = [];\n\n for (const id of ids) {\n const record = await this.actorStore.read(id);\n if (record) {\n actors.push(record.payload);\n }\n }\n\n return actors;\n }\n\n async signRecord(\n record: GitGovRecord,\n actorId: string,\n role: string\n ): Promise<GitGovRecord> {\n // MVP MODE: Generate functionally valid mock signature\n // TODO: Replace with real cryptographic signing when key management is implemented\n\n // Verify actor exists\n const actor = await this.getActor(actorId);\n if (!actor) {\n throw new Error(`Actor not found: ${actorId}`);\n }\n\n // Calculate payload checksum (real)\n const payloadChecksum = calculatePayloadChecksum(record.payload);\n\n // Generate mock signature that passes validation\n const mockSignature: Signature = {\n keyId: actorId,\n role: role,\n notes: 'Record signed',\n signature: `mock-signature-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,\n timestamp: Math.floor(Date.now() / 1000)\n };\n\n // Create signed record with real checksum + mock signature\n const signedRecord: GitGovRecord = {\n ...record,\n header: {\n ...record.header,\n payloadChecksum,\n signatures: [...(record.header.signatures || []), mockSignature]\n }\n };\n\n return signedRecord;\n }\n\n /**\n * Resolves the current active ActorRecord ID by following the succession chain.\n * This is critical for AgentRecord operations after key rotation.\n * \n * @param originalActorId - The original actor ID (may be revoked)\n * @returns Promise<string> - The current active actor ID\n */\n async resolveCurrentActorId(originalActorId: string): Promise<string> {\n let currentId = originalActorId;\n let actor = await this.getActor(currentId);\n\n // Follow the succession chain until we find an active actor\n while (actor && actor.status === 'revoked' && actor.supersededBy) {\n currentId = actor.supersededBy;\n actor = await this.getActor(currentId);\n }\n\n return currentId;\n }\n\n /**\n * Gets the current ActorRecord of the system based on active session or fallback.\n * This is critical for CLI commands that need to know \"who is the current user\".\n * \n * @returns Promise<ActorRecord> - The current active ActorRecord\n */\n async getCurrentActor(): Promise<ActorRecord> {\n // 1. Try to get from session\n const configManager = new ConfigManager();\n const session = await configManager.loadSession();\n\n if (session?.lastSession?.actorId) {\n // Use resolveCurrentActorId to handle succession chain\n const currentActorId = await this.resolveCurrentActorId(session.lastSession.actorId);\n const actor = await this.getActor(currentActorId);\n if (actor) {\n return actor;\n }\n }\n\n // 2. Fallback: first active actor in the system\n const actors = await this.listActors();\n const activeActor = actors.find(a => a.status === 'active');\n if (activeActor) {\n return activeActor;\n }\n\n throw new Error(\"ā No active actors found. Run 'gitgov init' first.\");\n }\n\n /**\n * Gets the effective (current active) ActorRecord for an AgentRecord.\n * This resolves the succession chain to get the current cryptographic identity.\n * \n * @param agentId - The AgentRecord ID (may reference revoked ActorRecord)\n * @returns Promise<ActorRecord | null> - The current active ActorRecord or null\n */\n async getEffectiveActorForAgent(agentId: string): Promise<ActorRecord | null> {\n const currentActorId = await this.resolveCurrentActorId(agentId);\n return this.getActor(currentActorId);\n }\n\n async rotateActorKey(\n _actorId: string\n ): Promise<{ oldActor: ActorRecord; newActor: ActorRecord }> {\n // TODO: Implement key rotation workflow\n throw new Error('rotateActorKey not implemented yet - complex operation');\n }\n\n async revokeActor(actorId: string, revokedBy: string = \"system\", reason: \"compromised\" | \"rotation\" | \"manual\" = \"manual\", supersededBy?: string): Promise<ActorRecord> {\n // Read the existing actor\n const existingRecord = await this.actorStore.read(actorId);\n if (!existingRecord) {\n throw new Error(`ActorRecord with id ${actorId} not found`);\n }\n\n // Update the status to revoked\n const revokedPayload: ActorRecord = {\n ...existingRecord.payload,\n status: \"revoked\",\n ...(supersededBy && { supersededBy })\n };\n\n // Calculate new checksum for the updated payload\n const payloadChecksum = calculatePayloadChecksum(revokedPayload);\n\n // Create updated record\n const updatedRecord: GitGovRecord & { payload: ActorRecord } = {\n ...existingRecord,\n header: {\n ...existingRecord.header,\n payloadChecksum\n },\n payload: revokedPayload\n };\n\n // Store the updated record with validation\n await this.actorStore.write(updatedRecord);\n\n // Emit actor revoked event (graceful degradation if no eventBus)\n if (this.eventBus) {\n const eventPayload: ActorRevokedEvent[\"payload\"] = {\n actorId,\n revokedBy,\n revocationReason: reason,\n };\n\n if (supersededBy) {\n eventPayload.supersededBy = supersededBy;\n }\n\n const event: ActorRevokedEvent = {\n type: \"identity.actor.revoked\",\n timestamp: Date.now(),\n source: \"identity_adapter\",\n payload: eventPayload,\n };\n this.eventBus.publish(event);\n }\n\n return revokedPayload;\n }\n\n async authenticate(_sessionToken: string): Promise<void> {\n // TODO: Implement session token storage for SaaS mode\n console.warn('authenticate not fully implemented yet');\n }\n\n async createAgentRecord(payload: Partial<AgentPayload>): Promise<AgentRecord> {\n // Validate required fields\n if (!payload.id || !payload.engine) {\n throw new Error('AgentRecord requires id and engine');\n }\n\n // Verify that corresponding ActorRecord exists and is of type 'agent'\n const correspondingActor = await this.getActor(payload.id);\n if (!correspondingActor) {\n throw new Error(`ActorRecord with id ${payload.id} not found. AgentRecord can only be created for existing ActorRecord.`);\n }\n if (correspondingActor.type !== 'agent') {\n throw new Error(`ActorRecord with id ${payload.id} must be of type 'agent' to create AgentRecord.`);\n }\n\n // Create complete AgentRecord payload\n const completePayload: AgentRecord = {\n id: payload.id,\n engine: payload.engine,\n status: payload.status || 'active',\n triggers: payload.triggers || [],\n knowledge_dependencies: payload.knowledge_dependencies || [],\n prompt_engine_requirements: payload.prompt_engine_requirements || {},\n ...payload\n };\n\n // Validate the payload using the factory\n const validatedPayload = await createAgentRecord(completePayload);\n\n // Calculate checksum for the payload\n const payloadChecksum = calculatePayloadChecksum(validatedPayload);\n\n // Create signature for the record using the corresponding actor's key\n // Note: In a real implementation, we would need access to the actor's private key\n // For now, we'll create a placeholder signature structure\n const signature = signPayload(validatedPayload, 'placeholder-private-key', payload.id, 'author', 'Agent registration');\n\n // Create the complete GitGovRecord structure\n const record: GitGovRecord & { payload: AgentRecord } = {\n header: {\n version: '1.0',\n type: 'agent',\n payloadChecksum,\n signatures: [signature]\n },\n payload: validatedPayload\n };\n\n // Validate the complete record\n await validateFullAgentRecord(record, async (keyId) => {\n if (keyId === payload.id) {\n return correspondingActor.publicKey; // Use the actor's public key\n }\n const signerActor = await this.getActor(keyId);\n return signerActor?.publicKey || null;\n });\n\n // Store the record with validation\n await this.agentStore.write(record);\n\n // Emit agent registered event (graceful degradation if no eventBus)\n if (this.eventBus) {\n const event: AgentRegisteredEvent = {\n type: \"identity.agent.registered\",\n timestamp: Date.now(),\n source: \"identity_adapter\",\n payload: {\n agentId: validatedPayload.id,\n engine: validatedPayload.engine,\n correspondingActorId: correspondingActor.id,\n },\n };\n this.eventBus.publish(event);\n }\n\n return validatedPayload;\n }\n\n async getAgentRecord(agentId: string): Promise<AgentRecord | null> {\n const record = await this.agentStore.read(agentId);\n return record ? record.payload : null;\n }\n\n async listAgentRecords(): Promise<AgentRecord[]> {\n const ids = await this.agentStore.list();\n const agents: AgentRecord[] = [];\n\n for (const id of ids) {\n const record = await this.agentStore.read(id);\n if (record) {\n agents.push(record.payload);\n }\n }\n\n return agents;\n }\n}\n","import type { ValidateFunction, ErrorObject } from \"ajv\";\nimport type { ActorRecord } from \"../types\";\nimport type { GitGovRecord } from \"../types\";\nimport { DetailedValidationError } from \"./common\";\nimport type { ValidationResult } from './errors';\nimport { SchemaValidationCache } from \"../schemas/schema_cache\";\nimport { Schemas } from \"../schemas\";\nimport { validateFullEmbeddedMetadataRecord } from './embedded_metadata_validator';\n\n// --- Schema Validation ---\nconst actorSchema = Schemas.ActorRecord;\n\nexport function validateActorRecordSchema(\n data: unknown\n): [boolean, ValidateFunction[\"errors\"]] {\n const validateSchema = SchemaValidationCache.getValidatorFromSchema(actorSchema);\n const isValid = validateSchema(data) as boolean;\n return [isValid, validateSchema.errors];\n}\n\nexport function isActorRecord(data: unknown): data is ActorRecord {\n const validateSchema = SchemaValidationCache.getValidatorFromSchema(actorSchema);\n return validateSchema(data) as boolean;\n}\n\n/**\n * Validates an ActorRecord and returns detailed validation result.\n * Use this in factories and adapters for comprehensive error reporting.\n */\nexport function validateActorRecordDetailed(data: unknown): ValidationResult {\n const [isValid, ajvErrors] = validateActorRecordSchema(data);\n\n const formattedErrors = ajvErrors ? ajvErrors.map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n })) : [];\n\n return {\n isValid,\n errors: formattedErrors\n };\n}\n\n// --- Full Validation Orchestrator ---\n/**\n * Performs a complete validation of an ActorRecord, including schema,\n * checksum, and signature checks.\n * @param record The full GitGovRecord containing the actor payload.\n * @param getActorPublicKey A function to retrieve the public key for a given actor ID.\n */\nexport async function validateFullActorRecord(\n record: GitGovRecord & { payload: ActorRecord },\n getActorPublicKey: (keyId: string) => Promise<string | null>\n): Promise<void> {\n // 1. Schema Validation\n const [isValidSchema, errors] = validateActorRecordSchema(record.payload);\n if (!isValidSchema) {\n const formattedErrors = (errors || []).map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n }));\n throw new DetailedValidationError('ActorRecord', formattedErrors);\n }\n\n // 2. Embedded Metadata Validation (header + wrapper)\n await validateFullEmbeddedMetadataRecord(record, getActorPublicKey);\n}\n","import type { ActorRecord } from \"../types\";\nimport { validateActorRecordDetailed } from \"../validation/actor_validator\";\nimport { generateActorId } from \"../utils/id_generator\";\nimport { DetailedValidationError } from \"../validation/common\";\n\n/**\n * Creates a new, fully-formed ActorRecord with validation.\n */\nexport async function createActorRecord(\n payload: Partial<ActorRecord>\n): Promise<ActorRecord> {\n // Build actor with defaults for optional fields\n const actor: ActorRecord = {\n id: payload.id || generateActorId(payload.type || 'human', payload.displayName || ''),\n type: payload.type || 'human' as const,\n displayName: payload.displayName || '',\n publicKey: payload.publicKey || '',\n roles: payload.roles || ['author'] as [string, ...string[]],\n status: payload.status || 'active',\n ...payload,\n } as ActorRecord;\n\n // Use validator to check complete schema with detailed errors\n const validation = validateActorRecordDetailed(actor);\n if (!validation.isValid) {\n throw new DetailedValidationError('ActorRecord', validation.errors);\n }\n\n return actor;\n}\n","import type { ValidateFunction, ErrorObject } from \"ajv\";\nimport type { AgentRecord } from \"../types\";\nimport type { GitGovRecord } from \"../types\";\nimport { DetailedValidationError, SchemaValidationError } from \"./common\";\nimport { validateFullEmbeddedMetadataRecord } from './embedded_metadata_validator';\nimport type { ValidationResult } from './errors';\nimport { SchemaValidationCache } from \"../schemas/schema_cache\";\nimport { Schemas } from '../schemas';\nimport type { ActorRecord } from \"../types\";\n\n// --- Schema Validation ---\nexport function validateAgentRecordSchema(\n data: unknown\n): [boolean, ValidateFunction[\"errors\"]] {\n const validateSchema = SchemaValidationCache.getValidatorFromSchema(Schemas.AgentRecord);\n const isValid = validateSchema(data) as boolean;\n return [isValid, validateSchema.errors];\n}\n\nexport function isAgentRecord(data: unknown): data is AgentRecord {\n const validateSchema = SchemaValidationCache.getValidatorFromSchema(Schemas.AgentRecord);\n return validateSchema(data) as boolean;\n}\n\n/**\n * Validates an AgentRecord and returns detailed validation result.\n * Use this in factories and adapters for comprehensive error reporting.\n */\nexport function validateAgentRecordDetailed(data: unknown): ValidationResult {\n const [isValid, ajvErrors] = validateAgentRecordSchema(data);\n\n const formattedErrors = ajvErrors ? ajvErrors.map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n })) : [];\n\n return {\n isValid,\n errors: formattedErrors\n };\n}\n\n// --- Full Validation Orchestrator ---\n/**\n * Performs a complete validation of an AgentRecord, including schema,\n * checksum, and signature checks.\n * @param record The full GitGovRecord containing the agent payload.\n * @param getActorPublicKey A function to retrieve the public key for a given actor ID.\n */\nexport async function validateFullAgentRecord(\n record: GitGovRecord & { payload: AgentRecord },\n getActorPublicKey: (keyId: string) => Promise<string | null>\n): Promise<void> {\n // 1. Schema Validation\n const [isValidSchema, errors] = validateAgentRecordSchema(record.payload);\n if (!isValidSchema) {\n const formattedErrors = (errors || []).map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n }));\n throw new DetailedValidationError('AgentRecord', formattedErrors);\n }\n\n // 2. Embedded Metadata Validation (header + wrapper)\n await validateFullEmbeddedMetadataRecord(record, getActorPublicKey);\n}\n\n/**\n * Validates that an AgentRecord has a valid relationship with its corresponding ActorRecord,\n * including succession chain resolution for key rotation scenarios.\n * \n * @param agentRecord The AgentRecord to validate\n * @param getEffectiveActor Function to get the effective ActorRecord (with succession resolution)\n */\nexport async function validateAgentActorRelationship(\n agentRecord: AgentRecord,\n getEffectiveActor: (agentId: string) => Promise<ActorRecord | null>\n): Promise<void> {\n const effectiveActor = await getEffectiveActor(agentRecord.id);\n\n if (!effectiveActor) {\n throw new SchemaValidationError(\n `No active ActorRecord found for AgentRecord ${agentRecord.id}. AgentRecord requires corresponding ActorRecord.`\n );\n }\n\n if (effectiveActor.type !== 'agent') {\n throw new SchemaValidationError(\n `ActorRecord ${effectiveActor.id} must be of type 'agent' to support AgentRecord ${agentRecord.id}.`\n );\n }\n\n if (effectiveActor.status !== 'active') {\n throw new SchemaValidationError(\n `ActorRecord succession chain for ${agentRecord.id} does not resolve to an active actor. Current effective actor: ${effectiveActor.id} (status: ${effectiveActor.status}).`\n );\n }\n}\n","import type { AgentRecord } from \"../types\";\nimport { validateAgentRecordDetailed } from \"../validation/agent_validator\";\nimport { DetailedValidationError } from \"../validation/common\";\n\n/**\n * Creates a new, fully-formed AgentRecord with validation.\n */\nexport async function createAgentRecord(\n payload: Partial<AgentRecord>\n): Promise<AgentRecord> {\n // Build agent with defaults for optional fields\n const agent: AgentRecord = {\n id: payload.id || '',\n engine: payload.engine || { type: 'local' as const },\n status: payload.status || 'active',\n triggers: payload.triggers || [],\n knowledge_dependencies: payload.knowledge_dependencies || [],\n prompt_engine_requirements: payload.prompt_engine_requirements || {},\n ...payload,\n } as AgentRecord;\n\n // Use validator to check complete schema with detailed errors\n const validation = validateAgentRecordDetailed(agent);\n if (!validation.isValid) {\n throw new DetailedValidationError('AgentRecord', validation.errors);\n }\n\n return agent;\n}\n","import { createFeedbackRecord } from '../../factories/feedback_factory';\nimport { RecordStore } from '../../store';\nimport { IdentityAdapter } from '../identity_adapter';\nimport type { FeedbackRecord } from '../../types';\nimport type { IEventStream, FeedbackCreatedEvent } from '../../event_bus';\nimport type { GitGovRecord } from '../../types';\n\n/**\n * FeedbackAdapter Dependencies - Facade + Dependency Injection Pattern\n */\nexport interface FeedbackAdapterDependencies {\n // Data Layer (Protocols)\n feedbackStore: RecordStore<FeedbackRecord>;\n\n // Infrastructure Layer\n identity: IdentityAdapter;\n eventBus: IEventStream; // For emitting events\n}\n\n/**\n * FeedbackAdapter Interface - The Communication Facilitator\n */\n/**\n * FeedbackThread structure for conversation trees\n */\nexport interface FeedbackThread {\n feedback: FeedbackRecord;\n responses: FeedbackThread[];\n}\n\nexport interface IFeedbackAdapter {\n /**\n * Creates a new FeedbackRecord.\n */\n create(payload: Partial<FeedbackRecord>, actorId: string): Promise<FeedbackRecord>;\n\n /**\n * Helper: Creates a new feedback that \"resolves\" another (immutable pattern).\n */\n resolve(feedbackId: string, actorId: string, content?: string): Promise<FeedbackRecord>;\n\n /**\n * Gets a specific FeedbackRecord by its ID.\n */\n getFeedback(feedbackId: string): Promise<FeedbackRecord | null>;\n\n /**\n * Gets all FeedbackRecords for a specific entity.\n */\n getFeedbackByEntity(entityId: string): Promise<FeedbackRecord[]>;\n\n /**\n * Gets all FeedbackRecords in the system.\n */\n getAllFeedback(): Promise<FeedbackRecord[]>;\n\n /**\n * Builds the complete conversation tree for a feedback.\n */\n getFeedbackThread(feedbackId: string, maxDepth?: number): Promise<FeedbackThread>;\n}\n\n/**\n * FeedbackAdapter - The Communication Facilitator\n * \n * Implements Facade + Dependency Injection Pattern for testeable and configurable orchestration.\n * Acts as Mediator between structured communication and data stores.\n */\nexport class FeedbackAdapter implements IFeedbackAdapter {\n private feedbackStore: RecordStore<FeedbackRecord>;\n private identity: IdentityAdapter;\n private eventBus: IEventStream;\n\n constructor(dependencies: FeedbackAdapterDependencies) {\n this.feedbackStore = dependencies.feedbackStore;\n this.identity = dependencies.identity;\n this.eventBus = dependencies.eventBus;\n }\n\n /**\n * [EARS-1, EARS-2, EARS-3, EARS-4, EARS-5, EARS-6, EARS-7, EARS-8] Creates a new FeedbackRecord for structured communication between actors.\n * \n * Description: Creates a new FeedbackRecord for structured communication between actors.\n * Implementation: Builds record with status: \"open\", signs with actorId, persists and emits event.\n * Usage: Invoked by `gitgov feedback create` to create feedback, assignments, blocks, responses.\n * Returns: Complete and signed FeedbackRecord.\n */\n async create(payload: Partial<FeedbackRecord>, actorId: string): Promise<FeedbackRecord> {\n // Input validation - Type-safe approach\n const payloadWithEntityId = payload as Partial<FeedbackRecord> & { entityId?: string; entityType?: string };\n if (!payloadWithEntityId.entityId) {\n throw new Error('RecordNotFoundError: entityId is required');\n }\n\n if (payloadWithEntityId.entityType && !['task', 'execution', 'changelog', 'feedback', 'cycle'].includes(payloadWithEntityId.entityType)) {\n throw new Error('InvalidEntityTypeError: entityType must be task, execution, changelog, feedback, or cycle');\n }\n\n // Validate no duplicate assignments: a task can be assigned to multiple actors,\n // but the same task cannot have multiple open assignments to the same actor\n // EARS-36: In immutable pattern, assignments stay 'open' forever. Check for resolution via resolvesFeedbackId\n if (payload.type === 'assignment' && payload.assignee) {\n const existingFeedbacks = await this.getFeedbackByEntity(payloadWithEntityId.entityId);\n\n // Find all open assignments for this actor\n const openAssignments = existingFeedbacks.filter(feedback =>\n feedback.type === 'assignment' &&\n feedback.assignee === payload.assignee &&\n feedback.status === 'open'\n );\n\n if (openAssignments.length > 0) {\n // For each open assignment, check if it has been resolved\n // Resolution feedbacks have entityType='feedback' and resolvesFeedbackId pointing to the assignment\n // They are NOT in the same entity list, so we need to search all feedbacks\n const allFeedbacks = await this.getAllFeedback();\n\n for (const assignment of openAssignments) {\n const hasResolution = allFeedbacks.some(feedback =>\n feedback.entityType === 'feedback' &&\n feedback.resolvesFeedbackId === assignment.id &&\n feedback.status === 'resolved'\n );\n\n if (!hasResolution) {\n // Open assignment WITHOUT resolution = duplicate\n throw new Error(`DuplicateAssignmentError: Task ${payloadWithEntityId.entityId} is already assigned to ${payload.assignee} (feedback: ${assignment.id})`);\n }\n }\n }\n }\n\n // Set default status to \"open\" (can be overridden by payload.status)\n const enrichedPayload = {\n status: 'open' as const,\n ...payload // Allows payload.status to override default\n };\n\n try {\n // 1. Build the record with factory\n const validatedPayload = await createFeedbackRecord(enrichedPayload);\n\n // 2. Create unsigned record structure\n const unsignedRecord: GitGovRecord & { payload: FeedbackRecord } = {\n header: {\n version: '1.0',\n type: 'feedback',\n payloadChecksum: 'will-be-calculated-by-signRecord',\n signatures: [{\n keyId: actorId,\n role: 'author',\n notes: 'Feedback created',\n signature: 'placeholder',\n timestamp: Date.now()\n }]\n },\n payload: validatedPayload,\n };\n\n // 3. Sign the record\n const signedRecord = await this.identity.signRecord(unsignedRecord, actorId, 'author');\n\n // 4. Persist the record\n await this.feedbackStore.write(signedRecord as GitGovRecord & { payload: FeedbackRecord });\n\n // 5. Emit event - responsibility ends here\n this.eventBus.publish({\n type: 'feedback.created',\n timestamp: Date.now(),\n source: 'feedback_adapter',\n payload: {\n feedbackId: validatedPayload.id,\n entityType: validatedPayload.entityType,\n entityId: validatedPayload.entityId,\n type: validatedPayload.type,\n status: validatedPayload.status,\n content: validatedPayload.content,\n triggeredBy: actorId,\n assignee: validatedPayload.assignee,\n resolvesFeedbackId: validatedPayload.resolvesFeedbackId\n },\n } as FeedbackCreatedEvent);\n\n return validatedPayload;\n } catch (error) {\n if (error instanceof Error && error.message.includes('DetailedValidationError')) {\n throw error;\n }\n throw error;\n }\n }\n\n /**\n * [EARS-9, EARS-10, EARS-11, EARS-12] Helper: Creates a new feedback that \"resolves\" another (immutable).\n * \n * Description: Helper method that creates a new feedback documenting resolution of another feedback.\n * Implementation: Verifies original exists, then delegates to create() with immutable pattern.\n * Usage: Ergonomic helper for common case. For advanced cases (wontfix, approval), use create() directly.\n * Returns: New FeedbackRecord that points to the original with resolvesFeedbackId.\n */\n async resolve(feedbackId: string, actorId: string, content?: string): Promise<FeedbackRecord> {\n // 1. Verify the original feedback exists\n const originalFeedback = await this.getFeedback(feedbackId);\n if (!originalFeedback) {\n throw new Error(`RecordNotFoundError: Feedback not found: ${feedbackId}`);\n }\n\n // 2. Generate default content if not provided\n const resolveContent = content || `Feedback resolved by ${actorId}`;\n\n // 3. Create NEW feedback that points to the original (immutable pattern)\n // This maintains full immutability - original feedback is never modified\n return await this.create({\n entityType: 'feedback',\n entityId: feedbackId,\n type: 'clarification',\n status: 'resolved',\n content: resolveContent,\n resolvesFeedbackId: feedbackId\n }, actorId);\n }\n\n /**\n * [EARS-13, EARS-14] Gets a specific FeedbackRecord by its ID for query.\n * \n * Description: Gets a specific FeedbackRecord by its ID for query.\n * Implementation: Direct read from record store without modifications.\n * Usage: Invoked by `gitgov feedback show` to display feedback details.\n * Returns: FeedbackRecord found or null if it doesn't exist.\n */\n async getFeedback(feedbackId: string): Promise<FeedbackRecord | null> {\n const record = await this.feedbackStore.read(feedbackId);\n return record ? record.payload : null;\n }\n\n /**\n * [EARS-15] Gets all FeedbackRecords associated with a specific entity.\n * \n * Description: Gets all FeedbackRecords associated with a specific entity.\n * Implementation: Reads all records and filters by matching entityId.\n * Usage: Invoked by `gitgov feedback list` to display feedback for a task/cycle/execution.\n * Returns: Array of FeedbackRecords filtered for the entity.\n */\n async getFeedbackByEntity(entityId: string): Promise<FeedbackRecord[]> {\n const ids = await this.feedbackStore.list();\n const feedbacks: FeedbackRecord[] = [];\n\n for (const id of ids) {\n const record = await this.feedbackStore.read(id);\n if (record && record.payload.entityId === entityId) {\n feedbacks.push(record.payload);\n }\n }\n\n return feedbacks;\n }\n\n /**\n * [EARS-16] Gets all FeedbackRecords in the system for indexation.\n * \n * Description: Gets all FeedbackRecords in the system for complete indexation.\n * Implementation: Complete read from record store without filters.\n * Usage: Invoked by `gitgov feedback list` and by MetricsAdapter for calculations.\n * Returns: Complete array of all FeedbackRecords.\n */\n async getAllFeedback(): Promise<FeedbackRecord[]> {\n const ids = await this.feedbackStore.list();\n const feedbacks: FeedbackRecord[] = [];\n\n for (const id of ids) {\n const record = await this.feedbackStore.read(id);\n if (record) {\n feedbacks.push(record.payload);\n }\n }\n\n return feedbacks;\n }\n\n /**\n * [EARS-17, EARS-18, EARS-19, EARS-20] Builds the complete conversation tree for a feedback.\n * \n * Description: Recursively constructs the conversation tree for a feedback.\n * Implementation: Reads root feedback, finds all responses, builds tree recursively until maxDepth.\n * Usage: Invoked by `gitgov feedback thread` and `gitgov feedback show --thread`.\n * Returns: FeedbackThread object with tree structure.\n */\n async getFeedbackThread(feedbackId: string, maxDepth: number = Infinity): Promise<FeedbackThread> {\n return await this.buildThread(feedbackId, maxDepth, 0);\n }\n\n /**\n * Private helper: Recursively builds conversation thread.\n */\n private async buildThread(\n feedbackId: string,\n maxDepth: number,\n currentDepth: number\n ): Promise<FeedbackThread> {\n // 1. Depth limit reached\n if (currentDepth >= maxDepth) {\n throw new Error(`Max depth ${maxDepth} reached for feedback thread`);\n }\n\n // 2. Get root feedback\n const feedback = await this.getFeedback(feedbackId);\n if (!feedback) {\n throw new Error(`RecordNotFoundError: Feedback not found: ${feedbackId}`);\n }\n\n // 3. Find all responses (feedbacks pointing to this one)\n const allFeedbacks = await this.getAllFeedback();\n const responses = allFeedbacks.filter(\n f => f.entityType === 'feedback' && f.entityId === feedbackId\n );\n\n // 4. Build tree recursively\n const responseThreads: FeedbackThread[] = [];\n for (const response of responses) {\n try {\n const thread = await this.buildThread(response.id, maxDepth, currentDepth + 1);\n responseThreads.push(thread);\n } catch (error) {\n // If depth limit reached, just skip this branch\n if (error instanceof Error && error.message.includes('Max depth')) {\n continue;\n }\n throw error;\n }\n }\n\n return {\n feedback,\n responses: responseThreads\n };\n }\n}\n","import type { ValidateFunction, ErrorObject } from \"ajv\";\nimport type { FeedbackRecord } from '../types';\nimport type { GitGovRecord } from '../types';\nimport type { ValidationResult } from './errors';\nimport { SchemaValidationCache } from '../schemas/schema_cache';\nimport { DetailedValidationError } from './common';\nimport { validateFullEmbeddedMetadataRecord } from './embedded_metadata_validator';\nimport { Schemas } from '../schemas';\n\n/**\n * Schema-based validation for FeedbackRecord payload\n */\nexport function validateFeedbackRecordSchema(\n data: unknown\n): [boolean, ValidateFunction[\"errors\"]] {\n const validator = SchemaValidationCache.getValidatorFromSchema(Schemas.FeedbackRecord);\n const isValid = validator(data);\n\n return [isValid, validator.errors];\n}\n\n/**\n * Type guard to check if data is a valid FeedbackRecord\n */\nexport function isFeedbackRecord(data: unknown): data is FeedbackRecord {\n const [isValid] = validateFeedbackRecordSchema(data);\n return isValid;\n}\n\n/**\n * Detailed validation with field-level error reporting\n */\nexport function validateFeedbackRecordDetailed(data: unknown): ValidationResult {\n const [isValid, errors] = validateFeedbackRecordSchema(data);\n\n if (!isValid && errors) {\n const formattedErrors = errors.map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n }));\n\n return {\n isValid: false,\n errors: formattedErrors\n };\n }\n\n return {\n isValid: true,\n errors: []\n };\n}\n\n/**\n * Full validation including checksum and signature verification\n */\nexport async function validateFullFeedbackRecord(\n record: GitGovRecord & { payload: FeedbackRecord },\n getPublicKey: (keyId: string) => Promise<string>\n): Promise<void> {\n // 1. Validate payload schema\n const [isValid, errors] = validateFeedbackRecordSchema(record.payload);\n if (!isValid) {\n const formattedErrors = (errors || []).map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n }));\n throw new DetailedValidationError('FeedbackRecord', formattedErrors);\n }\n\n // 2. Embedded Metadata Validation (header + wrapper)\n await validateFullEmbeddedMetadataRecord(record, getPublicKey);\n}\n","import type { FeedbackRecord } from '../types';\nimport { generateFeedbackId } from '../utils/id_generator';\nimport { validateFeedbackRecordDetailed } from '../validation/feedback_validator';\nimport { DetailedValidationError } from '../validation/common';\n\n/**\n * Creates a complete FeedbackRecord with validation\n * \n * @param payload - Partial FeedbackRecord payload\n * @returns Promise<FeedbackRecord> - The validated FeedbackRecord\n */\nexport async function createFeedbackRecord(payload: Partial<FeedbackRecord>): Promise<FeedbackRecord> {\n const timestamp = Math.floor(Date.now() / 1000);\n\n const feedback: FeedbackRecord = {\n id: payload.id || generateFeedbackId(payload.content || 'feedback', timestamp),\n entityType: payload.entityType || 'task',\n entityId: payload.entityId || '',\n type: payload.type || 'question',\n status: payload.status || (payload.type === 'assignment' ? 'resolved' : 'open'),\n content: payload.content || '',\n assignee: payload.assignee,\n resolvesFeedbackId: payload.resolvesFeedbackId,\n ...payload,\n } as FeedbackRecord;\n\n // Validate the complete feedback record\n const validation = validateFeedbackRecordDetailed(feedback);\n if (!validation.isValid) {\n throw new DetailedValidationError('FeedbackRecord', validation.errors);\n }\n\n return feedback;\n}\n\n","import { createExecutionRecord } from '../../factories/execution_factory';\nimport { RecordStore } from '../../store';\nimport { IdentityAdapter } from '../identity_adapter';\nimport type { ExecutionRecord } from '../../types';\nimport type { TaskRecord } from '../../types';\nimport type { IEventStream, ExecutionCreatedEvent } from '../../event_bus';\nimport type { GitGovRecord } from '../../types';\n\n/**\n * ExecutionAdapter Dependencies - Facade + Dependency Injection Pattern\n */\nexport interface ExecutionAdapterDependencies {\n // Data Layer (Protocols)\n executionStore: RecordStore<ExecutionRecord>;\n\n // Infrastructure Layer\n identity: IdentityAdapter;\n eventBus: IEventStream; // For emitting events\n\n // Optional: Task validation (graceful degradation)\n taskStore?: RecordStore<TaskRecord>;\n}\n\n/**\n * ExecutionAdapter Interface - The Chronicler of the System\n */\nexport interface IExecutionAdapter {\n /**\n * Records a new execution event.\n */\n create(payload: Partial<ExecutionRecord>, actorId: string): Promise<ExecutionRecord>;\n\n /**\n * Gets a specific ExecutionRecord by its ID.\n */\n getExecution(executionId: string): Promise<ExecutionRecord | null>;\n\n /**\n * Gets all ExecutionRecords for a specific Task.\n */\n getExecutionsByTask(taskId: string): Promise<ExecutionRecord[]>;\n\n /**\n * Gets all ExecutionRecords in the system.\n */\n getAllExecutions(): Promise<ExecutionRecord[]>;\n}\n\n/**\n * ExecutionAdapter - The Chronicler of the System\n * \n * Implements Facade + Dependency Injection Pattern for testeable and configurable orchestration.\n * Acts as Mediator between execution logging and data stores.\n */\nexport class ExecutionAdapter implements IExecutionAdapter {\n private executionStore: RecordStore<ExecutionRecord>;\n private identity: IdentityAdapter;\n private eventBus: IEventStream;\n private taskStore: RecordStore<TaskRecord> | undefined;\n\n constructor(dependencies: ExecutionAdapterDependencies) {\n this.executionStore = dependencies.executionStore;\n this.identity = dependencies.identity;\n this.eventBus = dependencies.eventBus;\n this.taskStore = dependencies.taskStore; // Graceful degradation\n }\n\n /**\n * [EARS-1] Records a new execution event to create an immutable audit log.\n * \n * Description: Records a new execution event to create an immutable audit log.\n * Implementation: Builds record with factory, signs with actorId, persists and emits event.\n * Usage: Invoked by `gitgov exec add` to register work done by actors/agents.\n * Returns: Complete and signed ExecutionRecord.\n */\n async create(payload: Partial<ExecutionRecord>, actorId: string): Promise<ExecutionRecord> {\n // Optional: Validate taskId exists (graceful degradation)\n if (this.taskStore && payload.taskId) {\n const taskExists = await this.taskStore.read(payload.taskId);\n if (!taskExists) {\n throw new Error(`RecordNotFoundError: Task not found: ${payload.taskId}`);\n }\n }\n\n try {\n // 1. Build the record with factory (factory validates all required fields)\n const validatedPayload = await createExecutionRecord(payload);\n\n // 2. Create unsigned record structure\n const unsignedRecord: GitGovRecord & { payload: ExecutionRecord } = {\n header: {\n version: '1.0',\n type: 'execution',\n payloadChecksum: 'will-be-calculated-by-signRecord',\n signatures: [{\n keyId: actorId,\n role: 'author',\n notes: 'Execution recorded',\n signature: 'placeholder',\n timestamp: Date.now()\n }]\n },\n payload: validatedPayload,\n };\n\n // 3. Sign the record\n const signedRecord = await this.identity.signRecord(unsignedRecord, actorId, 'author');\n\n // 4. Persist the record\n await this.executionStore.write(signedRecord as GitGovRecord & { payload: ExecutionRecord });\n\n // 5. Emit event - responsibility ends here\n this.eventBus.publish({\n type: 'execution.created',\n timestamp: Date.now(),\n source: 'execution_adapter',\n payload: {\n executionId: validatedPayload.id,\n taskId: validatedPayload.taskId,\n actorId,\n isFirstExecution: await this.isFirstExecutionForTask(validatedPayload.taskId)\n },\n } as ExecutionCreatedEvent);\n\n return validatedPayload;\n } catch (error) {\n // Factory will throw DetailedValidationError for schema violations\n // Re-throw as-is to preserve error type and details\n throw error;\n }\n }\n\n /**\n * [EARS-4] Gets a specific ExecutionRecord by its ID for query.\n * \n * Description: Gets a specific ExecutionRecord by its ID for query.\n * Implementation: Direct read from record store without modifications.\n * Usage: Invoked by `gitgov exec show` to display execution details.\n * Returns: ExecutionRecord found or null if it doesn't exist.\n */\n async getExecution(executionId: string): Promise<ExecutionRecord | null> {\n const record = await this.executionStore.read(executionId);\n return record ? record.payload : null;\n }\n\n /**\n * [EARS-6] Gets all ExecutionRecords associated with a specific Task.\n * \n * Description: Gets all ExecutionRecords associated with a specific Task.\n * Implementation: Reads all records and filters by matching taskId.\n * Usage: Invoked by `gitgov exec list` and MetricsAdapter for staleness calculations.\n * Returns: Array of ExecutionRecords filtered for the task.\n */\n async getExecutionsByTask(taskId: string): Promise<ExecutionRecord[]> {\n const ids = await this.executionStore.list();\n const executions: ExecutionRecord[] = [];\n\n for (const id of ids) {\n const record = await this.executionStore.read(id);\n if (record && record.payload.taskId === taskId) {\n executions.push(record.payload);\n }\n }\n\n return executions;\n }\n\n /**\n * [EARS-7] Gets all ExecutionRecords in the system for indexation.\n * \n * Description: Gets all ExecutionRecords in the system for complete indexation.\n * Implementation: Complete read from record store without filters.\n * Usage: Invoked by `gitgov exec list --all` and MetricsAdapter for general calculations.\n * Returns: Complete array of all ExecutionRecords.\n */\n async getAllExecutions(): Promise<ExecutionRecord[]> {\n const ids = await this.executionStore.list();\n const executions: ExecutionRecord[] = [];\n\n for (const id of ids) {\n const record = await this.executionStore.read(id);\n if (record) {\n executions.push(record.payload);\n }\n }\n\n return executions;\n }\n\n /**\n * Helper method to determine if this is the first execution for a task\n * Used for BacklogAdapter.handleExecutionCreated logic\n */\n private async isFirstExecutionForTask(taskId: string): Promise<boolean> {\n const executions = await this.getExecutionsByTask(taskId);\n return executions.length === 1; // Including the one we just created\n }\n}\n","import type { ValidateFunction, ErrorObject } from \"ajv\";\nimport type { ExecutionRecord } from '../types';\nimport type { GitGovRecord } from '../types';\nimport type { ValidationResult } from './errors';\nimport { SchemaValidationCache } from '../schemas/schema_cache';\nimport { DetailedValidationError } from './common';\nimport { validateFullEmbeddedMetadataRecord } from './embedded_metadata_validator';\nimport { Schemas } from '../schemas';\n\n/**\n * Schema-based validation for ExecutionRecord payload\n */\nexport function validateExecutionRecordSchema(\n data: unknown\n): [boolean, ValidateFunction[\"errors\"]] {\n const validator = SchemaValidationCache.getValidatorFromSchema(Schemas.ExecutionRecord);\n const isValid = validator(data);\n\n return [isValid, validator.errors];\n}\n\n/**\n * Type guard to check if data is a valid ExecutionRecord\n */\nexport function isExecutionRecord(data: unknown): data is ExecutionRecord {\n const [isValid] = validateExecutionRecordSchema(data);\n return isValid;\n}\n\n/**\n * Detailed validation with field-level error reporting\n */\nexport function validateExecutionRecordDetailed(data: unknown): ValidationResult {\n const [isValid, errors] = validateExecutionRecordSchema(data);\n\n if (!isValid && errors) {\n const formattedErrors = errors.map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n }));\n\n return {\n isValid: false,\n errors: formattedErrors\n };\n }\n\n return {\n isValid: true,\n errors: []\n };\n}\n\n/**\n * Full validation including checksum and signature verification\n */\nexport async function validateFullExecutionRecord(\n record: GitGovRecord & { payload: ExecutionRecord },\n getPublicKey: (keyId: string) => Promise<string>\n): Promise<void> {\n // 1. Validate payload schema\n const [isValid, errors] = validateExecutionRecordSchema(record.payload);\n if (!isValid) {\n const formattedErrors = (errors || []).map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n }));\n throw new DetailedValidationError('ExecutionRecord', formattedErrors);\n }\n\n // 2. Embedded Metadata Validation (header + wrapper)\n await validateFullEmbeddedMetadataRecord(record, getPublicKey);\n}\n","import type { ExecutionRecord } from '../types';\nimport { generateExecutionId } from '../utils/id_generator';\nimport { validateExecutionRecordDetailed } from '../validation/execution_validator';\nimport { DetailedValidationError } from '../validation/common';\n\n/**\n * Creates a complete ExecutionRecord with validation\n * \n * @param payload - Partial ExecutionRecord payload\n * @returns Promise<ExecutionRecord> - The validated ExecutionRecord\n */\nexport async function createExecutionRecord(payload: Partial<ExecutionRecord>): Promise<ExecutionRecord> {\n const timestamp = Math.floor(Date.now() / 1000);\n\n const execution: ExecutionRecord = {\n id: payload.id || generateExecutionId(payload.title || 'execution', timestamp),\n taskId: payload.taskId || '',\n result: payload.result || '',\n type: payload.type,\n title: payload.title,\n notes: payload.notes,\n references: payload.references,\n ...payload,\n } as ExecutionRecord;\n\n // Validate the complete execution record\n const validation = validateExecutionRecordDetailed(execution);\n if (!validation.isValid) {\n throw new DetailedValidationError('ExecutionRecord', validation.errors);\n }\n\n return execution;\n}\n\n","import { createChangelogRecord } from '../../factories/changelog_factory';\nimport { RecordStore } from '../../store';\nimport { IdentityAdapter } from '../identity_adapter';\nimport { generateChangelogId } from '../../utils/id_generator';\nimport type { ChangelogRecord } from '../../types';\nimport type { TaskRecord } from '../../types';\nimport type { CycleRecord } from '../../types';\nimport type { IEventStream, ChangelogCreatedEvent } from '../../event_bus';\nimport type { GitGovRecord } from '../../types';\n\n/**\n * Options for filtering and sorting changelog lists\n */\nexport interface ChangelogListOptions {\n tags?: string[]; // Filter by tags (changelogs with ANY of these tags)\n version?: string; // Filter by exact version\n limit?: number; // Limit number of results\n sortBy?: 'completedAt' | 'title'; // Sort field\n sortOrder?: 'asc' | 'desc'; // Sort direction\n}\n\n/**\n * ChangelogAdapter Dependencies - Facade + Dependency Injection Pattern\n */\nexport interface ChangelogAdapterDependencies {\n changelogStore: RecordStore<ChangelogRecord>;\n identity: IdentityAdapter;\n eventBus: IEventStream; // For emitting events\n // Optional: Multi-entity validation (graceful degradation)\n taskStore?: RecordStore<TaskRecord>; // For validating task entities\n cycleStore?: RecordStore<CycleRecord>; // For validating cycle entities\n}\n\n/**\n * ChangelogAdapter Interface - Release Notes & Deliverables Historian\n */\nexport interface IChangelogAdapter {\n /**\n * Records a deliverable/release note aggregating multiple tasks.\n */\n create(payload: Partial<ChangelogRecord>, actorId: string): Promise<ChangelogRecord>;\n\n /**\n * Gets a specific ChangelogRecord by its ID.\n */\n getChangelog(changelogId: string): Promise<ChangelogRecord | null>;\n\n /**\n * Gets all ChangelogRecords for a specific task.\n */\n getChangelogsByTask(taskId: string): Promise<ChangelogRecord[]>;\n\n /**\n * Gets all ChangelogRecords in the system with optional filtering.\n */\n getAllChangelogs(options?: ChangelogListOptions): Promise<ChangelogRecord[]>;\n\n /**\n * Gets recent ChangelogRecords ordered by completedAt.\n */\n getRecentChangelogs(limit: number): Promise<ChangelogRecord[]>;\n}\n\n/**\n * ChangelogAdapter - Release Notes & Deliverables Historian\n * \n * Protocol v2: Aggregates N tasks into 1 release note/deliverable.\n * Focus: Executive communication of delivered value.\n */\nexport class ChangelogAdapter implements IChangelogAdapter {\n private changelogStore: RecordStore<ChangelogRecord>;\n private identity: IdentityAdapter;\n private eventBus: IEventStream;\n private taskStore: RecordStore<TaskRecord> | undefined;\n private cycleStore: RecordStore<CycleRecord> | undefined;\n\n constructor(dependencies: ChangelogAdapterDependencies) {\n this.changelogStore = dependencies.changelogStore;\n this.identity = dependencies.identity;\n this.eventBus = dependencies.eventBus;\n this.taskStore = dependencies.taskStore; // Graceful degradation\n this.cycleStore = dependencies.cycleStore; // Graceful degradation\n }\n\n /**\n * [EARS-1] Records a deliverable/release note.\n * \n * Description: Aggregates multiple tasks into a single deliverable/release note.\n * Implementation: Validates required fields, builds record with factory, signs, persists and emits event.\n * Usage: Invoked by `gitgov changelog add` to document deliverables.\n * Returns: Complete and signed ChangelogRecord.\n */\n async create(payload: Partial<ChangelogRecord>, actorId: string): Promise<ChangelogRecord> {\n // Input validation\n if (!payload.title || payload.title.length < 10) {\n throw new Error('DetailedValidationError: title is required and must be at least 10 characters');\n }\n\n if (!payload.description || payload.description.length < 20) {\n throw new Error('DetailedValidationError: description is required and must be at least 20 characters');\n }\n\n if (!payload.relatedTasks || payload.relatedTasks.length === 0) {\n throw new Error('DetailedValidationError: relatedTasks is required and must contain at least one task ID');\n }\n\n // Optional: Validate that related tasks exist (graceful degradation)\n if (this.taskStore && payload.relatedTasks) {\n for (const taskId of payload.relatedTasks) {\n const taskExists = await this.taskStore.read(taskId);\n if (!taskExists) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n }\n }\n\n // Optional: Validate that related cycles exist (graceful degradation)\n if (this.cycleStore && payload.relatedCycles) {\n for (const cycleId of payload.relatedCycles) {\n const cycleExists = await this.cycleStore.read(cycleId);\n if (!cycleExists) {\n throw new Error(`RecordNotFoundError: Cycle not found: ${cycleId}`);\n }\n }\n }\n\n try {\n // 1. Generate ID if not provided (EARS-14)\n const timestamp = payload.completedAt || Math.floor(Date.now() / 1000);\n if (!payload.id) {\n payload.id = generateChangelogId(payload.title!, timestamp);\n }\n\n // 2. Build the record with factory\n const validatedPayload = await createChangelogRecord(payload);\n\n // 3. Create unsigned record structure\n const unsignedRecord: GitGovRecord & { payload: ChangelogRecord } = {\n header: {\n version: '1.0',\n type: 'changelog',\n payloadChecksum: 'will-be-calculated-by-signRecord',\n signatures: [{\n keyId: actorId,\n role: 'author',\n notes: 'Changelog entry created',\n signature: 'placeholder',\n timestamp: Date.now()\n }]\n },\n payload: validatedPayload,\n };\n\n // 3. Sign the record\n const signedRecord = await this.identity.signRecord(unsignedRecord, actorId, 'author');\n\n // 4. Persist the record\n await this.changelogStore.write(signedRecord as GitGovRecord & { payload: ChangelogRecord });\n\n // 5. Emit event\n this.eventBus.publish({\n type: 'changelog.created',\n timestamp: Date.now(),\n source: 'changelog_adapter',\n payload: {\n changelogId: validatedPayload.id,\n relatedTasks: validatedPayload.relatedTasks,\n title: validatedPayload.title,\n version: validatedPayload.version\n },\n } as ChangelogCreatedEvent);\n\n return validatedPayload;\n } catch (error) {\n if (error instanceof Error && error.message.includes('DetailedValidationError')) {\n throw error;\n }\n throw error;\n }\n }\n\n /**\n * [EARS-9] Gets a specific ChangelogRecord by its ID.\n */\n async getChangelog(changelogId: string): Promise<ChangelogRecord | null> {\n const record = await this.changelogStore.read(changelogId);\n return record ? record.payload : null;\n }\n\n /**\n * [EARS-11] Gets all ChangelogRecords that include a specific task.\n */\n async getChangelogsByTask(taskId: string): Promise<ChangelogRecord[]> {\n const ids = await this.changelogStore.list();\n const changelogs: ChangelogRecord[] = [];\n\n for (const id of ids) {\n const record = await this.changelogStore.read(id);\n if (record && record.payload.relatedTasks.includes(taskId)) {\n changelogs.push(record.payload);\n }\n }\n\n return changelogs;\n }\n\n /**\n * [EARS-11, EARS-12, EARS-13] Gets all ChangelogRecords with optional filtering and sorting.\n */\n async getAllChangelogs(options?: ChangelogListOptions): Promise<ChangelogRecord[]> {\n const ids = await this.changelogStore.list();\n let changelogs: ChangelogRecord[] = [];\n\n // Read all changelogs\n for (const id of ids) {\n const record = await this.changelogStore.read(id);\n if (record) {\n changelogs.push(record.payload);\n }\n }\n\n // [EARS-12] Filter by tags if provided\n if (options?.tags && options.tags.length > 0) {\n changelogs = changelogs.filter(changelog => {\n if (!changelog.tags) return false;\n // Return true if changelog has ANY of the requested tags\n return options.tags!.some(tag => changelog.tags!.includes(tag));\n });\n }\n\n // Filter by version if provided\n if (options?.version) {\n changelogs = changelogs.filter(changelog => changelog.version === options.version);\n }\n\n // [EARS-11] Sort by specified field (default: completedAt desc)\n const sortBy = options?.sortBy || 'completedAt';\n const sortOrder = options?.sortOrder || 'desc';\n\n changelogs.sort((a, b) => {\n let compareValue = 0;\n\n if (sortBy === 'completedAt') {\n compareValue = a.completedAt - b.completedAt;\n } else if (sortBy === 'title') {\n compareValue = a.title.localeCompare(b.title);\n }\n\n return sortOrder === 'asc' ? compareValue : -compareValue;\n });\n\n // [EARS-13] Apply limit if provided\n if (options?.limit && options.limit > 0) {\n changelogs = changelogs.slice(0, options.limit);\n }\n\n return changelogs;\n }\n\n /**\n * [EARS-13] Gets recent ChangelogRecords ordered by completedAt.\n */\n async getRecentChangelogs(limit: number): Promise<ChangelogRecord[]> {\n const allChangelogs = await this.getAllChangelogs();\n\n // Sort by completedAt descending (most recent first)\n const sortedChangelogs = allChangelogs.sort((a, b) => b.completedAt - a.completedAt);\n\n // Apply limit\n return sortedChangelogs.slice(0, limit);\n }\n\n /**\n * Legacy method for backwards compatibility - maps to getChangelogsByTask\n * @deprecated Use getChangelogsByTask instead\n */\n async getChangelogsByEntity(entityId: string, _entityType?: string): Promise<ChangelogRecord[]> {\n return this.getChangelogsByTask(entityId);\n }\n}\n","import type { ValidateFunction, ErrorObject } from \"ajv\";\nimport type { ChangelogRecord } from '../types';\nimport type { GitGovRecord } from '../types';\nimport type { ValidationResult } from './errors';\nimport { SchemaValidationCache } from '../schemas/schema_cache';\nimport { DetailedValidationError } from './common';\nimport { validateFullEmbeddedMetadataRecord } from './embedded_metadata_validator';\nimport { Schemas } from '../schemas';\n\n/**\n * Schema-based validation for ChangelogRecord payload\n */\nexport function validateChangelogRecordSchema(\n data: unknown\n): [boolean, ValidateFunction[\"errors\"]] {\n const validator = SchemaValidationCache.getValidatorFromSchema(Schemas.ChangelogRecord);\n const isValid = validator(data);\n\n return [isValid, validator.errors];\n}\n\n/**\n * Type guard to check if data is a valid ChangelogRecord\n */\nexport function isChangelogRecord(data: unknown): data is ChangelogRecord {\n const [isValid] = validateChangelogRecordSchema(data);\n return isValid;\n}\n\n/**\n * Detailed validation with field-level error reporting\n */\nexport function validateChangelogRecordDetailed(data: unknown): ValidationResult {\n const [isValid, errors] = validateChangelogRecordSchema(data);\n\n if (!isValid && errors) {\n const formattedErrors = errors.map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n }));\n\n return {\n isValid: false,\n errors: formattedErrors\n };\n }\n\n return {\n isValid: true,\n errors: []\n };\n}\n\n/**\n * Full validation including checksum and signature verification\n */\nexport async function validateFullChangelogRecord(\n record: GitGovRecord & { payload: ChangelogRecord },\n getPublicKey: (keyId: string) => Promise<string>\n): Promise<void> {\n // 1. Validate payload schema\n const [isValid, errors] = validateChangelogRecordSchema(record.payload);\n if (!isValid) {\n const formattedErrors = (errors || []).map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n }));\n throw new DetailedValidationError('ChangelogRecord', formattedErrors);\n }\n\n // 2. Embedded Metadata Validation (header + wrapper)\n await validateFullEmbeddedMetadataRecord(record, getPublicKey);\n}\n","import type { ChangelogRecord } from '../types';\nimport { validateChangelogRecordDetailed } from '../validation/changelog_validator';\nimport { DetailedValidationError } from '../validation/common';\n\n/**\n * Creates a complete ChangelogRecord with validation (Protocol v2)\n * \n * @param payload - Partial ChangelogRecord payload\n * @returns Promise<ChangelogRecord> - The validated ChangelogRecord\n */\nexport async function createChangelogRecord(payload: Partial<ChangelogRecord>): Promise<ChangelogRecord> {\n const timestamp = Math.floor(Date.now() / 1000);\n\n // Build changelog with required fields\n const changelog: ChangelogRecord = {\n // Required fields\n id: payload.id || '',\n title: payload.title || '',\n description: payload.description || '',\n relatedTasks: (payload.relatedTasks || []) as [string, ...string[]],\n completedAt: payload.completedAt || timestamp,\n\n // Optional fields (only include if provided)\n ...(payload.relatedCycles && { relatedCycles: payload.relatedCycles }),\n ...(payload.relatedExecutions && { relatedExecutions: payload.relatedExecutions }),\n ...(payload.version && { version: payload.version }),\n ...(payload.tags && { tags: payload.tags }),\n ...(payload.commits && { commits: payload.commits }),\n ...(payload.files && { files: payload.files }),\n ...(payload.notes && { notes: payload.notes })\n };\n\n // Validate the complete changelog record\n const validation = validateChangelogRecordDetailed(changelog);\n if (!validation.isValid) {\n throw new DetailedValidationError('ChangelogRecord', validation.errors);\n }\n\n return changelog;\n}\n\n","import { RecordStore } from '../../store';\nimport type { TaskRecord } from '../../types';\nimport type { CycleRecord } from '../../types';\nimport type { FeedbackRecord } from '../../types';\nimport type { ExecutionRecord } from '../../types';\nimport type { ActorRecord } from '../../types';\n\n/**\n * MetricsAdapter Dependencies - Facade + Dependency Injection Pattern\n */\nexport type MetricsAdapterDependencies = {\n // Data Layer (Read-Only) - MVP Critical\n taskStore: RecordStore<TaskRecord>;\n cycleStore: RecordStore<CycleRecord>;\n\n // Optional: Additional stores for enhanced metrics (graceful degradation)\n feedbackStore?: RecordStore<FeedbackRecord>;\n executionStore?: RecordStore<ExecutionRecord>;\n actorStore?: RecordStore<ActorRecord>;\n\n // Optional: Platform API for Premium metrics (Tier 4)\n platformApi?: IPlatformApi;\n}\n\n// Platform API interface (Tier 4 - Future)\ninterface IPlatformApi {\n getTokenConsumption(timeframe: string): Promise<TokenConsumption[]>;\n}\n\ntype TokenConsumption = {\n agentId: string;\n tokens: number;\n cost: number;\n timestamp: number;\n}\n\n// Return types specific to the adapter\nexport type SystemStatus = {\n tasks: {\n total: number;\n byStatus: Record<string, number>;\n byPriority: Record<string, number>;\n };\n cycles: {\n total: number;\n active: number;\n completed: number;\n };\n health: {\n overallScore: number; // 0-100\n blockedTasks: number;\n staleTasks: number;\n };\n};\n\nexport type TaskHealthReport = {\n taskId: string;\n healthScore: number; // 0-100\n timeInCurrentStage: number; // dĆas\n stalenessIndex: number; // 0-10\n blockingFeedbacks: number;\n lastActivity: number; // timestamp\n recommendations: string[];\n};\n\nexport type ProductivityMetrics = {\n throughput: number; // tareas/semana\n leadTime: number; // dĆas promedio\n cycleTime: number; // dĆas promedio\n tasksCompleted7d: number; // count\n averageCompletionTime: number; // dĆas\n};\n\nexport type CollaborationMetrics = {\n activeAgents: number; // count\n totalAgents: number; // count\n agentUtilization: number; // percentage\n humanAgentRatio: number; // ratio\n collaborationIndex: number; // 0-100\n};\n\n/**\n * MetricsAdapter Interface - The System Analyst\n */\nexport interface IMetricsAdapter {\n // Public API methods\n getSystemStatus(): Promise<SystemStatus>;\n getTaskHealth(taskId: string): Promise<TaskHealthReport>;\n getProductivityMetrics(): Promise<ProductivityMetrics>;\n getCollaborationMetrics(): Promise<CollaborationMetrics>;\n\n // Pure calculation functions - Tier 1 (MVP Critical)\n calculateTimeInCurrentStage(task: TaskRecord): number;\n calculateStalenessIndex(tasks: TaskRecord[]): number;\n calculateBlockingFeedbackAge(feedback: FeedbackRecord[]): number;\n calculateHealth(tasks: TaskRecord[]): number;\n calculateBacklogDistribution(tasks: TaskRecord[]): Record<string, number>;\n calculateTasksCreatedToday(tasks: TaskRecord[]): number;\n\n // Pure calculation functions - Tier 2 (Important)\n calculateThroughput(tasks: TaskRecord[]): number;\n calculateLeadTime(tasks: TaskRecord[]): number;\n calculateCycleTime(tasks: TaskRecord[]): number;\n calculateActiveAgents(actors: ActorRecord[], executions: ExecutionRecord[]): number;\n}\n\n/**\n * MetricsAdapter - The System Analyst\n * \n * Implements Facade + Dependency Injection Pattern for testeable and configurable orchestration.\n * Acts as Mediator between analytics system and multi-store data sources.\n */\nexport class MetricsAdapter implements IMetricsAdapter {\n private taskStore: RecordStore<TaskRecord>;\n private cycleStore: RecordStore<CycleRecord>;\n private feedbackStore: RecordStore<FeedbackRecord> | undefined;\n private executionStore: RecordStore<ExecutionRecord> | undefined;\n private actorStore: RecordStore<ActorRecord> | undefined;\n private platformApi: IPlatformApi | undefined;\n\n constructor(dependencies: MetricsAdapterDependencies) {\n this.taskStore = dependencies.taskStore;\n this.cycleStore = dependencies.cycleStore;\n this.feedbackStore = dependencies.feedbackStore; // Graceful degradation\n this.executionStore = dependencies.executionStore; // Graceful degradation\n this.actorStore = dependencies.actorStore; // Graceful degradation\n this.platformApi = dependencies.platformApi; // Graceful degradation\n }\n\n // ===== PUBLIC API METHODS =====\n\n /**\n * [EARS-1] Gets aggregated system status using Tier 1 metrics.\n */\n async getSystemStatus(): Promise<SystemStatus> {\n // Read all tasks and cycles\n const taskIds = await this.taskStore.list();\n const tasks: TaskRecord[] = [];\n for (const id of taskIds) {\n const record = await this.taskStore.read(id);\n if (record) tasks.push(record.payload);\n }\n\n const cycleIds = await this.cycleStore.list();\n const cycles: CycleRecord[] = [];\n for (const id of cycleIds) {\n const record = await this.cycleStore.read(id);\n if (record) cycles.push(record.payload);\n }\n\n // Calculate Tier 1 metrics\n const health = this.calculateHealth(tasks);\n\n // Count blocked and stale tasks\n const blockedTasks = tasks.filter(task => task.status === 'paused').length;\n const staleTasks = tasks.filter(task => {\n const staleness = this.calculateTimeInCurrentStage(task);\n return staleness > 7; // More than 7 days in current stage\n }).length;\n\n return {\n tasks: {\n total: tasks.length,\n byStatus: this.countTasksByStatus(tasks),\n byPriority: this.countTasksByPriority(tasks)\n },\n cycles: {\n total: cycles.length,\n active: cycles.filter(c => c.status === 'active').length,\n completed: cycles.filter(c => c.status === 'completed').length\n },\n health: {\n overallScore: health,\n blockedTasks,\n staleTasks\n }\n };\n }\n\n /**\n * [EARS-2] Gets task health analysis using Tier 1 metrics.\n */\n async getTaskHealth(taskId: string): Promise<TaskHealthReport> {\n // EARS-3: Validate task exists\n const taskRecord = await this.taskStore.read(taskId);\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n\n const task = taskRecord.payload;\n\n // Read related data for analysis\n let feedbacks: FeedbackRecord[] = [];\n let allFeedbacks: FeedbackRecord[] = []; // For checking resolutions (immutable pattern)\n let executions: ExecutionRecord[] = [];\n\n if (this.feedbackStore) {\n const feedbackIds = await this.feedbackStore.list();\n for (const id of feedbackIds) {\n const record = await this.feedbackStore.read(id);\n if (record) {\n allFeedbacks.push(record.payload);\n if (record.payload.entityId === taskId) {\n feedbacks.push(record.payload);\n }\n }\n }\n }\n\n if (this.executionStore) {\n const executionIds = await this.executionStore.list();\n for (const id of executionIds) {\n const record = await this.executionStore.read(id);\n if (record && record.payload.taskId === taskId) {\n executions.push(record.payload);\n }\n }\n }\n\n // Calculate Tier 1 metrics\n const timeInCurrentStage = this.calculateTimeInCurrentStage(task);\n const stalenessIndex = this.calculateStalenessIndex([task]);\n\n // [EARS-32/33] Count only UNRESOLVED blocking feedbacks (immutable pattern)\n // A blocking feedback is unresolved if no resolution feedback exists for it\n const blockingFeedbacks = feedbacks.filter(f => {\n if (f.type !== 'blocking' || f.status !== 'open') return false;\n\n // Check if this blocking feedback has been resolved (via another feedback)\n const hasResolution = allFeedbacks.some(resolution =>\n resolution.entityType === 'feedback' &&\n resolution.resolvesFeedbackId === f.id &&\n resolution.status === 'resolved'\n );\n\n return !hasResolution; // Only count if NOT resolved\n }).length;\n const lastActivity = executions.length > 0 ? Math.max(...executions.map(e => this.getTimestampFromId(e.id))) : this.getTimestampFromId(task.id);\n\n // Generate recommendations\n const recommendations: string[] = [];\n if (timeInCurrentStage > 7) recommendations.push('Task has been stagnant for over 7 days');\n if (blockingFeedbacks > 0) recommendations.push(`${blockingFeedbacks} blocking feedback(s) need attention`);\n if (stalenessIndex > 5) recommendations.push('No recent execution activity detected');\n\n // Calculate health score (0-100)\n let healthScore = 100;\n if (timeInCurrentStage > 7) healthScore -= 30;\n if (blockingFeedbacks > 0) healthScore -= 40;\n if (stalenessIndex > 5) healthScore -= 20;\n healthScore = Math.max(0, healthScore);\n\n return {\n taskId,\n healthScore,\n timeInCurrentStage,\n stalenessIndex,\n blockingFeedbacks,\n lastActivity,\n recommendations\n };\n }\n\n /**\n * [EARS-21] Gets productivity metrics using Tier 2 calculations.\n */\n async getProductivityMetrics(): Promise<ProductivityMetrics> {\n // Read all tasks\n const taskIds = await this.taskStore.list();\n const tasks: TaskRecord[] = [];\n for (const id of taskIds) {\n const record = await this.taskStore.read(id);\n if (record) tasks.push(record.payload);\n }\n\n // Calculate Tier 2 metrics\n const throughput = this.calculateThroughput(tasks);\n const leadTime = this.calculateLeadTime(tasks);\n const cycleTime = this.calculateCycleTime(tasks);\n const tasksCompleted7d = tasks.filter(task => {\n if (task.status !== 'done') return false;\n const completedTime = this.getTimestampFromId(task.id);\n const sevenDaysAgo = Math.floor(Date.now() / 1000) - (7 * 24 * 60 * 60);\n return completedTime >= sevenDaysAgo;\n }).length;\n\n return {\n throughput,\n leadTime,\n cycleTime,\n tasksCompleted7d,\n averageCompletionTime: leadTime // Alias for leadTime\n };\n }\n\n /**\n * [EARS-22] Gets collaboration metrics with agent activity analysis.\n */\n async getCollaborationMetrics(): Promise<CollaborationMetrics> {\n // EARS-24: Graceful degradation if stores not available\n if (!this.actorStore || !this.executionStore) {\n return {\n activeAgents: 0,\n totalAgents: 0,\n agentUtilization: 0,\n humanAgentRatio: 0,\n collaborationIndex: 0\n };\n }\n\n // Read actors and executions\n const actorIds = await this.actorStore.list();\n const actors: ActorRecord[] = [];\n for (const id of actorIds) {\n const record = await this.actorStore.read(id);\n if (record) actors.push(record.payload);\n }\n\n const executionIds = await this.executionStore.list();\n const executions: ExecutionRecord[] = [];\n for (const id of executionIds) {\n const record = await this.executionStore.read(id);\n if (record) executions.push(record.payload);\n }\n\n // Calculate Tier 2 metrics\n const activeAgents = this.calculateActiveAgents(actors, executions);\n const totalAgents = actors.filter(actor => actor.type === 'agent').length;\n const totalHumans = actors.filter(actor => actor.type === 'human').length;\n const agentUtilization = totalAgents > 0 ? (activeAgents / totalAgents) * 100 : 0;\n const humanAgentRatio = totalHumans > 0 ? totalAgents / totalHumans : 0;\n const collaborationIndex = Math.min(100, (activeAgents * 10) + (agentUtilization / 2));\n\n return {\n activeAgents,\n totalAgents,\n agentUtilization,\n humanAgentRatio,\n collaborationIndex\n };\n }\n\n // ===== TIER 1: PURE CALCULATION FUNCTIONS (MVP CRITICAL) =====\n\n /**\n * [EARS-5] Calculates exact days since last state change.\n */\n calculateTimeInCurrentStage(task: TaskRecord): number {\n try {\n // EARS-25: Use creation timestamp as fallback if no signatures\n const currentTime = Math.floor(Date.now() / 1000);\n const taskCreationTime = this.getTimestampFromId(task.id);\n\n // TODO: In a complete implementation, we would look at signatures to find last state change\n // For MVP, we use creation time as approximation\n const lastStateChange = taskCreationTime;\n\n const diffSeconds = currentTime - lastStateChange;\n const diffDays = diffSeconds / (24 * 60 * 60);\n\n return Math.max(0, diffDays);\n } catch (error) {\n // EARS-28: Validate timestamps\n throw new Error(`InvalidDataError: Invalid timestamp data for task ${task.id}`);\n }\n }\n\n /**\n * [EARS-6] Calculates days since last ExecutionRecord.\n */\n calculateStalenessIndex(tasks: TaskRecord[]): number {\n // EARS-13: Graceful degradation without executionStore\n if (!this.executionStore) {\n return 0;\n }\n\n // EARS-11: Validate input\n if (!Array.isArray(tasks)) {\n throw new Error('InvalidDataError: tasks must be an array');\n }\n\n // EARS-12: Handle empty datasets\n if (tasks.length === 0) {\n return 0;\n }\n\n try {\n // For MVP, calculate based on task creation time\n // In complete implementation, would check actual ExecutionRecords\n const currentTime = Math.floor(Date.now() / 1000);\n const staleDays = tasks.map(task => {\n const taskTime = this.getTimestampFromId(task.id);\n return (currentTime - taskTime) / (24 * 60 * 60);\n });\n\n return Math.max(0, Math.max(...staleDays));\n } catch (error) {\n throw new Error('InvalidDataError: Invalid data in staleness calculation');\n }\n }\n\n /**\n * [EARS-7] Calculates days of oldest active blocking feedback.\n */\n calculateBlockingFeedbackAge(feedback: FeedbackRecord[]): number {\n // EARS-14: Graceful degradation without feedbackStore\n if (!this.feedbackStore) {\n return 0;\n }\n\n // EARS-11: Validate input\n if (!Array.isArray(feedback)) {\n throw new Error('InvalidDataError: feedback must be an array');\n }\n\n // Filter blocking and open feedbacks\n const blockingFeedbacks = feedback.filter(f => f.type === 'blocking' && f.status === 'open');\n\n // EARS-12: Handle empty datasets\n if (blockingFeedbacks.length === 0) {\n return 0;\n }\n\n try {\n const currentTime = Math.floor(Date.now() / 1000);\n const ages = blockingFeedbacks.map(f => {\n const feedbackTime = this.getTimestampFromId(f.id);\n return (currentTime - feedbackTime) / (24 * 60 * 60);\n });\n\n return Math.max(...ages);\n } catch (error) {\n throw new Error('InvalidDataError: Invalid timestamp in blocking feedback calculation');\n }\n }\n\n /**\n * [EARS-8] Calculates health percentage using improved protocol formula.\n */\n calculateHealth(tasks: TaskRecord[]): number {\n // EARS-11: Validate input\n if (!Array.isArray(tasks)) {\n throw new Error('InvalidDataError: tasks must be an array');\n }\n\n // EARS-12: Handle empty datasets\n if (tasks.length === 0) {\n return 0;\n }\n\n try {\n // Count tasks by status\n const activeTasks = tasks.filter(task => task.status === 'active').length;\n const doneTasks = tasks.filter(task => task.status === 'done').length;\n const archivedTasks = tasks.filter(task => task.status === 'archived').length;\n const readyTasks = tasks.filter(task => task.status === 'ready').length;\n const reviewTasks = tasks.filter(task => task.status === 'review').length;\n const pausedTasks = tasks.filter(task => task.status === 'paused').length;\n const draftTasks = tasks.filter(task => task.status === 'draft').length;\n\n // Calculate health based on workflow progress and blockers\n // Healthy tasks: done (100%), archived (100%), active (80%), ready (60%), review (40%)\n // Neutral tasks: draft (20%)\n // Problematic tasks: paused (0%)\n const healthyScore = (doneTasks * 100) + (archivedTasks * 100) + (activeTasks * 80) + (readyTasks * 60) + (reviewTasks * 40) + (draftTasks * 20) + (pausedTasks * 0);\n\n const maxPossibleScore = tasks.length * 100;\n\n if (maxPossibleScore === 0) {\n return 0;\n }\n\n return Math.round((healthyScore / maxPossibleScore) * 100);\n } catch (error) {\n throw new Error('InvalidDataError: Invalid data in health calculation');\n }\n }\n\n /**\n * [EARS-9] Returns status distribution with percentages.\n */\n calculateBacklogDistribution(tasks: TaskRecord[]): Record<string, number> {\n // EARS-11: Validate input\n if (!Array.isArray(tasks)) {\n throw new Error('InvalidDataError: tasks must be an array');\n }\n\n // EARS-12: Handle empty datasets\n if (tasks.length === 0) {\n return {};\n }\n\n const validStatuses = ['draft', 'review', 'ready', 'active', 'done', 'archived', 'paused'];\n const distribution: Record<string, number> = {};\n\n // EARS-29: Ignore tasks with invalid status\n const validTasks = tasks.filter(task => validStatuses.includes(task.status));\n\n // EARS-30: Handle division by zero\n if (validTasks.length === 0) {\n return {};\n }\n\n for (const status of validStatuses) {\n const count = validTasks.filter(task => task.status === status).length;\n distribution[status] = (count / validTasks.length) * 100;\n }\n\n return distribution;\n }\n\n /**\n * [EARS-10] Counts tasks created in last 24 hours.\n */\n calculateTasksCreatedToday(tasks: TaskRecord[]): number {\n // EARS-11: Validate input\n if (!Array.isArray(tasks)) {\n throw new Error('InvalidDataError: tasks must be an array');\n }\n\n try {\n const currentTime = Math.floor(Date.now() / 1000);\n const twentyFourHoursAgo = currentTime - (24 * 60 * 60);\n\n return tasks.filter(task => {\n const creationTime = this.getTimestampFromId(task.id);\n return creationTime >= twentyFourHoursAgo;\n }).length;\n } catch (error) {\n throw new Error('InvalidDataError: Invalid timestamp in tasks created today calculation');\n }\n }\n\n // ===== TIER 2: PURE CALCULATION FUNCTIONS (IMPORTANT) =====\n\n /**\n * [EARS-17] Counts tasks moved to 'done' in last 7 days.\n */\n calculateThroughput(tasks: TaskRecord[]): number {\n // EARS-11: Validate input\n if (!Array.isArray(tasks)) {\n throw new Error('InvalidDataError: tasks must be an array');\n }\n\n try {\n const currentTime = Math.floor(Date.now() / 1000);\n const sevenDaysAgo = currentTime - (7 * 24 * 60 * 60);\n\n return tasks.filter(task => {\n if (task.status !== 'done') return false;\n // For MVP, use creation time as approximation of completion time\n const completionTime = this.getTimestampFromId(task.id);\n return completionTime >= sevenDaysAgo;\n }).length;\n } catch (error) {\n throw new Error('InvalidDataError: Invalid data in throughput calculation');\n }\n }\n\n /**\n * [EARS-18] Calculates average done-draft time for lead time.\n */\n calculateLeadTime(tasks: TaskRecord[]): number {\n // EARS-11: Validate input\n if (!Array.isArray(tasks)) {\n throw new Error('InvalidDataError: tasks must be an array');\n }\n\n // EARS-26: Filter only completed tasks\n const completedTasks = tasks.filter(task => task.status === 'done');\n\n // EARS-30: Handle division by zero\n if (completedTasks.length === 0) {\n return 0;\n }\n\n try {\n // For MVP, calculate based on creation time\n // In complete implementation, would use actual state change timestamps\n const currentTime = Math.floor(Date.now() / 1000);\n const leadTimes = completedTasks.map(task => {\n const creationTime = this.getTimestampFromId(task.id);\n return (currentTime - creationTime) / (24 * 60 * 60); // Convert to days\n });\n\n return leadTimes.reduce((sum, time) => sum + time, 0) / leadTimes.length;\n } catch (error) {\n throw new Error('InvalidDataError: Invalid timestamp in lead time calculation');\n }\n }\n\n /**\n * [EARS-19] Calculates average done-active time for cycle time.\n */\n calculateCycleTime(tasks: TaskRecord[]): number {\n // EARS-11: Validate input\n if (!Array.isArray(tasks)) {\n throw new Error('InvalidDataError: tasks must be an array');\n }\n\n // Filter completed tasks that were active\n const activeTasks = tasks.filter(task => task.status === 'done');\n\n // EARS-27: Return 0 for tasks that were never active\n if (activeTasks.length === 0) {\n return 0;\n }\n\n try {\n // For MVP, use approximation based on creation time\n // In complete implementation, would track actual active ā done transitions\n const cycleTimes = activeTasks.map(task => {\n // Approximate cycle time as 30% of total time (active phase)\n const creationTime = this.getTimestampFromId(task.id);\n const currentTime = Math.floor(Date.now() / 1000);\n const totalTime = (currentTime - creationTime) / (24 * 60 * 60);\n return totalTime * 0.3; // Approximate active time\n });\n\n return cycleTimes.reduce((sum, time) => sum + time, 0) / cycleTimes.length;\n } catch (error) {\n throw new Error('InvalidDataError: Invalid data in cycle time calculation');\n }\n }\n\n /**\n * [EARS-20] Counts unique agents with executions in 24h.\n */\n calculateActiveAgents(actors: ActorRecord[], executions: ExecutionRecord[]): number {\n // EARS-11: Validate input\n if (!Array.isArray(actors) || !Array.isArray(executions)) {\n throw new Error('InvalidDataError: actors and executions must be arrays');\n }\n\n try {\n const currentTime = Math.floor(Date.now() / 1000);\n const twentyFourHoursAgo = currentTime - (24 * 60 * 60);\n\n // Get recent executions\n const recentExecutions = executions.filter(execution => {\n const executionTime = this.getTimestampFromId(execution.id);\n return executionTime >= twentyFourHoursAgo;\n });\n\n // Get unique agent IDs from recent executions\n const activeAgentIds = new Set<string>();\n\n if (recentExecutions.length > 0) {\n // Cross-reference executions with agent actors to find active agents\n const agentActors = actors.filter(actor => actor.type === 'agent');\n for (const agent of agentActors) {\n // In a complete implementation, we would track execution authorship\n // For now, if there are recent executions and agent actors, count them as active\n activeAgentIds.add(agent.id);\n }\n }\n\n return activeAgentIds.size;\n } catch (error) {\n throw new Error('InvalidDataError: Invalid data in active agents calculation');\n }\n }\n\n // ===== HELPER METHODS =====\n\n /**\n * Extracts timestamp from ID (format: {timestamp}-{type}-{slug})\n */\n private getTimestampFromId(id: string): number {\n try {\n const parts = id.split('-');\n const timestamp = parseInt(parts[0] || '0', 10);\n\n // EARS-28: Validate timestamps\n if (isNaN(timestamp) || timestamp <= 0) {\n throw new Error(`Invalid timestamp in ID: ${id}`);\n }\n\n return timestamp;\n } catch (error) {\n throw new Error(`InvalidDataError: Cannot extract timestamp from ID: ${id}`);\n }\n }\n\n /**\n * Counts tasks by status\n */\n private countTasksByStatus(tasks: TaskRecord[]): Record<string, number> {\n const counts: Record<string, number> = {};\n\n for (const task of tasks) {\n const status = task.status;\n counts[status] = (counts[status] || 0) + 1;\n }\n\n return counts;\n }\n\n /**\n * Counts tasks by priority\n */\n private countTasksByPriority(tasks: TaskRecord[]): Record<string, number> {\n const counts: Record<string, number> = {};\n\n for (const task of tasks) {\n const priority = task.priority;\n counts[priority] = (counts[priority] || 0) + 1;\n }\n\n return counts;\n }\n\n // ===== TIER 3-4: NOT IMPLEMENTED (FUTURE) =====\n\n /**\n * [EARS-15] Throws NotImplementedError for Tier 3 functions.\n */\n calculateQuality(_tasks: TaskRecord[]): number {\n throw new Error('NotImplementedError: Tier 3 metrics not implemented yet');\n }\n\n calculateReworkRate(_tasks: TaskRecord[]): number {\n throw new Error('NotImplementedError: Tier 3 metrics not implemented yet');\n }\n\n calculateCompletionRate(_tasks: TaskRecord[]): number {\n throw new Error('NotImplementedError: Tier 3 metrics not implemented yet');\n }\n\n calculateAuditScoreDistribution(_tasks: TaskRecord[]): Record<string, number> {\n throw new Error('NotImplementedError: Tier 3 metrics not implemented yet');\n }\n\n calculateEpicPromotionRate(_tasks: TaskRecord[]): number {\n throw new Error('NotImplementedError: Tier 3 metrics not implemented yet');\n }\n\n calculateTaskRefinementRate(_tasks: TaskRecord[]): number {\n throw new Error('NotImplementedError: Tier 3 metrics not implemented yet');\n }\n\n calculatePlanningAccuracy(_tasks: TaskRecord[]): number {\n throw new Error('NotImplementedError: Tier 3 metrics not implemented yet');\n }\n\n calculateDependencyDiscoveryRate(_tasks: TaskRecord[]): number {\n throw new Error('NotImplementedError: Tier 3 metrics not implemented yet');\n }\n\n /**\n * [EARS-16] Returns null for Premium metrics without Platform API.\n */\n calculateCostBurnRate(_consumption: TokenConsumption[]): number {\n if (!this.platformApi) {\n console.warn('Platform API not available for premium metrics');\n return 0;\n }\n throw new Error('NotImplementedError: Tier 4 premium metrics not implemented yet');\n }\n\n calculateTokenConsumption(_consumption: TokenConsumption[]): number {\n if (!this.platformApi) {\n console.warn('Platform API not available for premium metrics');\n return 0;\n }\n throw new Error('NotImplementedError: Tier 4 premium metrics not implemented yet');\n }\n\n calculateTokenConsumptionByAgent(_consumption: TokenConsumption[]): Record<string, number> {\n if (!this.platformApi) {\n console.warn('Platform API not available for premium metrics');\n return {};\n }\n throw new Error('NotImplementedError: Tier 4 premium metrics not implemented yet');\n }\n\n calculateAiAccuracyRate(_tasks: TaskRecord[], _feedback: FeedbackRecord[]): number {\n if (!this.platformApi) {\n console.warn('Platform API not available for premium metrics');\n return 0;\n }\n throw new Error('NotImplementedError: Tier 4 premium metrics not implemented yet');\n }\n\n calculateAgentExecutionTime(_executions: ExecutionRecord[]): number {\n if (!this.platformApi) {\n console.warn('Platform API not available for premium metrics');\n return 0;\n }\n throw new Error('NotImplementedError: Tier 4 premium metrics not implemented yet');\n }\n}\n","import { promises as fs } from 'fs';\nimport * as fsSync from 'fs';\nimport * as path from 'path';\nimport { RecordStore } from '../../store';\nimport { MetricsAdapter } from '../metrics_adapter';\nimport type { TaskRecord } from '../../types';\nimport type { CycleRecord } from '../../types';\nimport type { FeedbackRecord } from '../../types';\nimport type { ExecutionRecord } from '../../types';\nimport type { ChangelogRecord } from '../../types';\nimport type { ActorRecord } from '../../types';\nimport type {\n GitGovTaskRecord,\n GitGovCycleRecord,\n GitGovFeedbackRecord,\n GitGovExecutionRecord,\n GitGovChangelogRecord,\n GitGovActorRecord\n} from '../../types';\nimport type { SystemStatus, ProductivityMetrics, CollaborationMetrics } from '../metrics_adapter';\nimport type { ActivityEvent } from '../../event_bus';\n\n/**\n * Collection of all records with full GitGov metadata (headers + payloads).\n * This allows access to signatures, checksums, and other metadata for enrichment.\n * \n * @see GitGovTaskRecord - Full record type with header.signatures for author/lastModifier extraction\n */\nexport type AllRecords = {\n tasks: GitGovTaskRecord[];\n cycles: GitGovCycleRecord[];\n feedback: GitGovFeedbackRecord[];\n executions: GitGovExecutionRecord[];\n changelogs: GitGovChangelogRecord[];\n actors: GitGovActorRecord[];\n};\n\n/**\n * Enhanced Task Record with calculated activity metadata\n * Used by Dashboard for intelligent sorting and display\n */\nexport type EnrichedTaskRecord = TaskRecord & {\n lastUpdated: number; // Unix timestamp of most recent activity\n lastActivityType: 'task_modified' | 'feedback_received' | 'execution_added' | 'changelog_created' | 'task_created';\n recentActivity?: string; // Human-readable description of recent activity\n};\n\n/**\n * IndexerAdapter Dependencies - Facade + Dependency Injection Pattern\n */\nexport type IndexerAdapterDependencies = {\n // Core calculation engine (CRITICAL)\n metricsAdapter: MetricsAdapter;\n\n // Data stores (read-only)\n taskStore: RecordStore<TaskRecord>;\n cycleStore: RecordStore<CycleRecord>;\n feedbackStore?: RecordStore<FeedbackRecord>;\n executionStore?: RecordStore<ExecutionRecord>;\n changelogStore?: RecordStore<ChangelogRecord>;\n actorStore?: RecordStore<ActorRecord>;\n\n // Optional: Configuration for evolution phases\n cacheStrategy?: \"json\" | \"sqlite\" | \"dual\"; // Default: 'json'\n cachePath?: string; // Default: '.gitgov/index.json'\n};\n\n/**\n * Return types specific to the adapter\n */\nexport type IndexData = {\n metadata: {\n generatedAt: string;\n lastCommitHash: string;\n integrityStatus: \"valid\" | \"warnings\" | \"errors\";\n recordCounts: Record<string, number>;\n cacheStrategy: \"json\" | \"sqlite\" | \"dual\";\n generationTime: number; // ms\n };\n metrics: SystemStatus & ProductivityMetrics & CollaborationMetrics;\n activityHistory: ActivityEvent[]; // Para dashboard activity streams\n tasks: TaskRecord[];\n enrichedTasks: EnrichedTaskRecord[]; // Tasks with activity metadata for Dashboard\n cycles: CycleRecord[];\n actors: ActorRecord[];\n};\n\nexport type IntegrityReport = {\n status: \"valid\" | \"warnings\" | \"errors\";\n recordsScanned: number;\n errorsFound: IntegrityError[];\n warningsFound: IntegrityWarning[];\n validationTime: number; // ms\n checksumFailures: number;\n signatureFailures: number;\n};\n\nexport type IndexGenerationReport = {\n success: boolean;\n recordsProcessed: number;\n metricsCalculated: number;\n generationTime: number; // ms\n cacheSize: number; // bytes\n cacheStrategy: \"json\" | \"sqlite\" | \"dual\";\n errors: string[];\n performance: {\n readTime: number;\n calculationTime: number;\n writeTime: number;\n };\n};\n\nexport type IntegrityError = {\n type: 'schema_violation' | 'checksum_failure' | 'signature_invalid';\n recordId: string;\n message: string;\n};\n\nexport type IntegrityWarning = {\n type: 'missing_reference' | 'deprecated_field' | 'performance_issue';\n recordId: string;\n message: string;\n};\n\n/**\n * IndexerAdapter Interface - The Cache Engine\n */\nexport interface IIndexerAdapter {\n generateIndex(): Promise<IndexGenerationReport>;\n getIndexData(): Promise<IndexData | null>;\n validateIntegrity(): Promise<IntegrityReport>;\n calculateActivityHistory(allRecords: AllRecords): Promise<ActivityEvent[]>; // NUEVO\n calculateLastUpdated(task: TaskRecord, relatedRecords: AllRecords): Promise<{ lastUpdated: number; lastActivityType: EnrichedTaskRecord['lastActivityType']; recentActivity: string }>; // NUEVO\n enrichTaskRecord(task: GitGovTaskRecord, relatedRecords: AllRecords): Promise<EnrichedTaskRecord>; // UPDATED: Now accepts GitGovTaskRecord with headers\n isIndexUpToDate(): Promise<boolean>;\n invalidateCache(): Promise<void>;\n}\n\n/**\n * FileIndexerAdapter - Phase 1 Implementation\n * \n * File-based cache implementation using .gitgov/index.json\n * Optimized for teams with <500 records\n */\nexport class FileIndexerAdapter implements IIndexerAdapter {\n private metricsAdapter: MetricsAdapter;\n private taskStore: RecordStore<TaskRecord>;\n private cycleStore: RecordStore<CycleRecord>;\n private feedbackStore: RecordStore<FeedbackRecord> | undefined;\n private executionStore: RecordStore<ExecutionRecord> | undefined;\n private changelogStore: RecordStore<ChangelogRecord> | undefined;\n private actorStore: RecordStore<ActorRecord> | undefined;\n private cacheStrategy: \"json\" | \"sqlite\" | \"dual\";\n private cachePath: string;\n\n constructor(dependencies: IndexerAdapterDependencies) {\n // Core calculation engine (REQUIRED)\n this.metricsAdapter = dependencies.metricsAdapter;\n\n // Data stores (REQUIRED)\n this.taskStore = dependencies.taskStore;\n this.cycleStore = dependencies.cycleStore;\n\n // Optional stores (graceful degradation)\n this.feedbackStore = dependencies.feedbackStore;\n this.executionStore = dependencies.executionStore;\n this.changelogStore = dependencies.changelogStore;\n this.actorStore = dependencies.actorStore;\n\n // Configuration with defaults\n this.cacheStrategy = dependencies.cacheStrategy || \"json\";\n this.cachePath = dependencies.cachePath || \".gitgov/index.json\";\n }\n\n /**\n * [EARS-1] Generates complete index from raw Records with MetricsAdapter integration\n */\n async generateIndex(): Promise<IndexGenerationReport> {\n const startTime = performance.now();\n const performance_metrics = {\n readTime: 0,\n calculationTime: 0,\n writeTime: 0\n };\n\n try {\n // 1. Read all stores (Phase 1: Read everything into memory)\n const readStart = performance.now();\n\n const [tasks, cycles, actors] = await Promise.all([\n this.readAllTasks(),\n this.readAllCycles(),\n this.readAllActors()\n ]);\n\n performance_metrics.readTime = performance.now() - readStart;\n\n // 2. Delegate calculations to MetricsAdapter\n const calcStart = performance.now();\n\n const [systemStatus, productivityMetrics, collaborationMetrics] = await Promise.all([\n this.metricsAdapter.getSystemStatus(),\n this.metricsAdapter.getProductivityMetrics(),\n this.metricsAdapter.getCollaborationMetrics()\n ]);\n\n performance_metrics.calculationTime = performance.now() - calcStart;\n\n // 3. Calculate activity history\n const allRecords: AllRecords = {\n tasks,\n cycles,\n feedback: await this.readAllFeedback(),\n executions: await this.readAllExecutions(),\n changelogs: await this.readAllChangelogs(),\n actors\n };\n\n const activityHistory = await this.calculateActivityHistory(allRecords);\n\n // 3.5. Enrich tasks with activity metadata\n const enrichedTasks: EnrichedTaskRecord[] = [];\n for (const task of tasks) {\n const enrichedTask = await this.enrichTaskRecord(task, allRecords);\n enrichedTasks.push(enrichedTask);\n }\n\n // 4. Build IndexData structure\n const indexData: IndexData = {\n metadata: {\n generatedAt: new Date().toISOString(),\n lastCommitHash: await this.getGitCommitHash(),\n integrityStatus: \"valid\", // TODO: Implement integrity check\n recordCounts: {\n tasks: tasks.length,\n cycles: cycles.length,\n actors: actors.length,\n feedback: allRecords.feedback.length,\n executions: allRecords.executions.length,\n changelogs: allRecords.changelogs.length\n },\n cacheStrategy: this.cacheStrategy,\n generationTime: 0 // Will be set below\n },\n metrics: { ...systemStatus, ...productivityMetrics, ...collaborationMetrics },\n activityHistory, // NUEVO\n tasks: tasks.map(t => t.payload), // Extract payloads for IndexData\n enrichedTasks, // NUEVO - Tasks with activity metadata\n cycles: cycles.map(c => c.payload), // Extract payloads for IndexData\n actors: actors.map(a => a.payload) // Extract payloads for IndexData\n };\n\n // 4. Write cache (Phase 1: JSON file)\n const writeStart = performance.now();\n await this.writeCacheFile(indexData);\n performance_metrics.writeTime = performance.now() - writeStart;\n\n const totalTime = performance.now() - startTime;\n indexData.metadata.generationTime = totalTime;\n\n // 5. Get cache size\n const cacheSize = await this.getCacheFileSize();\n\n return {\n success: true,\n recordsProcessed: tasks.length + cycles.length + actors.length,\n metricsCalculated: 3, // systemStatus + productivity + collaboration\n generationTime: totalTime,\n cacheSize,\n cacheStrategy: this.cacheStrategy,\n errors: [],\n performance: performance_metrics\n };\n\n } catch (error) {\n return {\n success: false,\n recordsProcessed: 0,\n metricsCalculated: 0,\n generationTime: performance.now() - startTime,\n cacheSize: 0,\n cacheStrategy: this.cacheStrategy,\n errors: [error instanceof Error ? error.message : String(error)],\n performance: performance_metrics\n };\n }\n }\n\n /**\n * [EARS-2] Gets data from local cache for fast CLI queries\n */\n async getIndexData(): Promise<IndexData | null> {\n try {\n // Check if cache file exists\n const cacheExists = await this.cacheFileExists();\n if (!cacheExists) {\n return null; // EARS-3: Return null without cache\n }\n\n // Validate freshness\n const isUpToDate = await this.isIndexUpToDate();\n if (!isUpToDate) {\n return null; // Cache is stale\n }\n\n // Read and parse cache file\n const cacheContent = await fs.readFile(this.cachePath, 'utf-8');\n const indexData: IndexData = JSON.parse(cacheContent);\n\n return indexData;\n } catch (error) {\n console.warn(`Cache read error: ${error instanceof Error ? error.message : String(error)}`);\n return null;\n }\n }\n\n /**\n * [EARS-4] Validates integrity of Records without regenerating cache\n */\n async validateIntegrity(): Promise<IntegrityReport> {\n const startTime = performance.now();\n const errors: IntegrityError[] = [];\n const warnings: IntegrityWarning[] = [];\n let recordsScanned = 0;\n\n try {\n // Read all records for validation\n const [tasks, cycles] = await Promise.all([\n this.readAllTasks(),\n this.readAllCycles()\n ]);\n\n recordsScanned = tasks.length + cycles.length;\n\n // Basic validation (schema validation would need ValidatorModule)\n for (const task of tasks) {\n if (!task.payload.id || !task.payload.description) {\n errors.push({\n type: 'schema_violation',\n recordId: task.payload.id || 'unknown',\n message: 'Task missing required fields'\n });\n }\n }\n\n for (const cycle of cycles) {\n if (!cycle.payload.id || !cycle.payload.title) {\n errors.push({\n type: 'schema_violation',\n recordId: cycle.payload.id || 'unknown',\n message: 'Cycle missing required fields'\n });\n }\n }\n\n const status = errors.length > 0 ? \"errors\" : warnings.length > 0 ? \"warnings\" : \"valid\";\n\n return {\n status,\n recordsScanned,\n errorsFound: errors,\n warningsFound: warnings,\n validationTime: performance.now() - startTime,\n checksumFailures: 0, // TODO: Implement checksum validation\n signatureFailures: 0 // TODO: Implement signature validation\n };\n\n } catch (error) {\n return {\n status: \"errors\",\n recordsScanned,\n errorsFound: [{\n type: 'schema_violation',\n recordId: 'system',\n message: error instanceof Error ? error.message : String(error)\n }],\n warningsFound: warnings,\n validationTime: performance.now() - startTime,\n checksumFailures: 0,\n signatureFailures: 0\n };\n }\n }\n\n /**\n * [EARS-5] Checks if index is up to date by comparing timestamps\n */\n async isIndexUpToDate(): Promise<boolean> {\n try {\n // Check if cache exists\n const cacheExists = await this.cacheFileExists();\n if (!cacheExists) {\n return false;\n }\n\n // Get cache timestamp\n const cacheStats = await fs.stat(this.cachePath);\n const cacheTime = cacheStats.mtime.getTime();\n\n // Get last modified time of any record (simplified check)\n const taskIds = await this.taskStore.list();\n const cycleIds = await this.cycleStore.list();\n\n // Check if any records are newer than cache\n for (const id of [...taskIds, ...cycleIds]) {\n const timestamp = this.getTimestampFromId(id);\n if (timestamp * 1000 > cacheTime) { // Convert to milliseconds\n return false; // Found newer record\n }\n }\n\n return true;\n } catch (error) {\n console.warn(`Error checking cache freshness: ${error instanceof Error ? error.message : String(error)}`);\n return false;\n }\n }\n\n /**\n * [EARS-6] Invalidates local cache by removing cache files\n */\n async invalidateCache(): Promise<void> {\n try {\n const cacheExists = await this.cacheFileExists();\n if (cacheExists) {\n await fs.unlink(this.cachePath);\n }\n } catch (error) {\n throw new Error(`Failed to invalidate cache: ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n\n // ===== HELPER METHODS =====\n\n /**\n * Reads all tasks from taskStore with full metadata (headers + payloads).\n * Returns complete GitGovTaskRecord objects including signatures for author/lastModifier extraction.\n */\n private async readAllTasks(): Promise<GitGovTaskRecord[]> {\n const taskIds = await this.taskStore.list();\n const tasks: GitGovTaskRecord[] = [];\n\n for (const id of taskIds) {\n const record = await this.taskStore.read(id);\n if (record) {\n tasks.push(record); // Push full record, not just payload\n }\n }\n\n return tasks;\n }\n\n /**\n * Reads all cycles from cycleStore with full metadata.\n */\n private async readAllCycles(): Promise<GitGovCycleRecord[]> {\n const cycleIds = await this.cycleStore.list();\n const cycles: GitGovCycleRecord[] = [];\n\n for (const id of cycleIds) {\n const record = await this.cycleStore.read(id);\n if (record) {\n cycles.push(record);\n }\n }\n\n return cycles;\n }\n\n /**\n * Reads all actors from actorStore (graceful degradation) with full metadata.\n */\n private async readAllActors(): Promise<GitGovActorRecord[]> {\n if (!this.actorStore) {\n return [];\n }\n\n const actorIds = await this.actorStore.list();\n const actors: GitGovActorRecord[] = [];\n\n for (const id of actorIds) {\n const record = await this.actorStore.read(id);\n if (record) {\n actors.push(record);\n }\n }\n\n return actors;\n }\n\n /**\n * Reads all feedback from feedbackStore (graceful degradation) with full metadata.\n */\n private async readAllFeedback(): Promise<GitGovFeedbackRecord[]> {\n if (!this.feedbackStore) {\n return [];\n }\n\n const feedbackIds = await this.feedbackStore.list();\n const feedback: GitGovFeedbackRecord[] = [];\n\n for (const id of feedbackIds) {\n const record = await this.feedbackStore.read(id);\n if (record) {\n feedback.push(record);\n }\n }\n\n return feedback;\n }\n\n /**\n * Reads all executions from executionStore (graceful degradation) with full metadata.\n */\n private async readAllExecutions(): Promise<GitGovExecutionRecord[]> {\n if (!this.executionStore) {\n return [];\n }\n\n const executionIds = await this.executionStore.list();\n const executions: GitGovExecutionRecord[] = [];\n\n for (const id of executionIds) {\n const record = await this.executionStore.read(id);\n if (record) {\n executions.push(record);\n }\n }\n\n return executions;\n }\n\n /**\n * Reads all changelogs from changelogStore (graceful degradation) with full metadata.\n */\n private async readAllChangelogs(): Promise<GitGovChangelogRecord[]> {\n if (!this.changelogStore) {\n return [];\n }\n\n const changelogIds = await this.changelogStore.list();\n const changelogs: GitGovChangelogRecord[] = [];\n\n for (const id of changelogIds) {\n const record = await this.changelogStore.read(id);\n if (record) {\n changelogs.push(record);\n }\n }\n\n return changelogs;\n }\n\n /**\n * Writes cache data to file (Phase 1: JSON)\n */\n private async writeCacheFile(indexData: IndexData): Promise<void> {\n // Ensure .gitgov directory exists\n const cacheDir = path.dirname(this.cachePath);\n await fs.mkdir(cacheDir, { recursive: true });\n\n // Write JSON cache file\n const jsonContent = JSON.stringify(indexData, null, 2);\n await fs.writeFile(this.cachePath, jsonContent, 'utf-8');\n }\n\n /**\n * Checks if cache file exists\n */\n private async cacheFileExists(): Promise<boolean> {\n try {\n await fs.access(this.cachePath);\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * Gets cache file size in bytes\n */\n private async getCacheFileSize(): Promise<number> {\n try {\n const stats = await fs.stat(this.cachePath);\n return stats.size;\n } catch {\n return 0;\n }\n }\n\n /**\n * Gets current git commit hash (simplified)\n */\n private async getGitCommitHash(): Promise<string> {\n try {\n // Simplified implementation - would use git commands in real implementation\n return \"mock-commit-hash\";\n } catch {\n return \"unknown\";\n }\n }\n\n /**\n * [EARS-19] Calculates activity history from Record timestamps for dashboard activity streams\n */\n async calculateActivityHistory(allRecords: AllRecords): Promise<ActivityEvent[]> {\n const events: ActivityEvent[] = [];\n\n try {\n // Tasks creadas (basado en ID timestamp)\n allRecords.tasks.forEach(task => {\n const timestampPart = task.payload.id.split('-')[0];\n if (timestampPart) {\n events.push({\n timestamp: parseInt(timestampPart),\n type: 'task_created',\n entityId: task.payload.id,\n entityTitle: task.payload.title,\n actorId: task.header.signatures[0]?.keyId || 'unknown', // Extract from first signature\n metadata: { priority: task.payload.priority, status: task.payload.status }\n });\n }\n });\n\n // Cycles creados (basado en ID timestamp)\n allRecords.cycles.forEach(cycle => {\n const timestampPart = cycle.payload.id.split('-')[0];\n if (timestampPart) {\n events.push({\n timestamp: parseInt(timestampPart),\n type: 'cycle_created',\n entityId: cycle.payload.id,\n entityTitle: cycle.payload.title,\n actorId: cycle.header.signatures[0]?.keyId || 'unknown', // Extract from first signature\n metadata: { status: cycle.payload.status }\n });\n }\n });\n\n // Feedback creado (basado en ID timestamp)\n allRecords.feedback.forEach(feedback => {\n const timestampPart = feedback.payload.id.split('-')[0];\n if (timestampPart) {\n const metadata: { type: string; assignee?: string; resolution: string } = {\n type: feedback.payload.type,\n resolution: feedback.payload.status\n };\n if (feedback.payload.assignee) {\n metadata.assignee = feedback.payload.assignee;\n }\n\n const event: ActivityEvent = {\n timestamp: parseInt(timestampPart),\n type: 'feedback_created',\n entityId: feedback.payload.id,\n entityTitle: `${feedback.payload.type}: ${feedback.payload.content.slice(0, 40)}...`,\n actorId: feedback.header.signatures[0]?.keyId || feedback.payload.assignee || 'unknown',\n metadata\n };\n\n events.push(event);\n }\n });\n\n // Changelogs creados (basado en ID timestamp) \n allRecords.changelogs.forEach(changelog => {\n const timestampPart = changelog.payload.id.split('-')[0];\n if (timestampPart) {\n const event: ActivityEvent = {\n timestamp: parseInt(timestampPart),\n type: 'changelog_created',\n entityId: changelog.payload.id,\n entityTitle: changelog.payload.title || 'Release notes',\n actorId: changelog.header.signatures[0]?.keyId || 'unknown'\n };\n if (changelog.payload.version) {\n event.metadata = { version: changelog.payload.version };\n }\n events.push(event);\n }\n });\n\n // Executions creadas (basado en ID timestamp)\n allRecords.executions.forEach(execution => {\n const timestampPart = execution.payload.id.split('-')[0];\n if (timestampPart) {\n events.push({\n timestamp: parseInt(timestampPart),\n type: 'execution_created',\n entityId: execution.payload.id,\n entityTitle: execution.payload.title || `Working on ${execution.payload.taskId.slice(-8)}`,\n actorId: execution.header.signatures[0]?.keyId || 'unknown', // Extract from first signature\n metadata: {\n executionType: execution.payload.type || 'development',\n taskId: execution.payload.taskId\n }\n });\n }\n });\n\n // Actors creados (basado en ID timestamp)\n allRecords.actors.forEach(actor => {\n const timestampPart = actor.payload.id.split('-')[0];\n if (timestampPart) {\n events.push({\n timestamp: parseInt(timestampPart),\n type: 'actor_created',\n entityId: actor.payload.id,\n entityTitle: `${actor.payload.displayName} joined (${actor.payload.type})`,\n metadata: { type: actor.payload.type }\n });\n }\n });\n\n // [EARS-20] Ordenar cronológicamente y limitar a Ćŗltimos 15 eventos\n return events\n .sort((a, b) => b.timestamp - a.timestamp) // MĆ”s recientes primero\n .slice(0, 15); // Ćltimos 15 eventos para performance\n\n } catch (error) {\n // Graceful degradation si hay errores\n console.warn('Error calculating activity history:', error);\n return [];\n }\n }\n\n /**\n * [EARS-21] Calculate lastUpdated timestamp and activity type for a task\n * Considers task file modification time and related records timestamps\n */\n async calculateLastUpdated(\n task: TaskRecord,\n relatedRecords: AllRecords\n ): Promise<{ lastUpdated: number; lastActivityType: EnrichedTaskRecord['lastActivityType']; recentActivity: string }> {\n try {\n let lastUpdated = this.getTimestampFromId(task.id) * 1000; // Convert to milliseconds for consistency\n let lastActivityType: EnrichedTaskRecord['lastActivityType'] = 'task_created';\n let recentActivity = 'Task created';\n\n\n // 1. Check task file modification time (only if significantly newer than creation)\n try {\n // Find the project root by looking for .gitgov directory\n let projectRoot = process.cwd();\n while (!fsSync.existsSync(path.join(projectRoot, '.gitgov')) && projectRoot !== '/') {\n projectRoot = path.dirname(projectRoot);\n }\n const taskFilePath = path.join(projectRoot, '.gitgov', 'tasks', `${task.id}.json`);\n const stats = await fs.stat(taskFilePath);\n const fileModTime = stats.mtime.getTime();\n\n // Only consider file modification if it's more than 60 seconds after creation\n // This avoids counting initial file creation as \"modification\"\n const creationTime = this.getTimestampFromId(task.id) * 1000;\n const timeDifference = fileModTime - creationTime;\n\n if (timeDifference > 60000 && fileModTime > lastUpdated) { // 60 seconds threshold\n lastUpdated = fileModTime;\n lastActivityType = 'task_modified';\n recentActivity = `Task modified ${this.formatTimeAgo(fileModTime)}`;\n\n }\n } catch (error) {\n // File not accessible, continue with other checks\n }\n\n // 2. Check related feedback records\n const relatedFeedback = relatedRecords.feedback.filter(f =>\n f.payload.entityId === task.id || f.payload.content.includes(task.id)\n );\n\n for (const feedback of relatedFeedback) {\n const feedbackTime = this.getTimestampFromId(feedback.payload.id) * 1000; // Convert to milliseconds\n if (feedbackTime > lastUpdated) {\n lastUpdated = feedbackTime;\n lastActivityType = 'feedback_received';\n recentActivity = `${feedback.payload.type} feedback: ${feedback.payload.content.slice(0, 30)}...`;\n }\n }\n\n // 3. Check related execution records\n const relatedExecutions = relatedRecords.executions.filter(e => e.payload.taskId === task.id);\n\n for (const execution of relatedExecutions) {\n const executionTime = this.getTimestampFromId(execution.payload.id) * 1000; // Convert to milliseconds\n if (executionTime > lastUpdated) {\n lastUpdated = executionTime;\n lastActivityType = 'execution_added';\n recentActivity = `Execution: ${execution.payload.title || 'Work logged'}`;\n }\n }\n\n // 4. Check related changelog records\n const relatedChangelogs = relatedRecords.changelogs.filter(c =>\n c.payload.relatedTasks.includes(task.id) ||\n c.payload.description?.includes(task.id)\n );\n\n for (const changelog of relatedChangelogs) {\n const changelogTime = this.getTimestampFromId(changelog.payload.id) * 1000; // Convert to milliseconds\n if (changelogTime > lastUpdated) {\n lastUpdated = changelogTime;\n lastActivityType = 'changelog_created';\n recentActivity = `Changelog: ${changelog.payload.title}`;\n }\n }\n\n return { lastUpdated, lastActivityType, recentActivity };\n\n } catch (error) {\n // Graceful fallback\n const fallbackTime = this.getTimestampFromId(task.id) * 1000; // Convert to milliseconds\n return {\n lastUpdated: fallbackTime,\n lastActivityType: 'task_created',\n recentActivity: 'Task created'\n };\n }\n }\n\n /**\n * [EARS-22] Enrich a TaskRecord with activity metadata\n * @param task - Full GitGovTaskRecord with header.signatures for author/lastModifier extraction\n * @param relatedRecords - All related records with full metadata\n */\n async enrichTaskRecord(task: GitGovTaskRecord, relatedRecords: AllRecords): Promise<EnrichedTaskRecord> {\n const { lastUpdated, lastActivityType, recentActivity } = await this.calculateLastUpdated(task.payload, relatedRecords);\n\n return {\n ...task.payload,\n lastUpdated,\n lastActivityType,\n recentActivity\n };\n }\n\n /**\n * Format timestamp as human-readable time ago\n */\n private formatTimeAgo(timestamp: number): string {\n const now = Date.now();\n const diff = now - timestamp;\n const minutes = Math.floor(diff / (1000 * 60));\n const hours = Math.floor(diff / (1000 * 60 * 60));\n const days = Math.floor(diff / (1000 * 60 * 60 * 24));\n\n if (minutes < 60) return `${minutes}m ago`;\n if (hours < 24) return `${hours}h ago`;\n return `${days}d ago`;\n }\n\n /**\n * Extracts timestamp from ID (format: {timestamp}-{type}-{slug})\n */\n private getTimestampFromId(id: string): number {\n try {\n const parts = id.split('-');\n const timestamp = parseInt(parts[0] || '0', 10);\n\n if (isNaN(timestamp) || timestamp <= 0) {\n throw new Error(`Invalid timestamp in ID: ${id}`);\n }\n\n return timestamp;\n } catch (error) {\n throw new Error(`Cannot extract timestamp from ID: ${id}`);\n }\n }\n}\n","import { promises as fs, existsSync } from 'fs';\nimport * as pathUtils from 'path';\nimport { RecordStore } from '../../store';\nimport type { TaskRecord } from '../../types';\nimport type { CycleRecord } from '../../types';\nimport type { GitGovConfig } from '../../config_manager';\nimport { ConfigManager } from '../../config_manager';\nimport { DetailedValidationError } from '../../validation/common';\nimport type { IdentityAdapter } from '../identity_adapter';\nimport type { BacklogAdapter } from '../backlog_adapter';\nimport type { WorkflowMethodologyAdapter } from '../workflow_methodology_adapter';\nimport type { IEventStream } from '../../event_bus';\nimport { createTaskRecord } from '../../factories/task_factory';\nimport { createCycleRecord } from '../../factories/cycle_factory';\n\n/**\n * ProjectAdapter Dependencies - Facade + Dependency Injection Pattern\n */\nexport interface ProjectAdapterDependencies {\n // Core Adapters (REQUIRED - Fase 1)\n identityAdapter: IdentityAdapter;\n backlogAdapter: BacklogAdapter;\n workflowMethodologyAdapter: WorkflowMethodologyAdapter;\n\n // Infrastructure Layer (REQUIRED)\n configManager: ConfigManager;\n taskStore: RecordStore<TaskRecord>;\n cycleStore: RecordStore<CycleRecord>;\n\n // Optional: Graceful degradation (Fase 2)\n eventBus?: IEventStream;\n platformApi?: IPlatformApi;\n userManagement?: IUserManagement;\n}\n\n// Platform API interface (Fase 2 - Future)\ninterface IPlatformApi {\n getProjectInfo(projectId: string): Promise<ProjectInfo>;\n}\n\ninterface IUserManagement {\n addUserToProject(projectId: string, userId: string, role: string): Promise<void>;\n}\n\n// Return types specific to the adapter\nexport type ProjectInitOptions = {\n name: string;\n template?: string; // Path to JSON template file\n actorName?: string;\n actorEmail?: string;\n methodology?: \"default\" | \"scrum\" | \"kanban\";\n skipValidation?: boolean;\n verbose?: boolean;\n};\n\nexport type ProjectInitResult = {\n success: boolean;\n projectId: string;\n projectName: string;\n rootCycle: string;\n actor: {\n id: string;\n displayName: string;\n publicKeyPath: string;\n };\n template?: {\n processed: boolean;\n cyclesCreated: number;\n tasksCreated: number;\n } | undefined;\n initializationTime: number;\n nextSteps: string[];\n};\n\nexport type EnvironmentValidation = {\n isValid: boolean;\n isGitRepo: boolean;\n hasWritePermissions: boolean;\n isAlreadyInitialized: boolean;\n gitgovPath?: string | undefined;\n warnings: string[];\n suggestions: string[];\n};\n\nexport type ProjectContext = {\n projectId: string;\n projectName: string;\n actorId: string;\n rootCycle: string;\n};\n\nexport type TemplateProcessingResult = {\n success: boolean;\n cyclesCreated: number;\n tasksCreated: number;\n processingTime: number;\n createdIds: {\n cycles: string[];\n tasks: string[];\n };\n};\n\n// Fase 2: Future types\nexport type ProjectInfo = {\n id: string;\n name: string;\n rootCycle: string;\n protocolVersion: string;\n createdAt?: string;\n lastModified?: string;\n};\n\nexport type ProjectReport = {\n project: ProjectInfo;\n statistics: {\n totalTasks: number;\n totalCycles: number;\n completedTasks: number;\n };\n health: {\n overallScore: number;\n recommendations: string[];\n };\n};\n\n/**\n * ProjectAdapter Interface - The Project Initialization Engine\n */\nexport interface IProjectAdapter {\n // FASE 1: Bootstrap Core (CrĆtico para CLI init)\n initializeProject(options: ProjectInitOptions): Promise<ProjectInitResult>;\n validateEnvironment(path?: string): Promise<EnvironmentValidation>;\n processBlueprintTemplate(\n templatePath: string,\n projectContext: ProjectContext\n ): Promise<TemplateProcessingResult>;\n rollbackPartialSetup(setupId: string): Promise<void>;\n\n // FASE 2: Future capabilities (Platform Integration)\n getProjectInfo(): Promise<ProjectInfo | null>;\n updateProjectConfig(updates: Partial<GitGovConfig>): Promise<void>;\n generateProjectReport(): Promise<ProjectReport>;\n}\n\n/**\n * ProjectAdapter - The Project Initialization Engine\n * \n * Implements Facade + Dependency Injection Pattern for testeable and configurable orchestration.\n * Acts as Mediator between project initialization and the ecosystem of adapters.\n */\nexport class ProjectAdapter implements IProjectAdapter {\n private identityAdapter: IdentityAdapter;\n private backlogAdapter: BacklogAdapter;\n private configManager: ConfigManager;\n\n constructor(dependencies: ProjectAdapterDependencies) {\n this.identityAdapter = dependencies.identityAdapter;\n this.backlogAdapter = dependencies.backlogAdapter;\n this.configManager = dependencies.configManager;\n }\n\n // ===== FASE 1: BOOTSTRAP CORE METHODS =====\n\n /**\n * [EARS-1] Initializes complete GitGovernance project with 3-adapter orchestration and trust root Ed25519\n */\n async initializeProject(options: ProjectInitOptions): Promise<ProjectInitResult> {\n const startTime = Date.now();\n let setupId = `setup-${Date.now()}`;\n\n try {\n // 1. Environment Validation\n const envValidation = await this.validateEnvironment();\n if (!envValidation.isValid) {\n throw new Error(`Environment validation failed: ${envValidation.warnings.join(', ')}`);\n }\n\n // 2. Directory Structure Creation\n const projectRoot = process.env['GITGOV_ORIGINAL_DIR'] || process.cwd();\n const gitgovPath = pathUtils.join(projectRoot, '.gitgov');\n\n await this.createDirectoryStructure(gitgovPath);\n\n // 2.5. Copy Agent Prompt (@gitgov instructions for AI assistants)\n await this.copyAgentPrompt(gitgovPath);\n\n // 3. Trust Root Creation via IdentityAdapter\n const actor = await this.identityAdapter.createActor(\n {\n type: \"human\" as const,\n displayName: options.actorName || \"Project Owner\",\n roles: [\n \"admin\", // Platform admin (future use)\n \"author\", // Create & submit tasks\n \"approver:product\", // Approve tasks (product decisions)\n \"approver:quality\", // Complete tasks (quality validation)\n \"developer\" // General development work\n ] as const,\n },\n \"bootstrap\"\n );\n\n // 4. Root Cycle Setup via BacklogAdapter\n const rootCycleData = await createCycleRecord({\n title: \"root\", // Will generate ID: {timestamp}-root\n status: \"planning\" as const,\n taskIds: [],\n });\n\n const rootCycle = await this.backlogAdapter.createCycle(rootCycleData, actor.id);\n\n // 5. Template Processing (if specified)\n let templateResult: TemplateProcessingResult | undefined;\n if (options.template) {\n const projectContext: ProjectContext = {\n projectId: this.generateProjectId(options.name),\n projectName: options.name,\n actorId: actor.id,\n rootCycle: rootCycle.id,\n };\n templateResult = await this.processBlueprintTemplate(options.template, projectContext);\n }\n\n // 6. Configuration Persistence via ConfigManager\n const projectId = this.generateProjectId(options.name);\n const config: GitGovConfig = {\n protocolVersion: \"1.0.0\",\n projectId,\n projectName: options.name,\n rootCycle: rootCycle.id,\n blueprints: {\n root: \"./packages/blueprints\"\n },\n state: {\n branch: \"gitgov-state\"\n }\n };\n\n await this.persistConfiguration(config, gitgovPath);\n\n // 7. Session Initialization\n await this.initializeSession(actor.id, gitgovPath);\n\n // 8. Git Integration\n await this.setupGitIntegration(projectRoot);\n\n const initializationTime = Date.now() - startTime;\n\n return {\n success: true,\n projectId,\n projectName: options.name,\n rootCycle: rootCycle.id,\n actor: {\n id: actor.id,\n displayName: actor.displayName,\n publicKeyPath: pathUtils.join(gitgovPath, 'actors', `${actor.id}.json`),\n },\n template: templateResult ? {\n processed: true,\n cyclesCreated: templateResult.cyclesCreated,\n tasksCreated: templateResult.tasksCreated,\n } : undefined,\n initializationTime,\n nextSteps: [\n \"Run 'gitgov status' to see your project overview\",\n \"Use 'gitgov task create' to add your first task\",\n \"Ask '@gitgov' for help, guidance, or project planning\"\n ],\n };\n\n } catch (error) {\n // Error Recovery - Automatic rollback\n await this.rollbackPartialSetup(setupId);\n throw error;\n }\n }\n\n /**\n * [EARS-2] Validates environment for GitGovernance initialization\n */\n async validateEnvironment(path?: string): Promise<EnvironmentValidation> {\n // For init: validate user's original directory, handling development scenarios\n const targetPath = path || process.env['GITGOV_ORIGINAL_DIR'] || process.cwd();\n const warnings: string[] = [];\n const suggestions: string[] = [];\n\n try {\n // Check if it's a Git repository by looking for .git directory\n const gitPath = pathUtils.join(targetPath, '.git');\n const isGitRepo = existsSync(gitPath);\n\n if (!isGitRepo) {\n warnings.push(`Not a Git repository in directory: ${targetPath}`);\n suggestions.push(\"Run 'git init' to initialize a Git repository first\");\n }\n\n // Check write permissions\n let hasWritePermissions = false;\n try {\n const testFile = pathUtils.join(targetPath, '.gitgov-test');\n await fs.writeFile(testFile, 'test');\n await fs.unlink(testFile);\n hasWritePermissions = true;\n } catch {\n warnings.push(\"No write permissions in target directory\");\n suggestions.push(\"Ensure you have write permissions in the target directory\");\n }\n\n // Check if already initialized\n const gitgovPath = pathUtils.join(targetPath, '.gitgov');\n let isAlreadyInitialized = false;\n try {\n await fs.access(gitgovPath);\n isAlreadyInitialized = true;\n warnings.push(`GitGovernance already initialized in directory: ${targetPath}`);\n suggestions.push(\"Use 'gitgov status' to check current state or choose a different directory\");\n } catch {\n // Directory doesn't exist, which is good\n }\n\n const isValid = isGitRepo && hasWritePermissions && !isAlreadyInitialized;\n\n return {\n isValid,\n isGitRepo,\n hasWritePermissions,\n isAlreadyInitialized,\n gitgovPath: isAlreadyInitialized ? gitgovPath : undefined,\n warnings,\n suggestions,\n };\n\n } catch (error) {\n warnings.push(`Environment validation error: ${error instanceof Error ? error.message : 'Unknown error'}`);\n suggestions.push(\"Check file system permissions and try again\");\n\n return {\n isValid: false,\n isGitRepo: false,\n hasWritePermissions: false,\n isAlreadyInitialized: false,\n warnings,\n suggestions,\n };\n }\n }\n\n /**\n * [EARS-3] Processes blueprint template JSON with schema validation creating cycles and tasks\n */\n async processBlueprintTemplate(\n templatePath: string,\n projectContext: ProjectContext\n ): Promise<TemplateProcessingResult> {\n const startTime = Date.now();\n const createdIds = { cycles: [] as string[], tasks: [] as string[] };\n\n try {\n // Load and validate template JSON\n const templateContent = await fs.readFile(templatePath, 'utf-8');\n const template = JSON.parse(templateContent);\n\n if (!template.cycles || !Array.isArray(template.cycles)) {\n throw new DetailedValidationError('Invalid template format', [\n { field: 'cycles', message: 'must be an array', value: template.cycles }\n ]);\n }\n\n let cyclesCreated = 0;\n let tasksCreated = 0;\n\n // Process cycles\n for (const cycleTemplate of template.cycles) {\n const cycleData = await createCycleRecord({\n title: cycleTemplate.title || 'Untitled Cycle',\n status: cycleTemplate.status || 'planning',\n taskIds: [],\n });\n\n const cycle = await this.backlogAdapter.createCycle(cycleData, projectContext.actorId);\n createdIds.cycles.push(cycle.id);\n cyclesCreated++;\n\n // Process tasks for this cycle\n if (cycleTemplate.tasks && Array.isArray(cycleTemplate.tasks)) {\n for (const taskTemplate of cycleTemplate.tasks) {\n const taskData = await createTaskRecord({\n title: taskTemplate.title || 'Untitled Task',\n priority: taskTemplate.priority || 'medium',\n description: taskTemplate.description || '',\n tags: taskTemplate.tags || [],\n cycleIds: [cycle.id],\n });\n\n const task = await this.backlogAdapter.createTask(taskData, projectContext.actorId);\n createdIds.tasks.push(task.id);\n tasksCreated++;\n }\n }\n }\n\n const processingTime = Date.now() - startTime;\n\n return {\n success: true,\n cyclesCreated,\n tasksCreated,\n processingTime,\n createdIds,\n };\n\n } catch (error) {\n if (error instanceof DetailedValidationError) {\n throw error;\n }\n\n throw new DetailedValidationError('Template processing failed', [\n { field: 'template', message: error instanceof Error ? error.message : 'Unknown error', value: templatePath }\n ]);\n }\n }\n\n /**\n * [EARS-4] Cleans up partial setup artifacts if initialization fails\n */\n async rollbackPartialSetup(setupId: string): Promise<void> {\n try {\n const projectRoot = process.env['GITGOV_ORIGINAL_DIR'] || process.cwd();\n const gitgovPath = pathUtils.join(projectRoot, '.gitgov');\n\n // Check if .gitgov directory exists\n try {\n await fs.access(gitgovPath);\n // Remove .gitgov directory recursively\n await fs.rm(gitgovPath, { recursive: true, force: true });\n } catch {\n // Directory doesn't exist, nothing to clean up\n }\n\n // TODO: Cleanup any other artifacts created during initialization\n // - Remove Git config changes\n // - Delete created actor keys\n // - Restore previous state if needed\n\n } catch (error) {\n // Log error but don't throw to avoid masking original error\n console.warn(`Rollback failed for setup ${setupId}:`, error);\n }\n }\n\n // ===== FASE 2: FUTURE PLATFORM METHODS =====\n\n /**\n * [EARS-19] Gets project information from config.json via ConfigManager (Fase 2)\n */\n async getProjectInfo(): Promise<ProjectInfo | null> {\n try {\n const config = await this.configManager.loadConfig();\n if (!config) {\n return null;\n }\n\n return {\n id: config.projectId,\n name: config.projectName,\n rootCycle: config.rootCycle,\n protocolVersion: config.protocolVersion,\n // TODO: Add createdAt and lastModified from file stats\n };\n\n } catch (error) {\n return null;\n }\n }\n\n /**\n * [EARS-20] Updates project configuration with validation (Fase 2)\n */\n async updateProjectConfig(updates: Partial<GitGovConfig>): Promise<void> {\n try {\n const currentConfig = await this.configManager.loadConfig();\n if (!currentConfig) {\n throw new Error('No existing configuration found');\n }\n\n } catch (error) {\n throw new DetailedValidationError('Configuration update failed', [\n { field: 'config', message: error instanceof Error ? error.message : 'Unknown error', value: updates }\n ]);\n }\n }\n\n /**\n * Generates project report (Fase 2)\n */\n async generateProjectReport(): Promise<ProjectReport> {\n // TODO: Implement project report generation\n throw new Error('NotImplementedError: generateProjectReport not implemented yet');\n }\n\n // ===== PRIVATE HELPER METHODS =====\n\n private async createDirectoryStructure(gitgovPath: string): Promise<void> {\n const directories = [\n 'actors',\n 'cycles',\n 'tasks',\n 'executions',\n 'feedback',\n 'changelogs',\n ];\n\n await fs.mkdir(gitgovPath, { recursive: true });\n\n for (const dir of directories) {\n await fs.mkdir(pathUtils.join(gitgovPath, dir), { recursive: true });\n }\n }\n\n private async copyAgentPrompt(gitgovPath: string): Promise<void> {\n // Copy the official @gitgov agent prompt to the project\n // Try multiple source locations for robustness:\n // 1. From monorepo root (development scenario)\n // 2. From installed package location (npm scenario)\n\n const targetPrompt = pathUtils.join(gitgovPath, 'gitgov');\n\n const potentialSources = [\n pathUtils.join(ConfigManager.findProjectRoot() || process.cwd(), 'docs/gitgov_agent_prompt.md'),\n pathUtils.join(__dirname, '../../prompts/gitgov_agent_prompt.md'),\n ];\n\n for (const sourcePrompt of potentialSources) {\n try {\n await fs.access(sourcePrompt);\n await fs.copyFile(sourcePrompt, targetPrompt);\n console.log(`š @gitgov agent prompt copied to .gitgov/gitgov`);\n return;\n } catch {\n // Try next source location\n continue;\n }\n }\n\n // Graceful degradation: if prompt file doesn't exist in any location\n console.warn('Warning: Could not copy @gitgov agent prompt. Project will work but AI assistant may not have local instructions.');\n }\n\n private generateProjectId(name: string): string {\n return name.toLowerCase().replace(/[^a-z0-9]/g, '-').replace(/-+/g, '-');\n }\n\n private async persistConfiguration(config: GitGovConfig, gitgovPath: string): Promise<void> {\n // TODO: ARCHITECTURAL IMPROVEMENT - Use ConfigManager.saveConfig() instead of direct file write\n // Currently ProjectAdapter writes config.json directly for initialization\n // Future: await this.configManager.saveConfig(config) for better separation of concerns\n // Risk: ConfigManager is used by 40+ files, requires careful backward compatibility\n const configPath = pathUtils.join(gitgovPath, 'config.json');\n await fs.writeFile(configPath, JSON.stringify(config, null, 2), 'utf-8');\n }\n\n private async initializeSession(actorId: string, gitgovPath: string): Promise<void> {\n // TODO: ARCHITECTURAL IMPROVEMENT - Use ConfigManager.initializeSession() instead of direct file write\n // Currently ProjectAdapter creates .session.json directly for initialization\n // Future: await this.configManager.initializeSession(actorId) for better separation of concerns\n // Risk: ConfigManager is used by 40+ files, requires careful backward compatibility\n const sessionPath = pathUtils.join(gitgovPath, '.session.json');\n const session = {\n lastSession: {\n actorId,\n timestamp: new Date().toISOString(),\n },\n actorState: {\n [actorId]: {\n lastSync: new Date().toISOString(),\n },\n },\n };\n\n await fs.writeFile(sessionPath, JSON.stringify(session, null, 2), 'utf-8');\n }\n\n private async setupGitIntegration(projectRoot: string): Promise<void> {\n const gitignorePath = pathUtils.join(projectRoot, '.gitignore');\n const gitignoreContent = `\n# GitGovernance\n.gitgov/.session.json\n.gitgov/actors/*.key\n`;\n\n try {\n // Check if .gitignore exists\n let existingContent = '';\n try {\n existingContent = await fs.readFile(gitignorePath, 'utf-8');\n } catch {\n // File doesn't exist, will create new\n }\n\n // Only add if not already present\n if (existingContent && !existingContent.includes('.gitgov/.session.json')) {\n await fs.appendFile(gitignorePath, gitignoreContent);\n } else if (!existingContent) {\n await fs.writeFile(gitignorePath, gitignoreContent);\n }\n } catch (error) {\n // Non-critical error, continue\n console.warn('Failed to setup Git integration:', error);\n }\n }\n}\n","import type { WorkflowMethodologyRecord } from '../../types';\nimport type { TaskRecord } from '../../types';\nimport type { ActorRecord } from '../../types';\nimport type { FeedbackRecord } from '../../types';\nimport type { CycleRecord } from '../../types';\nimport type { Signature } from '../../types/embedded.types';\nimport { Schemas } from '../../schemas';\nimport { SchemaValidationCache } from '../../schemas/schema_cache';\nimport type { IFeedbackAdapter } from '../feedback_adapter';\nimport defaultConfig from './workflow_methodology_default.json';\nimport scrumConfig from './workflow_methodology_scrum.json';\n\ntype TaskStatus = TaskRecord['status'];\n\nexport type ValidationContext = {\n task: TaskRecord;\n actor?: ActorRecord;\n signatures?: Signature[];\n // Related records for complex rule validation\n feedbacks?: FeedbackRecord[];\n cycles?: CycleRecord[];\n // The target state for a transition, required for signature validation\n transitionTo?: TaskStatus;\n}\n\ntype TransitionRule = {\n to: TaskStatus;\n conditions: NonNullable<NonNullable<WorkflowMethodologyRecord['state_transitions']>[string]>['requires'] | undefined;\n}\n\ntype ViewConfig = NonNullable<WorkflowMethodologyRecord['view_configs']>[string];\n\nexport interface IWorkflowMethodology {\n getTransitionRule(from: TaskStatus, to: TaskStatus, context: ValidationContext): Promise<TransitionRule | null>;\n validateSignature(signature: Signature, context: ValidationContext): Promise<boolean>;\n validateCustomRules(rules: string[], context: ValidationContext): Promise<boolean>;\n getViewConfig(viewName: string): Promise<ViewConfig | null>;\n getAvailableTransitions(from: TaskStatus): Promise<TransitionRule[]>;\n}\n\n/**\n * WorkflowMethodologyAdapter Dependencies - Facade + Dependency Injection Pattern\n */\nexport interface WorkflowMethodologyAdapterDependencies {\n // Configuration Layer\n config: WorkflowMethodologyRecord; // ā
Direct config object (validated)\n\n // Required: Cross-adapter dependencies (critical for custom rules)\n feedbackAdapter: IFeedbackAdapter; // Para assignment_required validation\n}\n\n/**\n * WorkflowMethodologyAdapter - The Configurable Rules Engine\n * \n * Implements Facade + Dependency Injection Pattern for testeable and configurable orchestration.\n * Acts as Mediator between business rules and workflow validation.\n */\nexport class WorkflowMethodologyAdapter implements IWorkflowMethodology {\n private config: WorkflowMethodologyRecord;\n\n constructor(dependencies: WorkflowMethodologyAdapterDependencies) {\n this.validateConfig(dependencies.config, dependencies.config.name || 'custom');\n this.config = dependencies.config;\n }\n\n // Factory methods para configuraciones predefinidas\n static createDefault(feedbackAdapter: IFeedbackAdapter): WorkflowMethodologyAdapter {\n return new WorkflowMethodologyAdapter({\n config: defaultConfig as unknown as WorkflowMethodologyRecord,\n feedbackAdapter\n });\n }\n\n static createScrum(feedbackAdapter: IFeedbackAdapter): WorkflowMethodologyAdapter {\n return new WorkflowMethodologyAdapter({\n config: scrumConfig as unknown as WorkflowMethodologyRecord,\n feedbackAdapter\n });\n }\n\n private validateConfig(config: WorkflowMethodologyRecord, configName: string): void {\n const validator = SchemaValidationCache.getValidatorFromSchema(Schemas.WorkflowMethodologyRecord);\n const isValid = validator(config);\n\n if (!isValid) {\n const errors = validator.errors?.map(err => `${err.instancePath}: ${err.message}`).join(', ') || 'Unknown validation error';\n throw new Error(`Invalid ${configName} configuration: ${errors}`);\n }\n }\n\n /**\n * Gets the current configuration (already loaded and validated)\n */\n private getConfig(): WorkflowMethodologyRecord {\n return this.config;\n }\n\n /**\n * Determines which signature group to use for validation.\n * Checks all available signature groups and returns the first one where\n * the actor has matching capability roles.\n */\n private getApplicableSignatureGroup(signatureRules: Record<string, any>, actor: ActorRecord): string {\n // Try to find a signature group where the actor has matching roles\n for (const [groupName, ruleSet] of Object.entries(signatureRules)) {\n if (groupName === '__default__') continue; // Check __default__ last\n\n const hasMatchingRole = actor.roles?.some(role => ruleSet.capability_roles?.includes(role));\n if (hasMatchingRole) {\n return groupName;\n }\n }\n\n // Fallback to __default__\n return '__default__';\n }\n\n /**\n * Determines if a state transition is legal according to the methodology\n */\n async getTransitionRule(from: TaskStatus, to: TaskStatus, _context: ValidationContext): Promise<TransitionRule | null> {\n const config = this.getConfig();\n\n // Look for transition rule in configuration\n const transitionConfig = config.state_transitions?.[to];\n\n if (!transitionConfig) {\n return null;\n }\n\n // Check if 'from' state is valid for this transition\n if (!transitionConfig.from.includes(from)) {\n return null;\n }\n\n return {\n to,\n conditions: transitionConfig.requires\n };\n }\n\n /**\n * Validates if an actor's signature meets the requirements for a transition\n */\n async validateSignature(signature: Signature, context: ValidationContext): Promise<boolean> {\n const config = this.getConfig();\n\n if (!context.transitionTo) {\n throw new Error('ValidationContext must include \"transitionTo\" for signature validation.');\n }\n const targetState = context.transitionTo;\n\n const actor = context.actor;\n if (!actor) {\n return false;\n }\n\n const transitionConfig = config.state_transitions?.[targetState];\n if (!transitionConfig) return false;\n\n // A transition must be possible from the current task state\n if (!transitionConfig.from.includes(context.task.status)) {\n return false;\n }\n\n const signatureRules = transitionConfig.requires.signatures;\n if (!signatureRules) return true; // No signature required for this transition\n\n // Determine which signature group applies based on actor's roles\n const signatureGroup = this.getApplicableSignatureGroup(signatureRules, actor);\n const ruleSet = signatureRules[signatureGroup];\n if (!ruleSet) return false;\n\n // 1. Check if the signature role matches the required role\n if (signature.role !== ruleSet.role) {\n return false;\n }\n\n // 2. Check if the actor has at least one of the required capability roles\n const hasRequiredCapability = actor.roles?.some(role => ruleSet.capability_roles.includes(role));\n if (!hasRequiredCapability) {\n return false;\n }\n\n // 3. Check for min_approvals (requires context.signatures)\n const allSignaturesForGate = context.signatures || [signature];\n const relevantSignatures = allSignaturesForGate.filter(s => {\n // This is a simplified check for actor capability. A real implementation\n // would need to fetch each signing actor's record. Here we assume\n // the provided actor in the context is the one signing.\n return s.role === ruleSet.role && hasRequiredCapability;\n });\n\n\n if (relevantSignatures.length < ruleSet.min_approvals) {\n return false;\n }\n\n return true;\n }\n\n /**\n * Gets view configuration for mapping states to visual columns\n */\n async getViewConfig(viewName: string): Promise<ViewConfig | null> {\n const config = this.getConfig();\n return config.view_configs?.[viewName] || null;\n }\n\n /**\n * Validates custom rules for a given context\n */\n async validateCustomRules(rules: string[], context: ValidationContext): Promise<boolean> {\n const config = this.getConfig();\n\n for (const ruleId of rules) {\n const customRule = config.custom_rules?.[ruleId];\n\n if (!customRule) {\n console.warn(`Unknown custom rule: ${ruleId}`);\n return false;\n }\n\n let isRuleValid = false;\n\n // Validate based on rule type\n switch (customRule.validation) {\n case 'assignment_required':\n // Validate that task has a resolved assignment feedback record\n const assignment = context.feedbacks?.find(f =>\n f.type === 'assignment' && f.status === 'resolved'\n );\n isRuleValid = !!assignment;\n break;\n\n case 'sprint_capacity':\n // Validate that task is in an active sprint (cycle)\n if (!context.task.cycleIds || context.task.cycleIds.length === 0) {\n isRuleValid = false;\n break;\n }\n const activeCycles = context.cycles?.filter(c => c.status === 'active');\n if (!activeCycles || activeCycles.length === 0) {\n isRuleValid = false;\n break;\n }\n // Check if the task's cycles overlap with any active cycles\n isRuleValid = context.task.cycleIds.some(tcId => activeCycles.some(ac => ac.id === tcId));\n break;\n\n case 'epic_complexity':\n // Validate epic promotion requirements\n const isEpic = context.task.tags?.some(tag => tag.startsWith('epic:'));\n if (!isEpic) {\n isRuleValid = true; // Rule doesn't apply to non-epics\n break;\n }\n // Decomposed epics are paused and have child cycles.\n isRuleValid = context.task.status === 'paused' && (context.task.cycleIds?.length || 0) > 0;\n break;\n\n case 'custom':\n // For now, custom rules just log and return true\n // Future: could be extended for specific use cases\n console.log(`Custom rule '${ruleId}' executed`);\n isRuleValid = true;\n break;\n\n default:\n console.warn(`Unknown validation type: ${customRule.validation}`);\n isRuleValid = false;\n break;\n }\n\n // If any rule fails, the entire validation fails\n if (!isRuleValid) {\n return false;\n }\n }\n\n return true; // All rules passed\n }\n\n\n async getAvailableTransitions(from: TaskStatus): Promise<TransitionRule[]> {\n const config = this.getConfig();\n if (!config.state_transitions) {\n return [];\n }\n\n const available: TransitionRule[] = [];\n for (const toState in config.state_transitions) {\n const transitionConfig = config.state_transitions[toState];\n if (transitionConfig && transitionConfig.from.includes(from)) {\n available.push({\n to: toState as TaskStatus,\n conditions: transitionConfig.requires,\n });\n }\n }\n return available;\n }\n}\n\n\n","{\n \"version\": \"1.0.0\",\n \"name\": \"GitGovernance Default Methodology\",\n \"description\": \"Standard GitGovernance workflow with quality gates and agent collaboration\",\n \"state_transitions\": {\n \"review\": {\n \"from\": [\n \"draft\"\n ],\n \"requires\": {\n \"command\": \"gitgov task submit\",\n \"signatures\": {\n \"__default__\": {\n \"role\": \"submitter\",\n \"capability_roles\": [\n \"author\"\n ],\n \"min_approvals\": 1\n }\n }\n }\n },\n \"ready\": {\n \"from\": [\n \"review\"\n ],\n \"requires\": {\n \"command\": \"gitgov task approve\",\n \"signatures\": {\n \"__default__\": {\n \"role\": \"approver\",\n \"capability_roles\": [\n \"approver:product\"\n ],\n \"min_approvals\": 1\n },\n \"design\": {\n \"role\": \"approver\",\n \"capability_roles\": [\n \"approver:design\"\n ],\n \"min_approvals\": 1\n },\n \"quality\": {\n \"role\": \"approver\",\n \"capability_roles\": [\n \"approver:quality\"\n ],\n \"min_approvals\": 1\n }\n }\n }\n },\n \"active\": {\n \"from\": [\n \"ready\",\n \"paused\"\n ],\n \"requires\": {\n \"event\": \"first_execution_record_created\",\n \"custom_rules\": [\n \"task_must_have_valid_assignment_for_executor\"\n ]\n }\n },\n \"done\": {\n \"from\": [\n \"active\"\n ],\n \"requires\": {\n \"command\": \"gitgov task complete\",\n \"signatures\": {\n \"__default__\": {\n \"role\": \"approver\",\n \"capability_roles\": [\n \"approver:quality\"\n ],\n \"min_approvals\": 1\n }\n }\n }\n },\n \"archived\": {\n \"from\": [\n \"done\"\n ],\n \"requires\": {\n \"event\": \"changelog_record_created\"\n }\n },\n \"paused\": {\n \"from\": [\n \"active\",\n \"review\"\n ],\n \"requires\": {\n \"event\": \"feedback_blocking_created\"\n }\n },\n \"discarded\": {\n \"from\": [\n \"ready\",\n \"active\"\n ],\n \"requires\": {\n \"command\": \"gitgov task cancel\",\n \"signatures\": {\n \"__default__\": {\n \"role\": \"canceller\",\n \"capability_roles\": [\n \"approver:product\",\n \"approver:quality\"\n ],\n \"min_approvals\": 1\n }\n }\n }\n }\n },\n \"custom_rules\": {\n \"task_must_have_valid_assignment_for_executor\": {\n \"description\": \"Task must have a valid assignment before execution can begin\",\n \"validation\": \"assignment_required\"\n },\n \"task_must_be_in_active_sprint\": {\n \"description\": \"Task must belong to an active sprint cycle\",\n \"validation\": \"sprint_capacity\"\n },\n \"epic_promotion_required\": {\n \"description\": \"Complex tasks must be promoted to epic with child cycles\",\n \"validation\": \"epic_complexity\"\n }\n },\n \"view_configs\": {\n \"kanban-4col\": {\n \"columns\": {\n \"Draft\": [\n \"draft\"\n ],\n \"In Progress\": [\n \"review\",\n \"ready\",\n \"active\"\n ],\n \"Review\": [\n \"done\"\n ],\n \"Done\": [\n \"archived\"\n ],\n \"Cancelled\": [\n \"discarded\"\n ]\n },\n \"theme\": \"minimal\",\n \"layout\": \"horizontal\"\n },\n \"kanban-7col\": {\n \"columns\": {\n \"Draft\": [\n \"draft\"\n ],\n \"Review\": [\n \"review\"\n ],\n \"Ready\": [\n \"ready\"\n ],\n \"Active\": [\n \"active\"\n ],\n \"Done\": [\n \"done\"\n ],\n \"Archived\": [\n \"archived\"\n ],\n \"Blocked\": [\n \"paused\"\n ],\n \"Cancelled\": [\n \"discarded\"\n ]\n },\n \"theme\": \"corporate\",\n \"layout\": \"vertical\"\n }\n }\n}","{\n \"version\": \"1.0.0\",\n \"name\": \"Scrum Framework\",\n \"description\": \"Agile Scrum methodology with sprint-based workflow and defined roles\",\n \"state_transitions\": {\n \"review\": {\n \"from\": [\n \"draft\"\n ],\n \"requires\": {\n \"command\": \"gitgov task submit\",\n \"signatures\": {\n \"__default__\": {\n \"role\": \"product_owner\",\n \"capability_roles\": [\n \"product:owner\"\n ],\n \"min_approvals\": 1\n }\n }\n }\n },\n \"ready\": {\n \"from\": [\n \"review\"\n ],\n \"requires\": {\n \"command\": \"gitgov task approve\",\n \"custom_rules\": [\n \"task_fits_in_sprint_capacity\"\n ]\n }\n },\n \"active\": {\n \"from\": [\n \"ready\",\n \"paused\"\n ],\n \"requires\": {\n \"event\": \"sprint_started\",\n \"custom_rules\": [\n \"task_assigned_to_team_member\"\n ]\n }\n },\n \"done\": {\n \"from\": [\n \"active\"\n ],\n \"requires\": {\n \"command\": \"gitgov task complete\",\n \"signatures\": {\n \"__default__\": {\n \"role\": \"scrum_master\",\n \"capability_roles\": [\n \"scrum:master\"\n ],\n \"min_approvals\": 1\n }\n }\n }\n },\n \"archived\": {\n \"from\": [\n \"done\"\n ],\n \"requires\": {\n \"event\": \"changelog_record_created\"\n }\n },\n \"paused\": {\n \"from\": [\n \"active\",\n \"review\"\n ],\n \"requires\": {\n \"event\": \"feedback_blocking_created\"\n }\n }\n },\n \"custom_rules\": {\n \"task_fits_in_sprint_capacity\": {\n \"description\": \"Task story points must fit within remaining sprint capacity\",\n \"validation\": \"sprint_capacity\"\n },\n \"task_assigned_to_team_member\": {\n \"description\": \"Task must be assigned to an active team member\",\n \"validation\": \"assignment_required\"\n }\n },\n \"view_configs\": {\n \"scrum-board\": {\n \"columns\": {\n \"Product Backlog\": [\n \"draft\"\n ],\n \"Sprint Backlog\": [\n \"review\",\n \"ready\"\n ],\n \"In Progress\": [\n \"active\"\n ],\n \"Done\": [\n \"done\"\n ],\n \"Retrospective\": [\n \"archived\"\n ]\n },\n \"theme\": \"default\",\n \"layout\": \"horizontal\"\n },\n \"scrum-detailed\": {\n \"columns\": {\n \"Product Backlog\": [\n \"draft\"\n ],\n \"Groomed\": [\n \"review\"\n ],\n \"Sprint Ready\": [\n \"ready\"\n ],\n \"In Development\": [\n \"active\"\n ],\n \"Demo Ready\": [\n \"done\"\n ],\n \"Sprint Closed\": [\n \"archived\"\n ],\n \"Blocked\": [\n \"paused\"\n ]\n },\n \"theme\": \"corporate\",\n \"layout\": \"vertical\"\n },\n \"scrum-product-owner\": {\n \"columns\": {\n \"Backlog Items\": [\n \"draft\"\n ],\n \"Ready for Sprint\": [\n \"review\"\n ],\n \"Sprint Committed\": [\n \"ready\"\n ],\n \"In Development\": [\n \"active\"\n ],\n \"Ready for Review\": [\n \"done\"\n ],\n \"Released\": [\n \"archived\"\n ],\n \"Issues\": [\n \"paused\",\n \"discarded\"\n ]\n },\n \"theme\": \"minimal\",\n \"layout\": \"grid\"\n },\n \"scrum-developer\": {\n \"columns\": {\n \"To Do\": [\n \"ready\"\n ],\n \"In Progress\": [\n \"active\"\n ],\n \"Code Review\": [\n \"done\"\n ],\n \"Done\": [\n \"archived\"\n ],\n \"Blocked\": [\n \"paused\"\n ]\n },\n \"theme\": \"dark\",\n \"layout\": \"horizontal\"\n },\n \"scrum-master-dashboard\": {\n \"columns\": {\n \"Sprint Planning\": [\n \"draft\",\n \"review\"\n ],\n \"Active Sprint\": [\n \"ready\",\n \"active\"\n ],\n \"Sprint Review\": [\n \"done\"\n ],\n \"Retrospective\": [\n \"archived\"\n ],\n \"Impediments\": [\n \"paused\",\n \"discarded\"\n ]\n },\n \"theme\": \"corporate\",\n \"layout\": \"grid\"\n }\n },\n \"agent_integration\": {\n \"description\": \"Agent integration proposal for Scrum methodology automation\",\n \"required_agents\": [\n {\n \"id\": \"agent:scrum-master\",\n \"engine\": {\n \"type\": \"local\",\n \"entrypoint\": \"@gitgov/agent-scrum-master\"\n },\n \"triggers\": [\n {\n \"event\": \"sprint_end_approaching\",\n \"action\": \"create_sprint_review_tasks\"\n },\n {\n \"event\": \"daily_standup_time\",\n \"action\": \"generate_standup_report\"\n },\n {\n \"event\": \"impediment_detected\",\n \"action\": \"escalate_to_product_owner\"\n }\n ],\n \"knowledge_dependencies\": [\n \"blueprints/scrum_ceremonies.md\",\n \"blueprints/impediment_resolution.md\"\n ]\n },\n {\n \"id\": \"agent:product-owner-assistant\",\n \"engine\": {\n \"type\": \"mcp\",\n \"url\": \"http://localhost:8080/product-owner-mcp\"\n },\n \"triggers\": [\n {\n \"event\": \"backlog_grooming_needed\",\n \"action\": \"prioritize_product_backlog\"\n },\n {\n \"event\": \"sprint_planning_started\",\n \"action\": \"assist_sprint_planning\"\n }\n ],\n \"knowledge_dependencies\": [\n \"blueprints/product_vision.md\",\n \"blueprints/user_stories_template.md\"\n ]\n }\n ],\n \"automation_rules\": [\n {\n \"trigger\": \"sprint_started\",\n \"agent\": \"agent:scrum-master\",\n \"action\": \"create_daily_standup_tasks\"\n },\n {\n \"trigger\": \"task_blocked_for_24h\",\n \"agent\": \"agent:scrum-master\",\n \"action\": \"escalate_impediment\"\n },\n {\n \"trigger\": \"sprint_capacity_exceeded\",\n \"agent\": \"agent:product-owner-assistant\",\n \"action\": \"suggest_scope_reduction\"\n }\n ]\n }\n}","export * from \"./checksum\";\nexport * from \"./signatures\";\n","export * from \"./actor_factory\";\nexport * from \"./agent_factory\";\nexport * from \"./task_factory\";\nexport * from \"./cycle_factory\";\nexport * from \"./execution_factory\";\nexport * from \"./changelog_factory\";\nexport * from \"./feedback_factory\";\nexport * from \"./workflow_methodology_factory\";\nexport * from \"./embedded_metadata_factory\";\n","import type { ValidateFunction } from \"ajv\";\nimport type { WorkflowMethodologyRecord } from \"../types\";\nimport { SchemaValidationCache } from \"../schemas/schema_cache\";\nimport { Schemas } from '../schemas';\n\n// --- Schema Validation ---\nexport function validateWorkflowMethodologyConfigSchema(\n data: unknown\n): [boolean, ValidateFunction[\"errors\"]] {\n const validateSchema = SchemaValidationCache.getValidatorFromSchema(Schemas.WorkflowMethodologyRecord);\n const isValid = validateSchema(data) as boolean;\n return [isValid, validateSchema.errors];\n}\n\n/**\n * Type guard to check if data is a valid WorkflowMethodologyConfig.\n */\nexport function isWorkflowMethodologyConfig(data: unknown): data is WorkflowMethodologyRecord {\n const validateSchema = SchemaValidationCache.getValidatorFromSchema(Schemas.WorkflowMethodologyRecord);\n return validateSchema(data) as boolean;\n}\n\n/**\n * Validates a WorkflowMethodologyConfig and returns detailed validation result.\n * Use this in factories and adapters for comprehensive error reporting.\n */\nexport function validateWorkflowMethodologyConfigDetailed(data: unknown): {\n isValid: boolean;\n errors: Array<{\n field: string;\n message: string;\n value: unknown;\n }>;\n} {\n const [isValid, ajvErrors] = validateWorkflowMethodologyConfigSchema(data);\n\n const formattedErrors = ajvErrors ? ajvErrors.map(error => ({\n field: error.instancePath || error.schemaPath || 'root',\n message: error.message || 'Validation failed',\n value: error.data\n })) : [];\n\n return {\n isValid,\n errors: formattedErrors\n };\n}\n\n/**\n * Validates configuration structure and business rules\n * @param config The workflow methodology configuration to validate\n */\nexport function validateWorkflowMethodologyConfigBusinessRules(\n config: WorkflowMethodologyRecord\n): {\n isValid: boolean;\n errors: Array<{\n field: string;\n message: string;\n value: unknown;\n }>;\n} {\n const errors: Array<{ field: string; message: string; value: unknown }> = [];\n\n // Validate state_transitions have valid structure\n const validStates = ['draft', 'review', 'ready', 'active', 'done', 'archived', 'paused', 'discarded'];\n\n for (const [targetState, transition] of Object.entries(config.state_transitions)) {\n if (!validStates.includes(targetState)) {\n errors.push({\n field: `state_transitions.${targetState}`,\n message: `Invalid target state: ${targetState}`,\n value: targetState\n });\n }\n\n // Validate 'from' states are valid\n if (transition?.from) {\n for (const fromState of transition.from) {\n if (!validStates.includes(fromState)) {\n errors.push({\n field: `state_transitions.${targetState}.from`,\n message: `Invalid source state: ${fromState}`,\n value: fromState\n });\n }\n }\n }\n\n // Validate custom_rules reference existing rules\n if (transition?.requires?.custom_rules && config.custom_rules) {\n for (const ruleId of transition.requires.custom_rules) {\n if (!config.custom_rules[ruleId]) {\n errors.push({\n field: `state_transitions.${targetState}.requires.custom_rules`,\n message: `Custom rule '${ruleId}' not defined in custom_rules section`,\n value: ruleId\n });\n }\n }\n }\n }\n\n // Validate custom_rules have valid validation types\n if (config.custom_rules) {\n const validValidationTypes = ['assignment_required', 'sprint_capacity', 'epic_complexity', 'custom'];\n\n for (const [ruleId, rule] of Object.entries(config.custom_rules)) {\n if (rule && !validValidationTypes.includes(rule.validation)) {\n errors.push({\n field: `custom_rules.${ruleId}.validation`,\n message: `Invalid validation type: ${rule.validation}`,\n value: rule.validation\n });\n }\n }\n }\n\n return {\n isValid: errors.length === 0,\n errors\n };\n}\n","import type { WorkflowMethodologyRecord } from \"../types\";\nimport {\n validateWorkflowMethodologyConfigDetailed,\n validateWorkflowMethodologyConfigBusinessRules\n} from \"../validation/workflow_methodology_validator\";\nimport { DetailedValidationError } from \"../validation/common\";\n\n/**\n * Creates a new, fully-formed WorkflowMethodologyConfig with validation.\n * Follows the same pattern as createTaskRecord, createActorRecord, etc.\n */\nexport async function createWorkflowMethodologyConfig(\n payload: Partial<WorkflowMethodologyRecord>\n): Promise<WorkflowMethodologyRecord> {\n\n // Build config with defaults for optional fields\n const config: WorkflowMethodologyRecord = {\n version: payload.version || '1.0.0',\n name: payload.name || 'Custom Methodology',\n description: payload.description,\n state_transitions: payload.state_transitions || {\n review: {\n from: ['draft'],\n requires: {\n command: 'gitgov task submit',\n signatures: {\n '__default__': {\n role: 'submitter',\n capability_roles: ['author'],\n min_approvals: 1\n }\n }\n }\n }\n },\n custom_rules: payload.custom_rules,\n view_configs: payload.view_configs || {\n 'kanban-4col': {\n columns: {\n 'Draft': ['draft'],\n 'In Progress': ['review', 'ready', 'active'],\n 'Done': ['done', 'archived']\n },\n theme: 'minimal',\n layout: 'horizontal'\n }\n },\n ...payload,\n } as WorkflowMethodologyRecord;\n\n // Use validator to check schema compliance with detailed errors\n const schemaValidation = validateWorkflowMethodologyConfigDetailed(config);\n if (!schemaValidation.isValid) {\n throw new DetailedValidationError('WorkflowMethodologyConfig', schemaValidation.errors);\n }\n\n // Use business rules validator for additional validation\n const businessRulesValidation = validateWorkflowMethodologyConfigBusinessRules(config);\n if (!businessRulesValidation.isValid) {\n throw new DetailedValidationError('WorkflowMethodologyConfig (Business Rules)', businessRulesValidation.errors);\n }\n\n return config;\n}\n\n/**\n * Creates a default GitGovernance workflow methodology configuration\n */\nexport async function createDefaultWorkflowMethodologyConfig(): Promise<WorkflowMethodologyRecord> {\n return createWorkflowMethodologyConfig({\n version: '1.0.0',\n name: 'GitGovernance Default Methodology',\n description: 'Standard GitGovernance workflow with quality gates and agent collaboration',\n state_transitions: {\n review: {\n from: ['draft'],\n requires: {\n command: 'gitgov task submit',\n signatures: {\n '__default__': {\n role: 'submitter',\n capability_roles: ['author'],\n min_approvals: 1\n }\n }\n }\n },\n ready: {\n from: ['review'],\n requires: {\n command: 'gitgov task approve',\n signatures: {\n '__default__': {\n role: 'approver',\n capability_roles: ['approver:product'],\n min_approvals: 1\n },\n 'design': {\n role: 'approver',\n capability_roles: ['approver:design'],\n min_approvals: 1\n },\n 'quality': {\n role: 'approver',\n capability_roles: ['approver:quality'],\n min_approvals: 1\n }\n }\n }\n },\n active: {\n from: ['ready'],\n requires: {\n event: 'first_execution_record_created',\n custom_rules: ['task_must_have_valid_assignment_for_executor']\n }\n },\n done: {\n from: ['active'],\n requires: {\n command: 'gitgov task complete',\n signatures: {\n '__default__': {\n role: 'approver',\n capability_roles: ['approver:quality'],\n min_approvals: 1\n }\n }\n }\n },\n archived: {\n from: ['done'],\n requires: {\n event: 'changelog_record_created'\n }\n },\n paused: {\n from: ['active', 'review'],\n requires: {\n event: 'feedback_blocking_created'\n }\n }\n },\n custom_rules: {\n 'task_must_have_valid_assignment_for_executor': {\n description: 'Task must have a valid assignment before execution can begin',\n validation: 'assignment_required'\n },\n 'task_must_be_in_active_sprint': {\n description: 'Task must belong to an active sprint cycle',\n validation: 'sprint_capacity'\n },\n 'epic_promotion_required': {\n description: 'Complex tasks must be promoted to epic with child cycles',\n validation: 'epic_complexity'\n }\n },\n view_configs: {\n 'kanban-4col': {\n columns: {\n 'Draft': ['draft'],\n 'In Progress': ['review', 'ready', 'active'],\n 'Review': ['done'],\n 'Done': ['archived']\n },\n theme: 'minimal',\n layout: 'horizontal'\n },\n 'kanban-7col': {\n columns: {\n 'Draft': ['draft'],\n 'Review': ['review'],\n 'Ready': ['ready'],\n 'Active': ['active'],\n 'Done': ['done'],\n 'Archived': ['archived'],\n 'Blocked': ['paused']\n },\n theme: 'corporate',\n layout: 'vertical'\n }\n }\n });\n}\n","import type { EmbeddedMetadataRecord, GitGovRecordPayload } from '../types';\nimport type { Signature, EmbeddedMetadataHeader } from '../types/embedded.types';\nimport { validateEmbeddedMetadataDetailed } from '../validation/embedded_metadata_validator';\nimport { DetailedValidationError } from '../validation/common';\nimport { calculatePayloadChecksum } from '../crypto/checksum';\nimport { signPayload } from '../crypto/signatures';\n\n/**\n * Configuration for signature generation\n * Extends Signature with privateKey for signing\n */\nexport type SignatureConfig = Partial<Pick<Signature, 'keyId' | 'role' | 'notes'>> & {\n /** Private key for signing (if not provided, creates unsigned test signature) */\n privateKey?: string;\n};\n\n/**\n * Options for creating an EmbeddedMetadataRecord\n */\nexport type CreateEmbeddedMetadataOptions = {\n /** Header configuration (partial override, excludes auto-generated fields) */\n header?: Partial<Pick<EmbeddedMetadataHeader, 'version' | 'type' | 'schemaUrl' | 'schemaChecksum'>>;\n /** Signature configuration (if not provided, uses default test signature) */\n signature?: SignatureConfig;\n /** Custom signatures array (if provided, overrides signature config) */\n signatures?: Signature[];\n};\n\n/**\n * Creates a test signature for development/testing purposes (unsigned)\n * Use this only for testing when you don't have a real private key\n * \n * @param keyId - The key ID for the signature (default: 'human:test-user')\n * @param role - The role for the signature (default: 'author')\n * @param notes - Notes for the signature (default: 'Test signature - unsigned')\n * @returns Signature object (with dummy signature value)\n */\nexport function createTestSignature(\n keyId: string = 'human:test-user',\n role: string = 'author',\n notes: string = 'Test signature - unsigned'\n): Signature {\n const timestamp = Math.floor(Date.now() / 1000);\n return {\n keyId,\n role,\n notes,\n signature: 'dGVzdHNpZ25hdHVyZWJhc2U2NGVuY29kZWRkdW1teWZvcnRlc3RpbmdwdXJwb3Nlc29ubHlub3RyZWFsY3J5cHRvZ3JhcGh5PT0=', // Dummy 88-char base64 for testing (matches Ed25519 signature length)\n timestamp\n };\n}\n\n/**\n * Infers the header type from the payload structure\n * \n * @param payload - The record payload\n * @returns The inferred type string\n */\nfunction inferTypeFromPayload(payload: GitGovRecordPayload): string {\n // Check for distinctive properties of each record type\n if ('engine' in payload) return 'agent';\n if ('taskId' in payload && 'result' in payload) return 'execution';\n if ('relatedTasks' in payload && 'completedAt' in payload) return 'changelog';\n if ('entityType' in payload && 'entityId' in payload) return 'feedback';\n if ('status' in payload && 'taskIds' in payload) return 'cycle';\n if ('priority' in payload && 'description' in payload) return 'task';\n if ('displayName' in payload && 'publicKey' in payload) return 'actor';\n\n return 'custom';\n}\n\n\n/**\n * Creates a complete EmbeddedMetadataRecord with validation\n * \n * @param payload - The record payload (ActorRecord, TaskRecord, etc.)\n * @param options - Optional configuration for the embedded metadata\n * @returns Promise<EmbeddedMetadataRecord<T>> - The validated embedded metadata record\n * \n * @example\n * ```typescript\n * const actorPayload: ActorRecord = {\n * id: 'human:john-doe',\n * type: 'human',\n * displayName: 'John Doe',\n * publicKey: 'abc123...',\n * roles: ['developer']\n * };\n * \n * const embedded = await createEmbeddedMetadataRecord(actorPayload);\n * ```\n */\nexport async function createEmbeddedMetadataRecord<T extends GitGovRecordPayload>(\n payload: T,\n options: CreateEmbeddedMetadataOptions = {}\n): Promise<EmbeddedMetadataRecord<T>> {\n const inferredType = inferTypeFromPayload(payload);\n const type = options.header?.type || inferredType;\n\n // Calculate real payload checksum using crypto module\n const payloadChecksum = calculatePayloadChecksum(payload);\n\n // Generate signature(s)\n let signatures: Signature[];\n if (options.signatures) {\n // Use provided signatures array\n signatures = options.signatures;\n } else if (options.signature?.privateKey) {\n // Sign with provided private key\n const keyId = options.signature.keyId || 'human:test-user';\n const role = options.signature.role || 'author';\n const notes = options.signature.notes || 'Created via factory';\n signatures = [signPayload(payload, options.signature.privateKey, keyId, role, notes)];\n } else {\n // Create unsigned test signature\n const keyId = options.signature?.keyId || 'human:test-user';\n const role = options.signature?.role || 'author';\n const notes = options.signature?.notes || 'Test signature - unsigned';\n signatures = [createTestSignature(keyId, role, notes)];\n }\n\n // Build header (using Record for flexibility, will be validated)\n const header: Record<string, unknown> = {\n version: '1.0', // Always 1.0 (schema enforces this)\n type: type,\n payloadChecksum,\n signatures,\n ...(type === 'custom' && {\n schemaUrl: options.header?.schemaUrl,\n schemaChecksum: options.header?.schemaChecksum\n })\n };\n\n const embeddedRecord = {\n header,\n payload\n } as EmbeddedMetadataRecord<T>;\n\n // Validate the complete embedded metadata record\n const validation = validateEmbeddedMetadataDetailed(embeddedRecord);\n if (!validation.isValid) {\n throw new DetailedValidationError('EmbeddedMetadataRecord', validation.errors);\n }\n\n return embeddedRecord;\n}\n\n","export * from './actor_validator';\nexport * from './agent_validator';\nexport * from './task_validator';\nexport * from './cycle_validator';\nexport * from './execution_validator';\nexport * from './changelog_validator';\nexport * from './feedback_validator';\nexport * from './embedded_metadata_validator';\nexport * from './workflow_methodology_validator';\nexport type { ValidationResult } from './errors';\n","export * from \"./generated\";\nexport * from \"./common.types\";\nexport * from \"./embedded.types\";\n","export * from './event_bus';\nexport * from './types';\n","import { EventEmitter } from 'events';\n\nimport type {\n BaseEvent,\n GitGovEvent,\n EventHandler,\n EventSubscription\n} from './types';\n\n// Generate unique subscription IDs\nfunction generateSubscriptionId(): string {\n return `subscription:${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n}\n\n/**\n * Event Stream interface - Contract for both Local and Global bus implementations\n */\nexport interface IEventStream {\n /**\n * Publish an event to the bus\n */\n publish(event: BaseEvent): void;\n\n /**\n * Subscribe to events of a specific type\n */\n subscribe<T extends BaseEvent = BaseEvent>(\n eventType: string,\n handler: EventHandler<T>\n ): EventSubscription;\n\n /**\n * Unsubscribe from events\n */\n unsubscribe(subscriptionId: string): boolean;\n\n /**\n * Get all active subscriptions\n */\n getSubscriptions(): EventSubscription[];\n\n /**\n * Clear all subscriptions (for testing/cleanup)\n */\n clearSubscriptions(): void;\n\n /**\n * Wait for all pending event handlers to complete (for testing)\n */\n waitForIdle(options?: { timeout?: number }): Promise<void>;\n}\n\n/**\n * Local EventBus implementation using Node.js EventEmitter\n * \n * This is the \"Free Tier\" implementation that operates in-memory\n * and provides synchronous event delivery for local-first usage.\n * \n * Design Principles:\n * - Decoupled Producers: Adapters emit events without knowing consumers\n * - Pluggable Consumers: Event handlers can be added/removed dynamically \n * - Type Safety: Full TypeScript support for all event types\n * - Performance: In-memory delivery with minimal overhead\n */\nexport class EventBus implements IEventStream {\n private emitter: EventEmitter;\n private subscriptions: Map<string, EventSubscription>;\n private pendingHandlers: Set<Promise<void>>;\n\n constructor() {\n this.emitter = new EventEmitter();\n this.subscriptions = new Map();\n this.pendingHandlers = new Set();\n\n // Increase max listeners for high-throughput scenarios\n this.emitter.setMaxListeners(100);\n }\n\n /**\n * Publish an event to all subscribers\n * \n * @param event - The event to publish\n */\n publish(event: BaseEvent): void {\n // Validate event structure\n if (!event.type || typeof event.type !== 'string') {\n throw new Error('Event must have a valid type string');\n }\n\n if (!event.timestamp || typeof event.timestamp !== 'number') {\n throw new Error('Event must have a valid timestamp number');\n }\n\n if (!event.source || typeof event.source !== 'string') {\n throw new Error('Event must have a valid source string');\n }\n\n // Emit the event\n this.emitter.emit(event.type, event);\n\n // Also emit on wildcard for debugging/monitoring\n this.emitter.emit('*', event);\n }\n\n /**\n * Subscribe to events of a specific type\n * \n * @param eventType - The event type to subscribe to\n * @param handler - The handler function to call when event is received\n * @returns EventSubscription object with subscription details\n */\n subscribe<T extends BaseEvent = BaseEvent>(\n eventType: string,\n handler: EventHandler<T>\n ): EventSubscription {\n // Generate unique subscription ID\n const subscriptionId = generateSubscriptionId();\n\n // Wrap handler to catch errors, provide context, AND track pending handlers\n const wrappedHandler = async (event: T) => {\n // Create promise that tracks this handler execution\n const handlerPromise = (async () => {\n try {\n await handler(event);\n } catch (error) {\n console.error(`Error in event handler for ${eventType}:`, error);\n // In production, this could emit an error event or log to monitoring\n }\n })();\n\n // Track this promise\n this.pendingHandlers.add(handlerPromise);\n\n // Remove from tracking when done\n handlerPromise.finally(() => {\n this.pendingHandlers.delete(handlerPromise);\n });\n\n // Don't await - let it run in background (fire-and-forget for publish())\n // But tests can call waitForIdle() to wait for all handlers\n };\n\n // Create subscription object (store wrapped handler for unsubscribing)\n const subscription: EventSubscription = {\n id: subscriptionId,\n eventType,\n handler: wrappedHandler as EventHandler, // Store wrapped handler\n metadata: {\n createdAt: Date.now()\n }\n };\n\n // Register with EventEmitter\n this.emitter.on(eventType, wrappedHandler);\n\n // Store subscription for management\n this.subscriptions.set(subscriptionId, subscription);\n\n return subscription;\n }\n\n /**\n * Unsubscribe from events\n * \n * @param subscriptionId - The subscription ID to remove\n * @returns true if subscription was found and removed, false otherwise\n */\n unsubscribe(subscriptionId: string): boolean {\n const subscription = this.subscriptions.get(subscriptionId);\n if (!subscription) {\n return false;\n }\n\n // Remove from EventEmitter\n this.emitter.removeListener(subscription.eventType, subscription.handler);\n\n // Remove from our tracking\n this.subscriptions.delete(subscriptionId);\n\n return true;\n }\n\n /**\n * Get all active subscriptions\n * \n * @returns Array of all active subscriptions\n */\n getSubscriptions(): EventSubscription[] {\n return Array.from(this.subscriptions.values());\n }\n\n /**\n * Clear all subscriptions (for testing/cleanup)\n */\n clearSubscriptions(): void {\n this.emitter.removeAllListeners();\n this.subscriptions.clear();\n }\n\n /**\n * Get subscription count for a specific event type\n * \n * @param eventType - The event type to count subscribers for\n * @returns Number of active subscriptions for the event type\n */\n getSubscriptionCount(eventType: string): number {\n return this.emitter.listenerCount(eventType);\n }\n\n /**\n * Get all event types that have active subscriptions\n * \n * @returns Array of event types with active subscriptions\n */\n getActiveEventTypes(): string[] {\n return this.emitter.eventNames() as string[];\n }\n\n /**\n * Subscribe to all events (wildcard subscription)\n * Useful for debugging, monitoring, or logging\n * \n * @param handler - Handler that will receive all events\n * @returns EventSubscription object\n */\n subscribeToAll(handler: EventHandler<BaseEvent>): EventSubscription {\n return this.subscribe('*', handler);\n }\n\n /**\n * Wait for all pending event handlers to complete.\n * This is primarily useful for testing to ensure event handlers finish before assertions.\n * \n * In production, events are fire-and-forget for performance.\n * In tests, use this to synchronize and avoid race conditions.\n * \n * @param options - Optional configuration\n * @param options.timeout - Maximum time to wait in ms (default: 5000)\n * @returns Promise that resolves when all handlers complete or timeout occurs\n * \n * @example\n * ```typescript\n * await feedbackAdapter.create(...); // publishes event\n * await eventBus.waitForIdle(); // wait for BacklogAdapter.handleFeedbackCreated()\n * const task = await backlogAdapter.getTask(taskId);\n * expect(task.status).toBe('paused'); // now safe to assert\n * ```\n */\n async waitForIdle(options: { timeout?: number } = {}): Promise<void> {\n const timeout = options.timeout ?? 5000;\n const startTime = Date.now();\n\n while (this.pendingHandlers.size > 0) {\n // Check timeout\n if (Date.now() - startTime > timeout) {\n const pendingCount = this.pendingHandlers.size;\n console.warn(`EventBus.waitForIdle() timeout after ${timeout}ms with ${pendingCount} handlers still pending`);\n break;\n }\n\n // Wait for current batch of handlers\n if (this.pendingHandlers.size > 0) {\n await Promise.race([\n Promise.all(Array.from(this.pendingHandlers)),\n new Promise(resolve => setTimeout(resolve, 10)) // Re-check every 10ms\n ]);\n }\n }\n }\n}\n\n/**\n * Singleton instance for application-wide event bus usage\n */\nexport const eventBus = new EventBus();\n\n/**\n * Type-safe event publisher helper\n * Ensures events conform to GitGovEvent union type\n */\nexport function publishEvent(event: GitGovEvent): void {\n eventBus.publish(event);\n}\n\n/**\n * Type-safe event subscriber helper\n * Provides better TypeScript inference for specific event types\n */\nexport function subscribeToEvent<T extends GitGovEvent>(\n eventType: T['type'],\n handler: EventHandler<T>\n): EventSubscription {\n return eventBus.subscribe(eventType, handler);\n}\n","export { DiagramGenerator, DiagramMetrics } from './diagram_generator';\nexport {\n MermaidRenderer,\n ContentSanitizer,\n MermaidValidator,\n type DiagramOptions,\n RenderingError\n} from './mermaid_renderer';\nexport {\n RelationshipAnalyzer,\n type RelationshipGraph,\n type DiagramNode,\n type DiagramEdge,\n\n CircularDependencyError\n} from './relationship_analyzer';\n","import type { TaskRecord } from '../types';\nimport type { CycleRecord } from '../types';\nimport { DetailedValidationError } from '../validation/common';\n\n/**\n * Specialized module for validating graph input data\n * Follows the Module pattern for technical capabilities\n */\nexport class GraphValidator {\n /**\n * Validates record integrity before processing\n */\n static validateRecordIntegrity(cycles: CycleRecord[], tasks: TaskRecord[]): void {\n if (!Array.isArray(cycles) || !Array.isArray(tasks)) {\n throw new DetailedValidationError('RelationshipAnalyzer', [\n { field: 'cycles', message: 'must be an array', value: cycles },\n { field: 'tasks', message: 'must be an array', value: tasks }\n ]);\n }\n\n this.validateCycles(cycles);\n this.validateTasks(tasks);\n }\n\n private static validateCycles(cycles: CycleRecord[]): void {\n for (let i = 0; i < cycles.length; i++) {\n const cycle = cycles[i];\n if (!cycle) {\n throw new DetailedValidationError('CycleRecord', [\n { field: `index_${i}`, message: 'cycle is undefined', value: cycle }\n ]);\n }\n\n try {\n if (!cycle.id || typeof cycle.id !== 'string') {\n throw new DetailedValidationError('CycleRecord', [\n { field: 'id', message: 'must be a non-empty string', value: cycle.id }\n ]);\n }\n\n if (!cycle.title || typeof cycle.title !== 'string') {\n throw new DetailedValidationError('CycleRecord', [\n { field: 'title', message: 'must be a non-empty string', value: cycle.title }\n ]);\n }\n } catch (error) {\n if (error instanceof DetailedValidationError) {\n throw error;\n }\n throw new DetailedValidationError('CycleRecord', [\n { field: `index_${i}`, message: error instanceof Error ? error.message : String(error), value: cycle }\n ]);\n }\n }\n }\n\n private static validateTasks(tasks: TaskRecord[]): void {\n for (let i = 0; i < tasks.length; i++) {\n const task = tasks[i];\n if (!task) {\n throw new DetailedValidationError('TaskRecord', [\n { field: `index_${i}`, message: 'task is undefined', value: task }\n ]);\n }\n\n const sourceFile = this.getSourceFile(task);\n\n try {\n if (!task.id || typeof task.id !== 'string') {\n throw new DetailedValidationError('TaskRecord', [\n { field: 'id', message: 'must be a non-empty string', value: task.id }\n ]);\n }\n\n if (!task.title || typeof task.title !== 'string') {\n throw new DetailedValidationError('TaskRecord', [\n { field: 'title', message: 'must be a non-empty string', value: task.title }\n ]);\n }\n\n if (!task.description || typeof task.description !== 'string') {\n throw new DetailedValidationError('TaskRecord', [\n { field: 'description', message: 'must be a non-empty string', value: task.description }\n ]);\n }\n } catch (error) {\n if (error instanceof DetailedValidationError) {\n throw error;\n }\n const fileInfo = sourceFile !== 'unknown' ? `\\nš File: .gitgov/tasks/${sourceFile}` : '';\n throw new DetailedValidationError('TaskRecord', [\n { field: `index_${i}`, message: `${error instanceof Error ? error.message : String(error)}${fileInfo}\\nš” Check this file for missing or invalid fields in payload.`, value: task }\n ]);\n }\n }\n }\n\n /**\n * Safely extracts source file information from task record\n */\n private static getSourceFile(task: TaskRecord): string {\n if (task && typeof task === 'object' && '_sourceFile' in task) {\n const sourceFile = (task as TaskRecord & { _sourceFile?: unknown })._sourceFile;\n return typeof sourceFile === 'string' ? sourceFile : 'unknown';\n }\n return 'unknown';\n }\n}","import type { TaskRecord } from '../types';\nimport type { CycleRecord } from '../types';\nimport { GraphValidator } from './graph_validator';\n\nexport interface DiagramNode {\n id: string;\n type: 'cycle' | 'epic-task' | 'task';\n title: string;\n status?: string;\n tags?: string[];\n originalId: string;\n}\n\nexport interface DiagramEdge {\n from: string;\n to: string;\n type: 'hierarchy';\n}\n\nexport interface RelationshipGraph {\n nodes: DiagramNode[];\n edges: DiagramEdge[];\n metadata: {\n nodeCount: number;\n edgeCount: number;\n generatedAt: string;\n duplicatesRemoved?: {\n nodes: number;\n edges: number;\n };\n };\n}\n\nexport class CircularDependencyError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'CircularDependencyError';\n }\n}\n\nexport class RelationshipAnalyzer {\n\n /**\n * Analyzes relationships between cycles and tasks to build a complete graph\n */\n analyzeRelationships(cycles: CycleRecord[], tasks: TaskRecord[]): RelationshipGraph {\n // Validate record integrity using specialized validator\n GraphValidator.validateRecordIntegrity(cycles, tasks);\n\n const rawGraph = this.buildRawGraph(cycles, tasks);\n const cleanGraph = this.processAndValidateGraph(rawGraph);\n\n return this.createRelationshipGraph(rawGraph, cleanGraph);\n }\n\n /**\n * Builds the initial graph with potential duplicates\n */\n private buildRawGraph(cycles: CycleRecord[], tasks: TaskRecord[]): { nodes: DiagramNode[], edges: DiagramEdge[] } {\n const rawNodes = this.buildNodes(cycles, tasks);\n const rawEdges = this.buildEdges(cycles, tasks, rawNodes);\n return { nodes: rawNodes, edges: rawEdges };\n }\n\n /**\n * Processes raw graph to remove duplicates and validate structure\n */\n private processAndValidateGraph(rawGraph: { nodes: DiagramNode[], edges: DiagramEdge[] }): { nodes: DiagramNode[], edges: DiagramEdge[] } {\n // Detect and report duplicates as warnings\n this.reportDuplicateWarnings(rawGraph.nodes, rawGraph.edges);\n\n // Deduplicate nodes and edges\n const nodes = this.deduplicateNodes(rawGraph.nodes);\n const edges = this.deduplicateEdges(rawGraph.edges);\n\n // Detect circular dependencies\n this.detectCircularDependencies(edges);\n\n return { nodes, edges };\n }\n\n /**\n * Creates the final RelationshipGraph with metadata\n */\n private createRelationshipGraph(\n rawGraph: { nodes: DiagramNode[], edges: DiagramEdge[] },\n cleanGraph: { nodes: DiagramNode[], edges: DiagramEdge[] }\n ): RelationshipGraph {\n return {\n nodes: cleanGraph.nodes,\n edges: cleanGraph.edges,\n metadata: {\n nodeCount: cleanGraph.nodes.length,\n edgeCount: cleanGraph.edges.length,\n generatedAt: new Date().toISOString(),\n duplicatesRemoved: {\n nodes: rawGraph.nodes.length - cleanGraph.nodes.length,\n edges: rawGraph.edges.length - cleanGraph.edges.length,\n },\n },\n };\n }\n\n\n\n /**\n * Generates clean node ID for Mermaid syntax (removes timestamp, converts hyphens)\n */\n generateNodeId(record: CycleRecord | TaskRecord): string {\n return record.id\n .replace(/^\\d+-/, '') // Remove timestamp prefix\n .replace(/-/g, '_'); // Convert hyphens to underscores\n }\n\n\n\n /**\n * Builds all nodes from cycles and tasks\n */\n private buildNodes(cycles: CycleRecord[], tasks: TaskRecord[]): DiagramNode[] {\n const nodes: DiagramNode[] = [];\n\n // Add cycle nodes\n for (const cycle of cycles) {\n nodes.push({\n id: this.generateNodeId(cycle),\n type: 'cycle',\n title: cycle.title,\n status: cycle.status,\n tags: cycle.tags || [],\n originalId: cycle.id,\n });\n }\n\n // Add task nodes (both epic and regular)\n for (const task of tasks) {\n const isEpic = this.isEpicTask(task);\n\n // Use title field for task display\n const title = task.title || 'Untitled Task';\n\n const node: DiagramNode = {\n id: this.generateNodeId(task),\n type: isEpic ? 'epic-task' : 'task',\n title,\n status: task.status,\n originalId: task.id,\n };\n if (task.tags) {\n node.tags = task.tags;\n }\n nodes.push(node);\n }\n\n return nodes;\n }\n\n /**\n * Builds all hierarchical edges from protocol relationships\n */\n private buildEdges(cycles: CycleRecord[], _tasks: TaskRecord[], nodes: DiagramNode[]): DiagramEdge[] {\n const edges: DiagramEdge[] = [];\n const nodeMap = new Map(nodes.map(n => [n.originalId, n.id]));\n\n // Build cycle -> child cycle relationships\n for (const cycle of cycles) {\n if (cycle.childCycleIds) {\n for (const childId of cycle.childCycleIds) {\n const fromId = nodeMap.get(cycle.id);\n const toId = nodeMap.get(childId);\n\n if (fromId && toId) {\n edges.push({\n from: fromId,\n to: toId,\n type: 'hierarchy',\n });\n }\n }\n }\n\n // Build cycle -> task relationships \n if (cycle.taskIds) {\n for (const taskId of cycle.taskIds) {\n const fromId = nodeMap.get(cycle.id);\n const toId = nodeMap.get(taskId);\n\n if (fromId && toId) {\n edges.push({\n from: fromId,\n to: toId,\n type: 'hierarchy',\n });\n }\n }\n }\n }\n\n return edges;\n }\n\n /**\n * Checks if a task is an epic based on tags\n */\n private isEpicTask(task: TaskRecord): boolean {\n return task.tags?.some(tag => tag.startsWith('epic:')) ?? false;\n }\n\n /**\n * Detects circular dependencies in the graph\n */\n private detectCircularDependencies(edges: DiagramEdge[]): void {\n const graph = new Map<string, string[]>();\n\n // Build adjacency list\n for (const edge of edges) {\n if (!graph.has(edge.from)) {\n graph.set(edge.from, []);\n }\n graph.get(edge.from)!.push(edge.to);\n }\n\n // DFS to detect cycles with path tracking\n const visited = new Set<string>();\n const recursionStack = new Set<string>();\n const path: string[] = [];\n\n for (const node of graph.keys()) {\n if (!visited.has(node)) {\n const cyclePath = this.findCycleDFS(node, graph, visited, recursionStack, path);\n if (cyclePath.length > 0) {\n const cycleDescription = this.formatCycleError(cyclePath);\n throw new CircularDependencyError(cycleDescription);\n }\n }\n }\n }\n\n /**\n * DFS helper for circular dependency detection with path tracking\n */\n private findCycleDFS(\n node: string,\n graph: Map<string, string[]>,\n visited: Set<string>,\n recursionStack: Set<string>,\n path: string[]\n ): string[] {\n visited.add(node);\n recursionStack.add(node);\n path.push(node);\n\n const neighbors = graph.get(node) || [];\n for (const neighbor of neighbors) {\n if (!visited.has(neighbor)) {\n const cyclePath = this.findCycleDFS(neighbor, graph, visited, recursionStack, path);\n if (cyclePath.length > 0) {\n return cyclePath;\n }\n } else if (recursionStack.has(neighbor)) {\n // Found a cycle - extract the cycle path\n const cycleStartIndex = path.indexOf(neighbor);\n return path.slice(cycleStartIndex).concat([neighbor]);\n }\n }\n\n recursionStack.delete(node);\n path.pop();\n return [];\n }\n\n /**\n * Formats a circular dependency error with helpful context\n */\n private formatCycleError(cyclePath: string[]): string {\n const cycleNodes = cyclePath.slice(0, -1); // Remove duplicate at end\n const nodeNames = cycleNodes.map(nodeId => {\n // Try to extract readable name from node ID\n const cleanId = nodeId.replace(/^(cycle_|task_)/, '').replace(/_/g, '-');\n return cleanId;\n });\n\n let message = `Circular dependency detected in GitGovernance entities:\\n\\n`;\n message += `š Dependency Cycle:\\n`;\n\n for (let i = 0; i < cycleNodes.length; i++) {\n const current = nodeNames[i];\n const next = nodeNames[(i + 1) % nodeNames.length];\n message += ` ${current} ā ${next}\\n`;\n }\n\n message += `\\nš” To fix this issue:\\n`;\n message += ` 1. Review the childCycleIds in these cycle files:\\n`;\n cycleNodes.forEach(nodeId => {\n const cleanId = nodeId.replace(/^cycle_/, '').replace(/_/g, '-');\n message += ` - .gitgov/cycles/${cleanId}.json\\n`;\n });\n message += ` 2. Remove one of the circular references to break the cycle\\n`;\n message += ` 3. Consider if the dependency relationship is actually needed\\n`;\n\n return message;\n }\n\n /**\n * Reports duplicate nodes and edges as console warnings\n */\n private reportDuplicateWarnings(nodes: DiagramNode[], edges: DiagramEdge[]): void {\n // Analyze node duplicates\n const nodeCount = new Map<string, { count: number, sources: string[] }>();\n for (const node of nodes) {\n const current = nodeCount.get(node.id) || { count: 0, sources: [] };\n current.count++;\n current.sources.push(node.originalId);\n nodeCount.set(node.id, current);\n }\n\n const duplicateNodes = Array.from(nodeCount.entries())\n .filter(([_, data]) => data.count > 1);\n\n // Analyze edge duplicates\n const edgeCount = new Map<string, number>();\n for (const edge of edges) {\n const edgeKey = `${edge.from}->${edge.to}`;\n edgeCount.set(edgeKey, (edgeCount.get(edgeKey) || 0) + 1);\n }\n\n const duplicateEdges = Array.from(edgeCount.entries())\n .filter(([_, count]) => count > 1);\n\n // Report warnings if duplicates found\n if (duplicateNodes.length > 0 || duplicateEdges.length > 0) {\n console.warn('\\nā ļø GitGovernance Data Quality Warnings:');\n\n if (duplicateNodes.length > 0) {\n console.warn('\\nš¦ Duplicate Nodes Detected:');\n duplicateNodes.forEach(([id, data]) => {\n const cleanSources = [...new Set(data.sources)]; // Remove duplicate sources\n console.warn(` ⢠${id} (appears ${data.count} times)`);\n if (cleanSources.length > 1) {\n console.warn(` Sources: ${cleanSources.join(', ')}`);\n console.warn(` š” Fix: Check for duplicate cycle/task IDs in .gitgov/ files`);\n } else {\n console.warn(` Source: ${cleanSources[0]} (same ID referenced multiple times)`);\n console.warn(` š” Fix: Check for duplicate childCycleIds/taskIds references`);\n }\n });\n }\n\n if (duplicateEdges.length > 0) {\n console.warn('\\nš Duplicate Edges Detected:');\n duplicateEdges.forEach(([edge, count]) => {\n console.warn(` ⢠${edge} (appears ${count} times)`);\n });\n console.warn(' š” Fix: Check for duplicate references in childCycleIds/taskIds arrays');\n }\n\n console.warn('\\nāļø Auto-deduplication: Duplicates will be removed from the generated diagram');\n console.warn('š Recommendation: Run `gitgov lint` to identify and fix data quality issues\\n');\n }\n }\n\n /**\n * Removes duplicate nodes based on their ID (O(n) performance)\n */\n private deduplicateNodes(nodes: DiagramNode[]): DiagramNode[] {\n const nodeMap = new Map<string, DiagramNode>();\n\n // Use Map to automatically handle deduplication while preserving first occurrence\n for (const node of nodes) {\n if (!nodeMap.has(node.id)) {\n nodeMap.set(node.id, node);\n }\n }\n\n return Array.from(nodeMap.values());\n }\n\n /**\n * Removes duplicate edges based on from-to combination (O(n) performance)\n */\n private deduplicateEdges(edges: DiagramEdge[]): DiagramEdge[] {\n const edgeMap = new Map<string, DiagramEdge>();\n\n for (const edge of edges) {\n const edgeKey = `${edge.from}->${edge.to}`;\n if (!edgeMap.has(edgeKey)) {\n edgeMap.set(edgeKey, edge);\n }\n }\n\n return Array.from(edgeMap.values());\n }\n\n /**\n * Detects and reports duplicate nodes/edges for diagnostic purposes\n * Useful for testing and debugging data quality issues\n */\n detectDuplicates(cycles: CycleRecord[], tasks: TaskRecord[]): {\n duplicateNodes: Array<{ id: string, count: number, sources: string[] }>;\n duplicateEdges: Array<{ edge: string, count: number }>;\n } {\n const rawNodes = this.buildNodes(cycles, tasks);\n const rawEdges = this.buildEdges(cycles, tasks, rawNodes);\n\n // Analyze node duplicates\n const nodeCount = new Map<string, { count: number, sources: string[] }>();\n for (const node of rawNodes) {\n const current = nodeCount.get(node.id) || { count: 0, sources: [] };\n current.count++;\n current.sources.push(node.originalId);\n nodeCount.set(node.id, current);\n }\n\n const duplicateNodes = Array.from(nodeCount.entries())\n .filter(([_, data]) => data.count > 1)\n .map(([id, data]) => ({ id, count: data.count, sources: data.sources }));\n\n // Analyze edge duplicates\n const edgeCount = new Map<string, number>();\n for (const edge of rawEdges) {\n const edgeKey = `${edge.from}->${edge.to}`;\n edgeCount.set(edgeKey, (edgeCount.get(edgeKey) || 0) + 1);\n }\n\n const duplicateEdges = Array.from(edgeCount.entries())\n .filter(([_, count]) => count > 1)\n .map(([edge, count]) => ({ edge, count }));\n\n return { duplicateNodes, duplicateEdges };\n }\n\n /**\n * Filters cycles and tasks based on specified criteria\n */\n filterEntities(\n cycles: CycleRecord[],\n tasks: TaskRecord[],\n filters: {\n cycleId?: string;\n taskId?: string;\n packageName?: string;\n }\n ): { filteredCycles: CycleRecord[], filteredTasks: TaskRecord[] } {\n let filteredCycles = [...cycles];\n let filteredTasks = [...tasks];\n\n // Filter by specific cycle ID\n if (filters.cycleId) {\n const targetCycle = cycles.find(c => c.id === filters.cycleId);\n if (targetCycle) {\n // Include the target cycle and its related entities\n const relatedCycleIds = new Set([filters.cycleId]);\n const relatedTaskIds = new Set<string>();\n\n // Recursively add all descendant cycles\n const addDescendantCycles = (cycleId: string) => {\n const cycle = cycles.find(c => c.id === cycleId);\n if (cycle?.childCycleIds) {\n cycle.childCycleIds.forEach(childId => {\n if (!relatedCycleIds.has(childId)) {\n relatedCycleIds.add(childId);\n addDescendantCycles(childId); // Recursive call\n }\n });\n }\n };\n\n // Start recursive traversal from target cycle\n addDescendantCycles(filters.cycleId);\n\n // Add tasks from all related cycles\n cycles.forEach(cycle => {\n if (relatedCycleIds.has(cycle.id) && cycle.taskIds) {\n cycle.taskIds.forEach(taskId => relatedTaskIds.add(taskId));\n }\n });\n\n filteredCycles = cycles.filter(c => relatedCycleIds.has(c.id));\n filteredTasks = tasks.filter(t => relatedTaskIds.has(t.id));\n }\n }\n\n // Filter by specific task ID\n if (filters.taskId) {\n const targetTask = tasks.find(t => t.id === filters.taskId);\n if (targetTask) {\n filteredTasks = [targetTask];\n\n // Find cycles that contain this task\n filteredCycles = cycles.filter(c =>\n c.taskIds && c.taskIds.includes(filters.taskId!)\n );\n }\n }\n\n // Filter by package name (using tags)\n if (filters.packageName) {\n const packageTag = `package:${filters.packageName}`;\n\n filteredCycles = filteredCycles.filter(c =>\n c.tags && c.tags.includes(packageTag)\n );\n\n filteredTasks = filteredTasks.filter(t =>\n t.tags && t.tags.includes(packageTag)\n );\n }\n\n return { filteredCycles, filteredTasks };\n }\n}\n","import type { RelationshipGraph, DiagramNode, DiagramEdge } from './relationship_analyzer';\n\nexport interface DiagramOptions {\n layout: 'LR' | 'TD' | 'RL' | 'BT';\n includeEpicTasks: boolean;\n maxDepth: number;\n colorScheme: 'default' | 'dark' | 'minimal' | 'corporate';\n showAssignments: boolean;\n filterByStatus?: string[];\n}\n\nexport class RenderingError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'RenderingError';\n }\n}\n\nexport class ContentSanitizer {\n sanitizeNodeTitle(title: string): string {\n // Remove potentially dangerous characters for Mermaid, but preserve <br/> tags\n return title\n .replace(/<(?!br\\/?>)[^>]*>/g, '') // Remove HTML tags except <br/> and <br>\n .replace(/[\"']/g, '') // Remove quotes that could break syntax\n .substring(0, 150); // Increased limit to accommodate line breaks\n }\n\n sanitizeNodeId(id: string): string {\n // Ensure valid Mermaid node ID\n return id.replace(/[^a-zA-Z0-9_-]/g, '_');\n }\n\n sanitizeStatus(status: string): string {\n const allowedStatuses = [\n 'pending', 'in-progress', 'done', 'blocked',\n 'cancelled', 'draft', 'planning', 'active',\n 'completed', 'archived', 'paused', 'discarded',\n 'validated', 'audit_oracle_create', 'audit_oracle_close',\n 'ready', 'review', 'in_progress'\n ];\n return allowedStatuses.includes(status) ? status : 'unknown';\n }\n\n sanitizeGraph(graph: RelationshipGraph): RelationshipGraph {\n return {\n nodes: graph.nodes.map(node => {\n const sanitizedNode: DiagramNode = {\n id: this.sanitizeNodeId(node.id),\n type: node.type,\n title: this.sanitizeNodeTitle(node.title),\n originalId: node.originalId,\n };\n\n if (node.status) {\n sanitizedNode.status = this.sanitizeStatus(node.status);\n }\n\n if (node.tags) {\n sanitizedNode.tags = node.tags;\n }\n\n return sanitizedNode;\n }),\n edges: graph.edges.filter(edge => edge.from && edge.to),\n metadata: graph.metadata,\n };\n }\n}\n\nexport class MermaidValidator {\n isValidMermaidSyntax(content: string): boolean {\n // Basic Mermaid syntax validation\n const lines = content.split('\\n');\n\n // Must start with flowchart declaration\n const flowchartLine = lines.find(line => line.trim().startsWith('flowchart'));\n if (!flowchartLine) {\n return false;\n }\n\n // Check for balanced brackets in node definitions\n const nodeLines = lines.filter(line => line.includes('[\"') && line.includes('\"]'));\n for (const line of nodeLines) {\n const openBrackets = (line.match(/\\[\"/g) || []).length;\n const closeBrackets = (line.match(/\"\\]/g) || []).length;\n if (openBrackets !== closeBrackets) {\n return false;\n }\n }\n\n return true;\n }\n}\n\nexport class MermaidRenderer {\n private readonly sanitizer: ContentSanitizer;\n private readonly validator: MermaidValidator;\n\n constructor() {\n this.sanitizer = new ContentSanitizer();\n this.validator = new MermaidValidator();\n }\n\n /**\n * Main rendering method with input sanitization and output validation\n */\n renderGraph(graph: RelationshipGraph, options: DiagramOptions): string {\n if (!graph || !graph.nodes || !graph.edges) {\n throw new RenderingError('Invalid graph structure');\n }\n\n const sanitizedGraph = this.sanitizer.sanitizeGraph(graph);\n const content = this.generateMermaidContent(sanitizedGraph, options);\n\n // Validate generated Mermaid syntax\n if (!this.validator.isValidMermaidSyntax(content)) {\n throw new RenderingError('Generated invalid Mermaid syntax');\n }\n\n return content;\n }\n\n /**\n * Generates the complete Mermaid diagram content\n */\n private generateMermaidContent(graph: RelationshipGraph, options: DiagramOptions): string {\n const header = this.generateHeader(options);\n const nodes = this.generateNodes(graph.nodes);\n const edges = this.generateEdges(graph.edges);\n const styling = this.generateStyling();\n const statusClasses = this.generateStatusClasses(graph.nodes);\n\n return [\n '```mermaid',\n header,\n '',\n nodes,\n '',\n edges,\n '',\n styling,\n '',\n statusClasses,\n '```'\n ].join('\\n');\n }\n\n /**\n * Generates the diagram header with metadata\n */\n private generateHeader(options: DiagramOptions): string {\n const timestamp = new Date().toISOString();\n return [\n `flowchart ${options.layout}`,\n ` %% Auto-generated on ${timestamp}`,\n ` %% Source: .gitgov/ entities`,\n ].join('\\n');\n }\n\n /**\n * Generates node syntax for all nodes\n */\n private generateNodes(nodes: DiagramNode[]): string {\n const nodeLines = nodes.map(node => this.generateNodeSyntax(node));\n return nodeLines.join('\\n');\n }\n\n /**\n * Generates edge syntax for all relationships\n */\n private generateEdges(edges: DiagramEdge[]): string {\n if (edges.length === 0) {\n return ' %% No relationships found';\n }\n\n const edgeLines = [\n ' %% ONLY hierarchical relationships from protocol',\n ' %% Source: CycleRecord.childCycleIds and CycleRecord.taskIds',\n ...edges.map(edge => this.generateEdgeSyntax(edge))\n ];\n\n return edgeLines.join('\\n');\n }\n\n /**\n * Wraps a title string to a specified max width, using <br/> for line breaks.\n * Also sanitizes the title.\n * @param title The title to wrap.\n * @param maxWidth The maximum width of a line.\n * @returns The wrapped and sanitized title string.\n */\n private wrapTitle(title: string, maxWidth: number = 30): string {\n // The sanitizer already limits total length, so this is for readability.\n const sanitizedTitle = this.sanitizer.sanitizeNodeTitle(title);\n if (sanitizedTitle.length <= maxWidth) {\n return sanitizedTitle;\n }\n\n const words = sanitizedTitle.split(' ');\n const lines = [];\n let currentLine = words.shift() || '';\n\n for (const word of words) {\n if ((currentLine + ' ' + word).length > maxWidth) {\n lines.push(currentLine);\n currentLine = word;\n } else {\n currentLine += ` ${word}`;\n }\n }\n lines.push(currentLine);\n\n return lines.join('<br/>');\n }\n\n /**\n * Node generation with word wrapping for better readability.\n * Uses different shapes for different node types:\n * - Cycles: Hexagonal shape {{text}} for strategic importance\n * - Tasks: Rectangular shape [text] for implementation details\n */\n generateNodeSyntax(node: DiagramNode): string {\n const wrappedTitle = this.wrapTitle(node.title);\n const sanitizedId = this.sanitizer.sanitizeNodeId(node.id);\n\n const icon = this.getNodeIcon(node.type);\n\n // Use hexagonal shape for cycles (strategic level)\n if (node.type === 'cycle') {\n return ` ${sanitizedId}{{\"${icon}<br/>${wrappedTitle}\"}}`;\n }\n\n // Use rectangular shape for tasks (implementation level)\n if (node.type === 'epic-task' && node.status === 'paused') {\n return ` ${sanitizedId}[\"${icon}<br/>${wrappedTitle}<br/>(PAUSED)\"]`;\n }\n\n return ` ${sanitizedId}[\"${icon}<br/>${wrappedTitle}\"]`;\n }\n\n /**\n * Edge generation with relationship validation\n */\n generateEdgeSyntax(edge: DiagramEdge): string {\n if (!edge.from || !edge.to) {\n throw new RenderingError('Edge must have valid from and to nodes');\n }\n\n const sanitizedFrom = this.sanitizer.sanitizeNodeId(edge.from);\n const sanitizedTo = this.sanitizer.sanitizeNodeId(edge.to);\n\n return ` ${sanitizedFrom} --> ${sanitizedTo}`;\n }\n\n /**\n * Gets the appropriate icon for each node type\n */\n private getNodeIcon(type: string): string {\n const icons = {\n 'cycle': 'šÆ',\n 'epic-task': 'š¦',\n 'task': 'š',\n };\n return icons[type as keyof typeof icons] || 'š';\n }\n\n /**\n * Generates the mandatory color scheme CSS\n */\n private generateStyling(): string {\n return [\n ' %% Status styling (mandatory color scheme)',\n ' classDef statusDraft fill:#ffffff,stroke:#cccccc,stroke-width:2px,color:#666666',\n ' classDef statusReady fill:#ffffeb,stroke:#cccc00,stroke-width:2px,color:#666600',\n ' classDef statusInProgress fill:#ebf5ff,stroke:#0066cc,stroke-width:2px,color:#003366',\n ' classDef statusDone fill:#ebffeb,stroke:#00cc00,stroke-width:2px,color:#006600',\n ' classDef statusBlocked fill:#ffebeb,stroke:#cc0000,stroke-width:2px,color:#660000',\n ' classDef statusEpicPaused fill:#f3e5f5,stroke:#9c27b0,stroke-width:2px,color:#4a148c',\n ' classDef statusArchived fill:#f5f5f5,stroke:#666666,stroke-width:2px,color:#333333',\n ].join('\\n');\n }\n\n /**\n * Applies status-based CSS classes to nodes\n */\n private generateStatusClasses(nodes: DiagramNode[]): string {\n const statusGroups = new Map<string, string[]>();\n\n // Group nodes by status\n for (const node of nodes) {\n const statusClass = this.getStatusClass(node.status || 'draft', node);\n\n\n if (!statusGroups.has(statusClass)) {\n statusGroups.set(statusClass, []);\n }\n statusGroups.get(statusClass)!.push(node.id);\n }\n\n // Generate class applications\n const classLines: string[] = [];\n for (const [statusClass, nodeIds] of statusGroups.entries()) {\n if (nodeIds.length > 0) {\n const sanitizedIds = nodeIds.map(id => this.sanitizer.sanitizeNodeId(id));\n classLines.push(` class ${sanitizedIds.join(',')} ${statusClass}`);\n }\n }\n\n return [\n ' %% Apply styles based on entity status',\n ...classLines\n ].join('\\n');\n }\n\n /**\n * Maps entity status to CSS class name with cycle and epic task special handling\n */\n private getStatusClass(status: string, node?: DiagramNode): string {\n // Special case: Epic task paused (waiting for parent cycle)\n if (status === 'paused' && node?.type === 'epic-task') {\n return 'statusEpicPaused'; // Purple - not a real blockage\n }\n\n // Handle cycle statuses\n if (node?.type === 'cycle') {\n const cycleStatusMap: Record<string, string> = {\n 'planning': 'statusDraft', // White - being planned\n 'active': 'statusInProgress', // Blue - sprint/milestone running\n 'completed': 'statusDone', // Green - all tasks finished\n 'archived': 'statusArchived', // Gray - historical record\n };\n return cycleStatusMap[status] || 'statusDraft';\n }\n\n // Handle task statuses\n const taskStatusMap: Record<string, string> = {\n // Completed states - Green\n 'done': 'statusDone',\n 'validated': 'statusDone',\n\n // Active states - Blue \n 'active': 'statusInProgress',\n 'in_progress': 'statusInProgress',\n\n // Ready states - Yellow (only for tasks)\n 'ready': 'statusReady',\n 'pending': 'statusReady',\n\n // Preparation states - White\n 'draft': 'statusDraft',\n 'review': 'statusDraft',\n\n // Real blockages - Red (only for NON-epic tasks)\n 'blocked': 'statusBlocked',\n 'paused': 'statusBlocked',\n 'cancelled': 'statusBlocked',\n 'discarded': 'statusBlocked',\n\n // Archived states - Gray\n 'archived': 'statusArchived',\n\n // Legacy oracle states - White (preparation)\n 'audit_oracle_create': 'statusDraft',\n 'audit_oracle_close': 'statusDraft',\n };\n\n return taskStatusMap[status] || 'statusDraft';\n }\n}\n","import { RelationshipAnalyzer, type RelationshipGraph } from './relationship_analyzer';\nimport { MermaidRenderer, type DiagramOptions } from './mermaid_renderer';\nimport type { TaskRecord } from '../types';\nimport type { CycleRecord } from '../types';\nimport { promises as fs } from \"fs\";\nimport * as path from \"path\";\n\nconst MAX_GENERATION_TIME_HISTORY = 100;\n\nexport class DiagramMetrics {\n private cacheHits: number = 0;\n private cacheMisses: number = 0;\n private generationTimes: number[] = [];\n\n incrementCacheHits(): void {\n this.cacheHits++;\n }\n\n incrementCacheMisses(): void {\n this.cacheMisses++;\n }\n\n recordGenerationTime(timeMs: number): void {\n this.generationTimes.push(timeMs);\n\n // Keep only last N measurements to prevent memory leak\n if (this.generationTimes.length > MAX_GENERATION_TIME_HISTORY) {\n this.generationTimes.shift();\n }\n }\n\n getCacheHitRatio(): number {\n const total = this.cacheHits + this.cacheMisses;\n return total === 0 ? 0 : this.cacheHits / total;\n }\n\n getAverageGenerationTime(): number {\n if (this.generationTimes.length === 0) return 0;\n\n const sum = this.generationTimes.reduce((a, b) => a + b, 0);\n return sum / this.generationTimes.length;\n }\n\n getStats() {\n return {\n cacheHitRatio: this.getCacheHitRatio(),\n averageGenerationTime: this.getAverageGenerationTime(),\n totalGenerations: this.generationTimes.length,\n };\n }\n}\n\nexport class DiagramGenerator {\n private readonly options: DiagramOptions;\n private readonly cache: Map<string, RelationshipGraph>;\n private readonly metrics: DiagramMetrics;\n public readonly analyzer: RelationshipAnalyzer;\n private readonly renderer: MermaidRenderer;\n\n constructor(options: Partial<DiagramOptions> = {}) {\n this.options = Object.freeze({\n layout: 'LR',\n includeEpicTasks: true,\n maxDepth: 4,\n colorScheme: 'default',\n showAssignments: false,\n ...options\n } as DiagramOptions);\n\n this.cache = new Map();\n this.metrics = new DiagramMetrics();\n this.analyzer = new RelationshipAnalyzer();\n this.renderer = new MermaidRenderer();\n }\n\n /**\n * Primary API - Performance optimized with caching\n */\n async generateFromRecords(\n cycles: CycleRecord[],\n tasks: TaskRecord[],\n filters?: {\n cycleId?: string;\n taskId?: string;\n packageName?: string;\n },\n showArchived: boolean = false\n ): Promise<string> {\n const cacheKey = this.generateCacheKey(cycles, tasks, showArchived);\n\n if (this.cache.has(cacheKey)) {\n this.metrics.incrementCacheHits();\n return this.renderFromCache(cacheKey);\n }\n\n const startTime = performance.now();\n\n try {\n // Apply filters if provided\n let finalCycles = cycles;\n let finalTasks = tasks;\n\n // Filter out archived entities by default (EARS-18)\n if (!showArchived) {\n finalCycles = cycles.filter(cycle => cycle.status !== 'archived');\n finalTasks = tasks.filter(task => task.status !== 'archived');\n }\n\n if (filters && (filters.cycleId || filters.taskId || filters.packageName)) {\n const filtered = this.analyzer.filterEntities(finalCycles, finalTasks, filters);\n finalCycles = filtered.filteredCycles;\n finalTasks = filtered.filteredTasks;\n }\n\n const graph = this.analyzer.analyzeRelationships(finalCycles, finalTasks);\n const result = this.renderer.renderGraph(graph, this.options);\n\n this.cache.set(cacheKey, graph);\n this.metrics.recordGenerationTime(performance.now() - startTime);\n this.metrics.incrementCacheMisses();\n\n return result;\n } catch (error) {\n this.metrics.recordGenerationTime(performance.now() - startTime);\n throw error;\n }\n }\n\n /**\n * Convenience method to generate from .gitgov/ directory\n */\n async generateFromFiles(\n gitgovPath: string = '.gitgov',\n filters?: {\n cycleId?: string;\n taskId?: string;\n packageName?: string;\n },\n showArchived: boolean = false\n ): Promise<string> {\n const cycles = await this.loadCycleRecords(gitgovPath);\n const tasks = await this.loadTaskRecords(gitgovPath);\n\n return this.generateFromRecords(cycles, tasks, filters, showArchived);\n }\n\n /**\n * Loads all cycle records from the filesystem\n */\n public async loadCycleRecords(gitgovPath: string): Promise<CycleRecord[]> {\n const cyclesDir = path.join(gitgovPath, 'cycles');\n\n try {\n const files = await fs.readdir(cyclesDir);\n const jsonFiles = files.filter(file => file.endsWith('.json'));\n\n const cycles: CycleRecord[] = [];\n\n for (const file of jsonFiles) {\n try {\n const filePath = path.join(cyclesDir, file);\n const content = await fs.readFile(filePath, 'utf-8');\n const record = JSON.parse(content);\n\n // Extract payload from EmbeddedMetadata structure\n if (record.payload && record.payload.id) {\n const cycleRecord = record.payload as CycleRecord;\n // Add file source info for better error reporting\n (cycleRecord as any)._sourceFile = file;\n cycles.push(cycleRecord);\n } else {\n console.warn(`ā ļø Cycle file ${file} missing payload or payload.id`);\n }\n } catch (error) {\n console.warn(`ā Could not parse cycle file ${file}:`, error instanceof Error ? error.message : String(error));\n }\n }\n\n return cycles;\n } catch (error) {\n if (error instanceof Error && error.message.includes('ENOENT')) {\n console.warn(`ā ļø Cycles directory not found: ${cyclesDir}`);\n console.warn(`š” Run 'gitgov init' to create the .gitgov directory structure`);\n } else {\n console.warn(`ā Could not read cycles directory:`, error instanceof Error ? error.message : String(error));\n }\n return [];\n }\n }\n\n /**\n * Loads all task records from the filesystem\n */\n public async loadTaskRecords(gitgovPath: string): Promise<TaskRecord[]> {\n const tasksDir = path.join(gitgovPath, 'tasks');\n\n try {\n const files = await fs.readdir(tasksDir);\n const jsonFiles = files.filter(file => file.endsWith('.json'));\n\n const tasks: TaskRecord[] = [];\n\n for (const file of jsonFiles) {\n try {\n const filePath = path.join(tasksDir, file);\n const content = await fs.readFile(filePath, 'utf-8');\n const record = JSON.parse(content);\n\n // Extract payload from EmbeddedMetadata structure\n if (record.payload && record.payload.id) {\n const taskRecord = record.payload as TaskRecord;\n // Add file source info for better error reporting\n (taskRecord as any)._sourceFile = file;\n\n\n tasks.push(taskRecord);\n } else {\n console.warn(`ā ļø Task file ${file} missing payload or payload.id`);\n }\n } catch (error) {\n console.warn(`ā Could not parse task file ${file}:`, error instanceof Error ? error.message : String(error));\n }\n }\n\n return tasks;\n } catch (error) {\n if (error instanceof Error && error.message.includes('ENOENT')) {\n console.warn(`ā ļø Tasks directory not found: ${tasksDir}`);\n console.warn(`š” Run 'gitgov init' to create the .gitgov directory structure`);\n } else {\n console.warn(`ā Could not read tasks directory:`, error instanceof Error ? error.message : String(error));\n }\n return [];\n }\n }\n\n /**\n * Renders diagram from cached graph\n */\n private renderFromCache(cacheKey: string): string {\n const graph = this.cache.get(cacheKey)!;\n return this.renderer.renderGraph(graph, this.options);\n }\n\n /**\n * Generates cache key for efficient lookups\n */\n private generateCacheKey(cycles: CycleRecord[], tasks: TaskRecord[], showArchived: boolean = false): string {\n // Use Set for O(1) deduplication and consistent ordering\n const cycleIds = [...new Set(cycles.map(c => c.id))].sort();\n const taskIds = [...new Set(tasks.map(t => t.id))].sort();\n\n const cycleHash = this.hashArray(cycleIds);\n const taskHash = this.hashArray(taskIds);\n const optionsHash = this.hashString(JSON.stringify(this.options));\n const archivedFlag = showArchived ? 'with-archived' : 'no-archived';\n\n return `diagram:${cycleHash}-${taskHash}-${optionsHash}-${archivedFlag}`;\n }\n\n /**\n * Efficient hash function for arrays\n */\n private hashArray(items: string[]): string {\n let hash = 0;\n for (const item of items) {\n hash = ((hash << 5) - hash) + this.hashString(item);\n hash = hash & hash; // Convert to 32bit integer\n }\n return hash.toString(36);\n }\n\n /**\n * Simple hash function for strings\n */\n private hashString(str: string): number {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash = hash & hash; // Convert to 32bit integer\n }\n return hash;\n }\n\n\n\n /**\n * Get performance metrics\n */\n getMetrics() {\n return this.metrics.getStats();\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/adapters/index.ts","../../src/adapters/backlog_adapter/index.ts","../../src/schemas/generated/actor_record_schema.json","../../src/schemas/generated/agent_record_schema.json","../../src/schemas/generated/changelog_record_schema.json","../../src/schemas/generated/cycle_record_schema.json","../../src/schemas/generated/embedded_metadata_schema.json","../../src/schemas/generated/execution_record_schema.json","../../src/schemas/generated/feedback_record_schema.json","../../src/schemas/generated/task_record_schema.json","../../src/schemas/generated/workflow_methodology_record_schema.json","../../src/schemas/generated/index.ts","../../src/schemas/schema_cache.ts","../../src/schemas/index.ts","../../src/types/common.types.ts","../../src/schemas/errors.ts","../../src/validation/errors.ts","../../src/crypto/checksum.ts","../../src/logger/index.ts","../../src/logger/logger.ts","../../src/crypto/signatures.ts","../../src/validation/embedded_metadata_validator.ts","../../src/validation/task_validator.ts","../../src/utils/id_generator.ts","../../src/factories/task_factory.ts","../../src/validation/cycle_validator.ts","../../src/factories/cycle_factory.ts","../../src/store/index.ts","../../src/config_manager/index.ts","../../src/store/record_store.ts","../../src/adapters/identity_adapter/index.ts","../../src/validation/actor_validator.ts","../../src/factories/actor_factory.ts","../../src/validation/agent_validator.ts","../../src/factories/agent_factory.ts","../../src/adapters/feedback_adapter/index.ts","../../src/validation/feedback_validator.ts","../../src/factories/feedback_factory.ts","../../src/adapters/execution_adapter/index.ts","../../src/validation/execution_validator.ts","../../src/factories/execution_factory.ts","../../src/adapters/changelog_adapter/index.ts","../../src/validation/changelog_validator.ts","../../src/factories/changelog_factory.ts","../../src/adapters/metrics_adapter/index.ts","../../src/adapters/indexer_adapter/index.ts","../../src/adapters/project_adapter/index.ts","../../src/adapters/workflow_methodology_adapter/index.ts","../../src/adapters/workflow_methodology_adapter/workflow_methodology_default.json","../../src/adapters/workflow_methodology_adapter/workflow_methodology_scrum.json","../../src/crypto/index.ts","../../src/factories/index.ts","../../src/validation/workflow_methodology_validator.ts","../../src/factories/workflow_methodology_factory.ts","../../src/factories/embedded_metadata_factory.ts","../../src/validation/index.ts","../../src/types/index.ts","../../src/event_bus/index.ts","../../src/event_bus/event_bus.ts","../../src/diagram_generator/index.ts","../../src/diagram_generator/graph_validator.ts","../../src/diagram_generator/relationship_analyzer.ts","../../src/diagram_generator/mermaid_renderer.ts","../../src/diagram_generator/diagram_generator.ts"],"names":["logger","createHash","fs","projectRoot","path2","path3","fsSync","pathUtils","path","existsSync","path4"],"mappings":"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","file":"index.js","sourcesContent":["export * from \"./backlog_adapter\";\nexport * from \"./changelog_adapter\";\nexport * from \"./execution_adapter\";\nexport * from \"./feedback_adapter\";\nexport * from \"./identity_adapter\";\nexport * from \"./indexer_adapter\";\nexport * from \"./metrics_adapter\";\nexport * from \"./project_adapter\";\nexport * from \"./workflow_methodology_adapter\";\n","import { createTaskRecord } from '../../factories/task_factory';\nimport { createCycleRecord } from '../../factories/cycle_factory';\nimport { RecordStore } from '../../store';\nimport { IdentityAdapter } from '../identity_adapter';\nimport { FeedbackAdapter } from '../feedback_adapter';\nimport { ExecutionAdapter } from '../execution_adapter';\nimport { ChangelogAdapter } from '../changelog_adapter';\nimport { MetricsAdapter } from '../metrics_adapter';\nimport type { TaskRecord } from '../../types';\nimport type { CycleRecord } from '../../types';\nimport type { FeedbackRecord } from '../../types';\nimport type { ExecutionRecord } from '../../types';\nimport type { ChangelogRecord } from '../../types';\nimport type { IWorkflowMethodology } from '../workflow_methodology_adapter';\nimport type { ActorRecord } from '../../types';\nimport type {\n IEventStream,\n TaskCreatedEvent,\n TaskStatusChangedEvent,\n CycleCreatedEvent,\n CycleStatusChangedEvent,\n FeedbackCreatedEvent,\n ExecutionCreatedEvent,\n ChangelogCreatedEvent,\n SystemDailyTickEvent,\n EventMetadata\n} from '../../event_bus';\nimport type { GitGovRecord } from '../../types';\n\n/**\n * BacklogAdapter Dependencies - Facade + Dependency Injection Pattern\n */\nexport type BacklogAdapterDependencies = {\n // Data Layer (Protocols)\n taskStore: RecordStore<TaskRecord>;\n cycleStore: RecordStore<CycleRecord>;\n\n // Cross-Adapter Dependencies (Mediator coordination) - PHASE 3 READY\n feedbackStore: RecordStore<FeedbackRecord>;\n executionStore: RecordStore<ExecutionRecord>;\n changelogStore: RecordStore<ChangelogRecord>;\n\n // Adapter Dependencies (Phase 3 Integration)\n feedbackAdapter: FeedbackAdapter;\n executionAdapter: ExecutionAdapter;\n changelogAdapter: ChangelogAdapter;\n metricsAdapter: MetricsAdapter;\n\n // Business Rules Layer (Methodologies)\n workflowMethodologyAdapter: IWorkflowMethodology;\n planningMethodologyAdapter?: IWorkflowMethodology; // Future\n\n // Infrastructure Layer\n identity: IdentityAdapter;\n eventBus: IEventStream; // For listening to events (consumer pattern)\n\n // Configuration Layer (Optional)\n config?: BacklogAdapterConfig; // Optional configuration, defaults to DEFAULT_CONFIG\n};\n\n/**\n * BacklogAdapter Interface - The Facade/Mediator\n */\nexport interface IBacklogAdapter {\n // Phase 1: Task/Cycle CRUD operations\n createTask(payload: Partial<TaskRecord>, actorId: string): Promise<TaskRecord>;\n getTask(taskId: string): Promise<TaskRecord | null>;\n getAllTasks(): Promise<TaskRecord[]>;\n submitTask(taskId: string, actorId: string): Promise<TaskRecord>;\n approveTask(taskId: string, actorId: string): Promise<TaskRecord>;\n updateTask(taskId: string, payload: Partial<TaskRecord>): Promise<TaskRecord>;\n activateTask(taskId: string, actorId: string): Promise<TaskRecord>;\n completeTask(taskId: string, actorId: string): Promise<TaskRecord>;\n pauseTask(taskId: string, actorId: string, reason?: string): Promise<TaskRecord>;\n resumeTask(taskId: string, actorId: string, force?: boolean): Promise<TaskRecord>;\n discardTask(taskId: string, actorId: string, reason?: string): Promise<TaskRecord>;\n deleteTask(taskId: string, actorId: string): Promise<void>;\n\n createCycle(payload: Partial<CycleRecord>, actorId: string): Promise<CycleRecord>;\n getCycle(cycleId: string): Promise<CycleRecord | null>;\n getAllCycles(): Promise<CycleRecord[]>;\n updateCycle(cycleId: string, payload: Partial<CycleRecord>): Promise<CycleRecord>;\n addTaskToCycle(cycleId: string, taskId: string): Promise<void>;\n removeTasksFromCycle(cycleId: string, taskIds: string[]): Promise<void>;\n moveTasksBetweenCycles(targetCycleId: string, taskIds: string[], sourceCycleId: string): Promise<void>;\n\n // Phase 2: Agent Navigation\n getTasksAssignedToActor(actorId: string): Promise<TaskRecord[]>;\n\n // Phase 3: Event Handlers (NEW)\n handleFeedbackCreated(event: FeedbackCreatedEvent): Promise<void>;\n handleExecutionCreated(event: ExecutionCreatedEvent): Promise<void>;\n handleChangelogCreated(event: ChangelogCreatedEvent): Promise<void>;\n handleCycleStatusChanged(event: CycleStatusChangedEvent): Promise<void>;\n handleDailyTick(event: SystemDailyTickEvent): Promise<void>;\n\n // Phase 4: Stubs and Polish (Future)\n getSystemStatus(): Promise<SystemStatus>;\n getTaskHealth(taskId: string): Promise<TaskHealthReport>;\n lint(): Promise<LintReport>;\n audit(): Promise<AuditReport>;\n processChanges(changes: unknown[]): Promise<ExecutionRecord[]>;\n}\n\n// Type imports from MetricsAdapter\nimport type { SystemStatus, TaskHealthReport } from '../metrics_adapter';\n\n// Configuration types\nexport type BacklogAdapterConfig = {\n healthThresholds: {\n taskMinScore: number; // Minimum task health score before warning\n maxDaysInStage: number; // Maximum days in stage before stale warning\n systemMinScore: number; // Minimum system health score before alert\n };\n}\n\n// Default configuration\nconst DEFAULT_CONFIG: BacklogAdapterConfig = {\n healthThresholds: {\n taskMinScore: 50,\n maxDaysInStage: 7,\n systemMinScore: 60\n }\n};\n\n// Future types\ntype LintReport = { status: 'success' | 'failed'; issues: string[] };\ntype AuditReport = { status: 'success' | 'failed'; violations: string[] };\n\n/**\n * BacklogAdapter - The Facade/Mediator\n * \n * Implements Facade + Dependency Injection Pattern for testeable and configurable orchestration.\n * Acts as Mediator between Task/Cycle protocols and Workflow/Planning methodologies.\n */\nexport class BacklogAdapter implements IBacklogAdapter {\n private taskStore: RecordStore<TaskRecord>;\n private cycleStore: RecordStore<CycleRecord>;\n private feedbackStore: RecordStore<FeedbackRecord>;\n private changelogStore: RecordStore<ChangelogRecord>;\n\n private feedbackAdapter: FeedbackAdapter;\n private metricsAdapter: MetricsAdapter;\n\n private workflowMethodologyAdapter: IWorkflowMethodology;\n private identity: IdentityAdapter;\n private eventBus: IEventStream;\n private config: BacklogAdapterConfig;\n\n\n constructor(dependencies: BacklogAdapterDependencies) {\n // Data Layer\n this.taskStore = dependencies.taskStore;\n this.cycleStore = dependencies.cycleStore;\n this.feedbackStore = dependencies.feedbackStore;\n this.changelogStore = dependencies.changelogStore;\n\n // Adapter Dependencies\n this.feedbackAdapter = dependencies.feedbackAdapter;\n this.metricsAdapter = dependencies.metricsAdapter;\n\n // Business Rules & Infrastructure\n this.workflowMethodologyAdapter = dependencies.workflowMethodologyAdapter;\n this.identity = dependencies.identity;\n this.eventBus = dependencies.eventBus;\n\n // Configuration with defaults\n this.config = dependencies.config || DEFAULT_CONFIG;\n\n // Phase 3: Setup event subscriptions\n this.setupEventSubscriptions();\n }\n\n /**\n * Setup event subscriptions for Phase 3 event handlers\n */\n private setupEventSubscriptions(): void {\n this.eventBus.subscribe<FeedbackCreatedEvent>(\"feedback.created\", (event) =>\n this.handleFeedbackCreated(event)\n );\n this.eventBus.subscribe<ExecutionCreatedEvent>(\"execution.created\", (event) =>\n this.handleExecutionCreated(event)\n );\n this.eventBus.subscribe<ChangelogCreatedEvent>(\"changelog.created\", (event) =>\n this.handleChangelogCreated(event)\n );\n this.eventBus.subscribe<CycleStatusChangedEvent>(\"cycle.status.changed\", (event) =>\n this.handleCycleStatusChanged(event)\n );\n this.eventBus.subscribe<SystemDailyTickEvent>(\"system.daily_tick\", (event) =>\n this.handleDailyTick(event)\n );\n }\n\n // ===== PHASE 1: TASK/CYCLE CRUD OPERATIONS (IMPLEMENTED) =====\n\n /**\n * Creates a new task with workflow validation\n */\n async createTask(payload: Partial<TaskRecord>, actorId: string): Promise<TaskRecord> {\n // 1. Build the record with factory\n const validatedPayload = await createTaskRecord(payload);\n\n // 2. Create unsigned record structure\n const unsignedRecord: GitGovRecord & { payload: TaskRecord } = {\n header: {\n version: '1.0',\n type: 'task',\n payloadChecksum: 'will-be-calculated-by-signRecord',\n signatures: [{\n keyId: actorId,\n role: 'author',\n notes: 'Task created',\n signature: 'placeholder',\n timestamp: Date.now()\n }]\n },\n payload: validatedPayload,\n };\n\n // 3. Sign the record\n const signedRecord = await this.identity.signRecord(unsignedRecord, actorId, 'author');\n\n // 4. Persist the record with validation\n await this.taskStore.write(signedRecord as GitGovRecord & { payload: TaskRecord });\n\n // 5. Emit event\n this.eventBus.publish({\n type: 'task.created',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId: validatedPayload.id,\n actorId\n },\n metadata: {\n eventId: `${Date.now()}-task-created-${validatedPayload.id}`,\n timestamp: Date.now(),\n sourceAdapter: 'backlog_adapter'\n }\n } as TaskCreatedEvent);\n\n return validatedPayload;\n }\n\n /**\n * Gets a specific task by ID\n */\n async getTask(taskId: string): Promise<TaskRecord | null> {\n const record = await this.taskStore.read(taskId);\n return record ? record.payload : null;\n }\n\n /**\n * Gets all tasks in the system\n */\n async getAllTasks(): Promise<TaskRecord[]> {\n const ids = await this.taskStore.list();\n const tasks: TaskRecord[] = [];\n\n for (const id of ids) {\n const record = await this.taskStore.read(id);\n if (record) {\n tasks.push(record.payload);\n }\n }\n\n return tasks;\n }\n\n /**\n * Submits a task for review\n */\n async submitTask(taskId: string, actorId: string): Promise<TaskRecord> {\n // Read and validate task exists\n const taskRecord = await this.taskStore.read(taskId);\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n\n const task = taskRecord.payload;\n\n // Validate current status\n if (task.status !== 'draft') {\n throw new Error(`ProtocolViolationError: Task ${taskId} is not in draft status`);\n }\n\n // Get actor with proper typing\n const actor = await this.getActor(actorId);\n\n // Delegate to workflow methodology for validation\n const transitionRule = await this.workflowMethodologyAdapter.getTransitionRule('draft', 'review', {\n task,\n actor,\n signatures: taskRecord.header.signatures\n });\n\n if (!transitionRule) {\n throw new Error(`ProtocolViolationError: Transition draftāreview not allowed for task ${taskId}`);\n }\n\n // Update task status\n const updatedPayload: TaskRecord = { ...task, status: 'review' as const };\n const updatedRecord = { ...taskRecord, payload: updatedPayload };\n\n // Sign and persist\n const signedRecord = await this.identity.signRecord(updatedRecord, actorId, 'submitter');\n await this.taskStore.write(signedRecord as GitGovRecord & { payload: TaskRecord });\n\n // Emit event\n this.eventBus.publish({\n type: 'task.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId,\n oldStatus: 'draft',\n newStatus: 'review',\n actorId\n }\n } as TaskStatusChangedEvent);\n\n return updatedPayload;\n }\n\n /**\n * Approves a task for next stage with complete workflow validation\n */\n async approveTask(taskId: string, actorId: string): Promise<TaskRecord> {\n // 1. Read and validate task exists\n const taskRecord = await this.taskStore.read(taskId);\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n\n const task = taskRecord.payload;\n const actor = await this.getActor(actorId);\n\n // 2. Determine target transition from available transitions\n const availableTransitions = await this.getAvailableTransitions(task.status);\n const approvalTransition = availableTransitions.find(transition =>\n transition.requires?.signatures && Object.keys(transition.requires.signatures).length > 0\n );\n\n if (!approvalTransition) {\n throw new Error(`ProtocolViolationError: No approval transition available from ${task.status}`);\n }\n\n const targetState = approvalTransition.to;\n\n // 3. Generate temporary signature for validation\n const tempSignature = {\n keyId: actorId,\n role: 'approver',\n notes: 'Task approval',\n signature: 'temp-signature',\n timestamp: Date.now()\n };\n\n // 4. Build complete validation context\n const context = {\n task,\n actor,\n signatures: [...taskRecord.header.signatures, tempSignature],\n transitionTo: targetState as TaskRecord['status']\n };\n\n // 5. Delegate signature validation to methodology\n const isValidSignature = await this.workflowMethodologyAdapter.validateSignature(tempSignature, context);\n if (!isValidSignature) {\n throw new Error(`ProtocolViolationError: Signature is not valid for this approval`);\n }\n\n // 6. Update, sign and persist if validation successful\n const updatedPayload: TaskRecord = { ...task, status: targetState as TaskRecord['status'] };\n const updatedRecord = { ...taskRecord, payload: updatedPayload };\n\n const signedRecord = await this.identity.signRecord(updatedRecord, actorId, 'approver');\n await this.taskStore.write(signedRecord as GitGovRecord & { payload: TaskRecord });\n\n // 7. Emit event\n this.eventBus.publish({\n type: 'task.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId,\n oldStatus: task.status,\n newStatus: targetState,\n actorId\n }\n } as TaskStatusChangedEvent);\n\n return updatedPayload;\n }\n\n /**\n * Activates a task transitioning from ready to active with permission validation\n */\n async activateTask(taskId: string, actorId: string): Promise<TaskRecord> {\n // 1. Read and validate task exists\n const taskRecord = await this.taskStore.read(taskId);\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n\n const task = taskRecord.payload;\n const actor = await this.getActor(actorId);\n\n // 2. Validate current status is 'ready'\n if (task.status !== 'ready') {\n throw new Error(`ProtocolViolationError: Task is in '${task.status}' state. Cannot activate from this state.`);\n }\n\n // 3. Validate transition with WorkflowMethodology\n const context = {\n task,\n actor,\n signatures: taskRecord.header.signatures,\n transitionTo: 'active' as TaskRecord['status']\n };\n\n const transitionRule = await this.workflowMethodologyAdapter.getTransitionRule('ready', 'active', context);\n if (!transitionRule) {\n throw new Error(`ProtocolViolationError: Workflow methodology rejected readyāactive transition`);\n }\n\n // 4. Update task status to 'active'\n const updatedPayload: TaskRecord = { ...task, status: 'active' };\n const updatedRecord = { ...taskRecord, payload: updatedPayload };\n\n // 5. Sign the record with 'executor' role\n const signedRecord = await this.identity.signRecord(updatedRecord, actorId, 'executor');\n await this.taskStore.write(signedRecord as GitGovRecord & { payload: TaskRecord });\n\n // 6. Emit task status changed event\n this.eventBus.publish({\n type: 'task.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId,\n oldStatus: 'ready',\n newStatus: 'active',\n actorId\n }\n } as TaskStatusChangedEvent);\n\n return updatedPayload;\n }\n\n /**\n * Pauses a task manually transitioning from active to paused with optional reason\n */\n async pauseTask(taskId: string, actorId: string, reason?: string): Promise<TaskRecord> {\n // 1. Read and validate task exists\n const taskRecord = await this.taskStore.read(taskId);\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n\n const task = taskRecord.payload;\n\n // 2. Validate current status is 'active'\n if (task.status !== 'active') {\n throw new Error(`ProtocolViolationError: Task is in '${task.status}' state. Cannot pause (requires active).`);\n }\n\n // 3. Resolve actor and validate permissions via workflow methodology\n const actor = await this.getActor(actorId);\n\n const context = {\n task,\n actor,\n signatures: taskRecord.header.signatures,\n transitionTo: 'paused' as TaskRecord['status']\n };\n\n const transitionRule = await this.workflowMethodologyAdapter.getTransitionRule('active', 'paused', context);\n if (!transitionRule) {\n throw new Error('ProtocolViolationError: Workflow methodology rejected activeāpaused transition');\n }\n\n // 4. Update task status to 'paused' and add reason to notes if provided\n const updatedPayload: TaskRecord = {\n ...task,\n status: 'paused',\n // Add reason to notes with [PAUSED] prefix if provided\n ...(reason && {\n notes: `${task.notes || ''}\\n[PAUSED] ${reason} (${new Date().toISOString()})`.trim()\n })\n };\n const updatedRecord = { ...taskRecord, payload: updatedPayload };\n\n // 5. Sign and persist with pauser role\n const signedRecord = await this.identity.signRecord(updatedRecord, actorId, 'pauser');\n await this.taskStore.write(signedRecord as GitGovRecord & { payload: TaskRecord });\n\n // 6. Emit task status changed event\n this.eventBus.publish({\n type: 'task.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId,\n oldStatus: 'active',\n newStatus: 'paused',\n actorId,\n reason: reason || 'Task manually paused'\n }\n } as TaskStatusChangedEvent);\n\n return updatedPayload;\n }\n\n /**\n * Resumes a paused task transitioning back to active with optional force override\n */\n async resumeTask(taskId: string, actorId: string, force: boolean = false): Promise<TaskRecord> {\n // 1. Read and validate task exists\n const taskRecord = await this.taskStore.read(taskId);\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n\n const task = taskRecord.payload;\n\n // 2. Validate current status is 'paused'\n if (task.status !== 'paused') {\n throw new Error(`ProtocolViolationError: Task is in '${task.status}' state. Cannot resume (requires paused).`);\n }\n\n // 3. Resolve actor and validate permissions via workflow methodology\n const actor = await this.getActor(actorId);\n\n if (!force) {\n const taskHealth = await this.metricsAdapter.getTaskHealth(task.id);\n if (taskHealth.blockingFeedbacks > 0) {\n throw new Error('BlockingFeedbackError: Task has blocking feedbacks. Resolve them before resuming or use force.');\n }\n }\n\n const context = {\n task,\n actor,\n signatures: taskRecord.header.signatures,\n transitionTo: 'active' as TaskRecord['status']\n };\n\n const transitionRule = await this.workflowMethodologyAdapter.getTransitionRule('paused', 'active', context);\n if (!transitionRule) {\n throw new Error('ProtocolViolationError: Workflow methodology rejected pausedāactive transition');\n }\n\n // 4. Update task status back to 'active'\n const updatedPayload: TaskRecord = { ...task, status: 'active' };\n const updatedRecord = { ...taskRecord, payload: updatedPayload };\n\n // 5. Sign and persist with resumer role\n const signedRecord = await this.identity.signRecord(updatedRecord, actorId, 'resumer');\n await this.taskStore.write(signedRecord as GitGovRecord & { payload: TaskRecord });\n\n // 6. Emit task status changed event\n this.eventBus.publish({\n type: 'task.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId,\n oldStatus: 'paused',\n newStatus: 'active',\n actorId\n }\n } as TaskStatusChangedEvent);\n\n return updatedPayload;\n }\n\n /**\n * Completes a task transitioning from active to done with signature validation\n */\n async completeTask(taskId: string, actorId: string): Promise<TaskRecord> {\n // 1. Read and validate task exists\n const taskRecord = await this.taskStore.read(taskId);\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n\n const task = taskRecord.payload;\n const actor = await this.getActor(actorId);\n\n // 2. Validate current status is 'active'\n if (task.status !== 'active') {\n throw new Error(`ProtocolViolationError: Task is in '${task.status}' state. Cannot complete from this state.`);\n }\n\n // 3. Validate transition with WorkflowMethodology\n const context = {\n task,\n actor,\n signatures: taskRecord.header.signatures,\n transitionTo: 'done' as TaskRecord['status']\n };\n\n const transitionRule = await this.workflowMethodologyAdapter.getTransitionRule('active', 'done', context);\n if (!transitionRule) {\n throw new Error(`ProtocolViolationError: Workflow methodology rejected activeādone transition`);\n }\n\n // 4. Update task status to 'done'\n const updatedPayload: TaskRecord = { ...task, status: 'done' };\n const updatedRecord = { ...taskRecord, payload: updatedPayload };\n\n // 5. Sign the record with 'approver' role\n const signedRecord = await this.identity.signRecord(updatedRecord, actorId, 'approver');\n await this.taskStore.write(signedRecord as GitGovRecord & { payload: TaskRecord });\n\n // 6. Emit task status changed event\n this.eventBus.publish({\n type: 'task.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId,\n oldStatus: 'active',\n newStatus: 'done',\n actorId\n }\n } as TaskStatusChangedEvent);\n\n return updatedPayload;\n }\n\n /**\n * Discards a task transitioning from ready/active/review to discarded\n * Supports both cancellation (ready/active) and rejection (review) operations\n */\n async discardTask(taskId: string, actorId: string, reason?: string): Promise<TaskRecord> {\n // 1. Read and validate task exists\n const taskRecord = await this.taskStore.read(taskId);\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n\n const task = taskRecord.payload;\n const actor = await this.getActor(actorId);\n\n // 2. Validate current status allows cancellation/rejection with educational error messages\n if (!['ready', 'active', 'review'].includes(task.status)) {\n // Educational error messages for semantic clarity\n if (task.status === 'draft') {\n throw new Error(`ProtocolViolationError: Cannot cancel task in 'draft' state. Use 'gitgov task delete ${taskId}' to remove draft tasks.`);\n }\n throw new Error(`ProtocolViolationError: Task is in '${task.status}' state. Cannot cancel from this state. Only 'ready', 'active', and 'review' tasks can be cancelled.`);\n }\n\n // 3. Validate transition with WorkflowMethodology\n const context = {\n task,\n actor,\n signatures: taskRecord.header.signatures,\n transitionTo: 'discarded' as TaskRecord['status']\n };\n\n const transitionRule = await this.workflowMethodologyAdapter.getTransitionRule(task.status, 'discarded', context);\n if (!transitionRule) {\n throw new Error(`ProtocolViolationError: Workflow methodology rejected ${task.status}ādiscarded transition`);\n }\n\n // 4. Update task status to 'discarded' and add cancellation/rejection reason\n const updatedPayload: TaskRecord = {\n ...task,\n status: 'discarded',\n // Add reason to notes with appropriate prefix based on current state\n ...(reason && {\n notes: `${task.notes || ''}\\n${task.status === 'review' ? '[REJECTED]' : '[CANCELLED]'} ${reason} (${new Date().toISOString()})`.trim()\n })\n };\n const updatedRecord = { ...taskRecord, payload: updatedPayload };\n\n // 5. Sign the record with 'canceller' role\n const signedRecord = await this.identity.signRecord(updatedRecord, actorId, 'canceller');\n await this.taskStore.write(signedRecord as GitGovRecord & { payload: TaskRecord });\n\n // 6. Emit task status changed event\n this.eventBus.publish({\n type: 'task.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId,\n oldStatus: task.status,\n newStatus: 'discarded',\n actorId,\n reason: reason || (task.status === 'review' ? 'Task rejected' : 'Task cancelled')\n }\n } as TaskStatusChangedEvent);\n\n return updatedPayload;\n }\n\n /**\n * Deletes a draft task completely (no discarded state)\n * Only works for tasks in 'draft' status that never entered formal workflow\n */\n async deleteTask(taskId: string, actorId: string): Promise<void> {\n // 1. Read and validate task exists\n const taskRecord = await this.taskStore.read(taskId);\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n\n const task = taskRecord.payload;\n\n // 2. Validate current status is 'draft' with educational error messages\n if (task.status !== 'draft') {\n // Educational error messages for semantic clarity\n if (task.status === 'review') {\n throw new Error(`ProtocolViolationError: Cannot delete task in 'review' state. Use 'gitgov task reject ${taskId}' to discard tasks under review.`);\n } else if (task.status === 'ready' || task.status === 'active') {\n throw new Error(`ProtocolViolationError: Cannot delete task in '${task.status}' state. Use 'gitgov task cancel ${taskId}' to discard tasks from ready/active states.`);\n }\n throw new Error(`ProtocolViolationError: Cannot delete task in '${task.status}' state. Only draft tasks can be deleted.`);\n }\n\n // 3. Validate actor has permission (simplified for MVP - in production would check permissions)\n await this.getActor(actorId);\n\n // 4. Delete the task file directly (no discarded state needed for draft)\n await this.taskStore.delete(taskId);\n\n // 5. Emit task deleted event (not a status change since it's being removed)\n this.eventBus.publish({\n type: 'task.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId,\n oldStatus: 'draft',\n newStatus: 'deleted',\n actorId,\n reason: 'Draft task deleted'\n }\n } as TaskStatusChangedEvent);\n }\n\n /**\n * Updates a task with new payload\n */\n async updateTask(taskId: string, payload: Partial<TaskRecord>): Promise<TaskRecord> {\n const taskRecord = await this.taskStore.read(taskId);\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n\n // Validate not in final state\n if (['archived'].includes(taskRecord.payload.status)) {\n throw new Error(`ProtocolViolationError: Cannot update task in final state: ${taskRecord.payload.status}`);\n }\n\n // Merge and validate with factory\n const updatedPayload = await createTaskRecord({ ...taskRecord.payload, ...payload });\n const updatedRecord = { ...taskRecord, payload: updatedPayload };\n\n await this.taskStore.write(updatedRecord);\n return updatedPayload;\n }\n\n // ===== PHASE 2: AGENT NAVIGATION (IMPLEMENTED) =====\n\n /**\n * Gets tasks assigned to a specific actor\n */\n async getTasksAssignedToActor(actorId: string): Promise<TaskRecord[]> {\n // Read all feedbacks to find assignments\n const feedbackIds = await this.feedbackStore.list();\n const assignedTaskIds: string[] = [];\n\n for (const id of feedbackIds) {\n const record = await this.feedbackStore.read(id);\n if (record &&\n record.payload.type === 'assignment' &&\n record.payload.assignee === actorId) {\n assignedTaskIds.push(record.payload.entityId);\n }\n }\n\n // Deduplicate task IDs (same task may have multiple assignment records)\n const uniqueTaskIds = [...new Set(assignedTaskIds)];\n\n // Read the assigned tasks\n const assignedTasks: TaskRecord[] = [];\n for (const taskId of uniqueTaskIds) {\n const task = await this.getTask(taskId);\n if (task) {\n assignedTasks.push(task);\n }\n }\n\n return assignedTasks;\n }\n\n // ===== PHASE 3: EVENT HANDLERS (NEW IMPLEMENTATION) =====\n\n /**\n * [EARS-31, EARS-33, EARS-34] Handles feedback created events (Immutable Pattern)\n * \n * This handler respects the immutable feedback pattern:\n * - Case 1: Blocking feedback created ā pause task if active/ready\n * - Case 2: Feedback resolving another feedback ā resume task if no more blocks\n * \n * The immutable pattern means:\n * - Original feedbacks NEVER change status\n * - Resolution is expressed by creating a NEW feedback pointing to the original\n * - We detect resolution via: entityType='feedback' + status='resolved' + resolvesFeedbackId\n */\n async handleFeedbackCreated(event: FeedbackCreatedEvent): Promise<void> {\n try {\n const metadata: EventMetadata = {\n eventId: `${Date.now()}-handle-feedback-created`,\n timestamp: Date.now(),\n processedAt: Date.now(),\n sourceAdapter: 'backlog_adapter'\n };\n\n // === CASE 1: Blocking Feedback Created on Task ===\n if (event.payload.type === 'blocking' && event.payload.entityType === 'task') {\n // Read the associated task\n const task = await this.getTask(event.payload.entityId);\n if (!task) {\n console.warn(`Task not found for feedback: ${event.payload.entityId}`);\n return;\n }\n\n // Only pause if task is in a pausable state\n if (!['active', 'ready'].includes(task.status)) {\n return; // EARS-32: Do nothing if task not pausable\n }\n\n // Update task to paused\n const updatedTask = { ...task, status: 'paused' as const };\n const taskRecord = await this.taskStore.read(task.id);\n if (taskRecord) {\n const updatedRecord = { ...taskRecord, payload: updatedTask };\n await this.taskStore.write(updatedRecord);\n\n // Emit status change event\n this.eventBus.publish({\n type: 'task.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId: task.id,\n oldStatus: task.status,\n newStatus: 'paused',\n actorId: 'system'\n },\n metadata\n } as TaskStatusChangedEvent);\n }\n return;\n }\n\n // === CASE 2: Feedback Resolving Another Feedback (Immutable Pattern) ===\n // Detect: entityType='feedback' + status='resolved' + resolvesFeedbackId present\n if (\n event.payload.entityType === 'feedback' &&\n event.payload.status === 'resolved' &&\n event.payload.resolvesFeedbackId\n ) {\n // 1. Get the ORIGINAL feedback that was resolved\n const originalFeedback = await this.feedbackAdapter.getFeedback(event.payload.resolvesFeedbackId);\n if (!originalFeedback || originalFeedback.type !== 'blocking') {\n return; // Only care about blocking feedbacks\n }\n\n // 2. Get the task associated with the original blocking feedback\n const task = await this.getTask(originalFeedback.entityId);\n if (!task || task.status !== 'paused') {\n return; // Only resume if task is paused\n }\n\n // 3. Check if other blocking feedbacks remain open (EARS-34)\n const taskHealth = await this.metricsAdapter.getTaskHealth(task.id);\n if (taskHealth.blockingFeedbacks > 0) {\n return; // Don't resume if other blocks remain\n }\n\n // 4. Resume task automatically\n const updatedTask = { ...task, status: 'active' as const };\n const taskRecord = await this.taskStore.read(task.id);\n if (taskRecord) {\n const updatedRecord = { ...taskRecord, payload: updatedTask };\n await this.taskStore.write(updatedRecord);\n\n this.eventBus.publish({\n type: 'task.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId: task.id,\n oldStatus: 'paused',\n newStatus: 'active',\n actorId: 'system'\n },\n metadata\n } as TaskStatusChangedEvent);\n }\n return;\n }\n\n // Other feedback types: do nothing\n } catch (error) {\n console.error('Error in handleFeedbackCreated:', error);\n }\n }\n\n\n /**\n * [EARS-35] Handles execution created events - transitions readyāactive on first execution\n */\n async handleExecutionCreated(event: ExecutionCreatedEvent): Promise<void> {\n try {\n // EARS-35: Use ExecutionAdapter isFirstExecution logic\n if (!event.payload.isFirstExecution) {\n return; // EARS-36: Do nothing on subsequent executions\n }\n\n const task = await this.getTask(event.payload.taskId);\n if (!task || task.status !== 'ready') {\n return;\n }\n\n // EARS-36: Validate with WorkflowMethodology before transition\n const actor = await this.getActor(event.payload.triggeredBy);\n const transitionRule = await this.workflowMethodologyAdapter.getTransitionRule('ready', 'active', {\n task,\n actor,\n signatures: []\n });\n\n if (!transitionRule) {\n console.warn(`Workflow methodology rejected readyāactive transition for task ${task.id}`);\n return;\n }\n\n // Transition to active\n const updatedTask = { ...task, status: 'active' as const };\n const taskRecord = await this.taskStore.read(task.id);\n if (taskRecord) {\n const updatedRecord = { ...taskRecord, payload: updatedTask };\n await this.taskStore.write(updatedRecord);\n\n this.eventBus.publish({\n type: 'task.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId: task.id,\n oldStatus: 'ready',\n newStatus: 'active',\n actorId: event.payload.triggeredBy\n }\n } as TaskStatusChangedEvent);\n }\n } catch (error) {\n console.error('Error in handleExecutionCreated:', error);\n }\n }\n\n /**\n * [EARS-37] Handles changelog created events - transitions doneāarchived\n */\n async handleChangelogCreated(event: ChangelogCreatedEvent): Promise<void> {\n try {\n // Get changelog record to access entityType and entityId\n const changelogRecord = await this.changelogStore.read(event.payload.changelogId);\n if (!changelogRecord) {\n console.warn(`Changelog not found: ${event.payload.changelogId}`);\n return;\n }\n\n // EARS-37: Handle changelogs with relatedTasks\n if (!changelogRecord.payload.relatedTasks || changelogRecord.payload.relatedTasks.length === 0) {\n return;\n }\n\n // Archive all related tasks that are in 'done' status\n for (const taskId of changelogRecord.payload.relatedTasks) {\n const task = await this.getTask(taskId);\n if (!task || task.status !== 'done') {\n continue;\n }\n\n // Transition to archived\n const updatedTask = { ...task, status: 'archived' as const };\n const taskRecord = await this.taskStore.read(task.id);\n if (taskRecord) {\n const updatedRecord = { ...taskRecord, payload: updatedTask };\n await this.taskStore.write(updatedRecord);\n\n this.eventBus.publish({\n type: 'task.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n taskId: task.id,\n oldStatus: 'done',\n newStatus: 'archived',\n actorId: 'system'\n }\n } as TaskStatusChangedEvent);\n }\n } // Close for loop\n } catch (error) {\n console.error('Error in handleChangelogCreated:', error);\n }\n }\n\n /**\n * [EARS-38] Handles daily tick events - proactive health auditing\n */\n async handleDailyTick(_event: SystemDailyTickEvent): Promise<void> {\n try {\n // EARS-38: Use MetricsAdapter for proactive auditing\n const systemStatus = await this.metricsAdapter.getSystemStatus();\n\n // Get all active tasks for health analysis\n const allTasks = await this.getAllTasks();\n const activeTasks = allTasks.filter(task => task.status === 'active');\n\n for (const task of activeTasks) {\n const taskHealth = await this.metricsAdapter.getTaskHealth(task.id);\n\n // Apply configurable health thresholds\n if (taskHealth.healthScore < this.config.healthThresholds.taskMinScore ||\n taskHealth.timeInCurrentStage > this.config.healthThresholds.maxDaysInStage) {\n // Create automated warning feedback\n await this.feedbackAdapter.create({\n entityType: 'task',\n entityId: task.id,\n type: 'suggestion',\n content: `Automated health warning: Task health score is ${taskHealth.healthScore}%. ${taskHealth.recommendations.join('. ')}.`,\n status: 'open'\n }, 'system');\n }\n }\n\n // Log system health alert if critical issues (no custom event needed)\n if (systemStatus.health.overallScore < this.config.healthThresholds.systemMinScore) {\n console.warn(`System health alert: Score ${systemStatus.health.overallScore}%, blocked: ${systemStatus.health.blockedTasks}, stale: ${systemStatus.health.staleTasks}`);\n // Note: Health alerts are logged, not emitted as events. \n // System monitoring should read logs for alerting.\n }\n } catch (error) {\n console.error('Error in handleDailyTick:', error);\n }\n }\n\n /**\n * [EARS-45] Handles cycle status changed events - manages cycle hierarchy completion\n */\n async handleCycleStatusChanged(event: CycleStatusChangedEvent): Promise<void> {\n try {\n // Only handle cycle completion\n if (event.payload.newStatus !== 'completed') {\n return;\n }\n\n const completedCycle = await this.getCycle(event.payload.cycleId);\n if (!completedCycle) {\n console.warn(`Completed cycle not found: ${event.payload.cycleId}`);\n return;\n }\n\n // Find parent cycles that contain this completed cycle\n const allCycles = await this.getAllCycles();\n const parentCycles = allCycles.filter(cycle =>\n cycle.childCycleIds?.includes(event.payload.cycleId)\n );\n\n for (const parentCycle of parentCycles) {\n // Check if ALL child cycles are completed\n const childCycles = await Promise.all(\n (parentCycle.childCycleIds || []).map(id => this.getCycle(id))\n );\n\n const allChildrenCompleted = childCycles.every(child =>\n child && child.status === 'completed'\n );\n\n if (allChildrenCompleted) {\n // Complete the parent cycle\n await this.updateCycle(parentCycle.id, { status: 'completed' });\n\n // TODO: Delegate epic task completion to planning methodology\n // The logic for completing epic tasks based on cycle completion\n // should be handled by planningMethodology, not backlogAdapter\n /*\n if (this.planningMethodology) {\n await this.planningMethodology.handleEpicCompletion({\n completedCycleId: parentCycle.id,\n event\n });\n }\n */\n\n // For now, just log the completion - epic logic will be in planning methodology\n console.log(`Parent cycle ${parentCycle.id} completed - epic task completion delegated to planning methodology`);\n }\n }\n } catch (error) {\n console.error('Error in handleCycleStatusChanged:', error);\n }\n }\n\n // ===== PHASE 4: STUBS AND POLISH (DELEGATE TO ADAPTERS) =====\n\n /**\n * Gets system status by delegating to MetricsAdapter\n */\n async getSystemStatus(): Promise<SystemStatus> {\n return await this.metricsAdapter.getSystemStatus();\n }\n\n /**\n * Gets task health by delegating to MetricsAdapter\n */\n async getTaskHealth(taskId: string): Promise<TaskHealthReport> {\n return await this.metricsAdapter.getTaskHealth(taskId);\n }\n\n // ===== HELPER METHODS =====\n\n /**\n * Helper to get actor record\n */\n private async getActor(actorId: string): Promise<ActorRecord> {\n // Use IdentityAdapter to get real actor data\n const actor = await this.identity.getActor(actorId);\n if (!actor) {\n throw new Error(`RecordNotFoundError: Actor not found: ${actorId}`);\n }\n return actor;\n }\n\n /**\n * Helper to get available transitions from current state\n */\n private async getAvailableTransitions(fromStatus: string): Promise<Array<{ from: string; to: string; requires?: { signatures?: Record<string, { role: string }> } }>> {\n // This would normally be implemented using workflowMethodology.getAvailableTransitions()\n // For now, implementing basic logic based on canonical workflow\n const transitions = [\n { from: 'review', to: 'ready', requires: { signatures: { __default__: { role: 'approver' } } } },\n { from: 'active', to: 'done', requires: { signatures: { __default__: { role: 'approver' } } } }\n ];\n\n return transitions.filter(t => t.from === fromStatus);\n }\n\n // ===== PHASE 1: CYCLE CRUD OPERATIONS (IMPLEMENTED) =====\n\n /**\n * Creates a new cycle with workflow validation\n */\n async createCycle(payload: Partial<CycleRecord>, actorId: string): Promise<CycleRecord> {\n // 1. Build the record with factory\n const validatedPayload = await createCycleRecord(payload);\n\n // 2. Create unsigned record structure\n const unsignedRecord: GitGovRecord & { payload: CycleRecord } = {\n header: {\n version: '1.0',\n type: 'cycle',\n payloadChecksum: 'will-be-calculated-by-signRecord',\n signatures: [{\n keyId: actorId,\n role: 'author',\n notes: 'Cycle created',\n signature: 'placeholder',\n timestamp: Date.now()\n }]\n },\n payload: validatedPayload,\n };\n\n // 3. Sign the record\n const signedRecord = await this.identity.signRecord(unsignedRecord, actorId, 'author');\n\n // 4. Persist the record\n await this.cycleStore.write(signedRecord as GitGovRecord & { payload: CycleRecord });\n\n // 5. Emit event\n this.eventBus.publish({\n type: 'cycle.created',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n cycleId: validatedPayload.id,\n actorId\n },\n metadata: {\n eventId: `${Date.now()}-cycle-created-${validatedPayload.id}`,\n timestamp: Date.now(),\n sourceAdapter: 'backlog_adapter'\n }\n } as CycleCreatedEvent);\n\n return validatedPayload;\n }\n\n /**\n * Gets a specific cycle by ID\n */\n async getCycle(cycleId: string): Promise<CycleRecord | null> {\n const record = await this.cycleStore.read(cycleId);\n return record ? record.payload : null;\n }\n\n /**\n * Gets all cycles in the system\n */\n async getAllCycles(): Promise<CycleRecord[]> {\n const ids = await this.cycleStore.list();\n const cycles: CycleRecord[] = [];\n\n for (const id of ids) {\n const record = await this.cycleStore.read(id);\n if (record) {\n cycles.push(record.payload);\n }\n }\n\n return cycles;\n }\n\n /**\n * Updates a cycle with new payload\n */\n async updateCycle(cycleId: string, payload: Partial<CycleRecord>): Promise<CycleRecord> {\n const cycleRecord = await this.cycleStore.read(cycleId);\n if (!cycleRecord) {\n throw new Error(`RecordNotFoundError: Cycle not found: ${cycleId}`);\n }\n\n // Validate not in final state\n if (['archived'].includes(cycleRecord.payload.status)) {\n throw new Error(`ProtocolViolationError: Cannot update cycle in final state: ${cycleRecord.payload.status}`);\n }\n\n // Merge and validate with factory\n const updatedPayload = await createCycleRecord({ ...cycleRecord.payload, ...payload });\n const updatedRecord = { ...cycleRecord, payload: updatedPayload };\n\n // Emit event if status changed\n if (cycleRecord.payload.status !== updatedPayload.status) {\n this.eventBus.publish({\n type: 'cycle.status.changed',\n timestamp: Date.now(),\n source: 'backlog_adapter',\n payload: {\n cycleId,\n oldStatus: cycleRecord.payload.status,\n newStatus: updatedPayload.status,\n actorId: 'system'\n }\n } as CycleStatusChangedEvent);\n }\n\n await this.cycleStore.write(updatedRecord);\n return updatedPayload;\n }\n\n /**\n * Creates bidirectional link between task and cycle\n */\n async addTaskToCycle(cycleId: string, taskId: string): Promise<void> {\n // Read both records\n const cycleRecord = await this.cycleStore.read(cycleId);\n const taskRecord = await this.taskStore.read(taskId);\n\n if (!cycleRecord) {\n throw new Error(`RecordNotFoundError: Cycle not found: ${cycleId}`);\n }\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n\n // Create bidirectional links\n const updatedCycle = {\n ...cycleRecord.payload,\n taskIds: [...(cycleRecord.payload.taskIds || []), taskId]\n };\n const updatedTask = {\n ...taskRecord.payload,\n cycleIds: [...(taskRecord.payload.cycleIds || []), cycleId]\n };\n\n // Get current actor for signing (MVP mode)\n const currentActor = await this.identity.getCurrentActor();\n\n // Sign and persist both records with current actor\n const signedCycleRecord = await this.identity.signRecord(\n { ...cycleRecord, payload: updatedCycle },\n currentActor.id,\n 'author'\n );\n const signedTaskRecord = await this.identity.signRecord(\n { ...taskRecord, payload: updatedTask },\n currentActor.id,\n 'author'\n );\n\n await Promise.all([\n this.cycleStore.write(signedCycleRecord as GitGovRecord & { payload: CycleRecord }),\n this.taskStore.write(signedTaskRecord as GitGovRecord & { payload: TaskRecord })\n ]);\n }\n\n /**\n * Removes multiple tasks from a cycle with bidirectional unlinking\n * All business logic and validation happens here in the adapter\n */\n async removeTasksFromCycle(cycleId: string, taskIds: string[]): Promise<void> {\n // 1. Validate inputs\n if (!cycleId || typeof cycleId !== 'string') {\n throw new Error('ValidationError: cycleId must be a non-empty string');\n }\n if (!Array.isArray(taskIds) || taskIds.length === 0) {\n throw new Error('ValidationError: taskIds must be a non-empty array');\n }\n\n // 2. Read cycle record\n const cycleRecord = await this.cycleStore.read(cycleId);\n if (!cycleRecord) {\n throw new Error(`RecordNotFoundError: Cycle not found: ${cycleId}`);\n }\n\n // 3. Read all task records and validate they exist\n const taskRecords = await Promise.all(\n taskIds.map(async (taskId) => {\n const taskRecord = await this.taskStore.read(taskId);\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n return { taskId, record: taskRecord };\n })\n );\n\n // 4. Validate that all tasks are actually linked to this cycle\n const cycleTaskIds = cycleRecord.payload.taskIds || [];\n const notLinkedTasks = taskIds.filter(taskId => !cycleTaskIds.includes(taskId));\n if (notLinkedTasks.length > 0) {\n throw new Error(`ValidationError: Tasks not linked to cycle ${cycleId}: ${notLinkedTasks.join(', ')}`);\n }\n\n // 5. Prepare updated cycle (remove all taskIds)\n const updatedCycle = {\n ...cycleRecord.payload,\n taskIds: cycleTaskIds.filter(id => !taskIds.includes(id))\n };\n\n // 6. Get current actor for signing\n const currentActor = await this.identity.getCurrentActor();\n\n // 7. Sign cycle record\n const signedCycleRecord = await this.identity.signRecord(\n { ...cycleRecord, payload: updatedCycle },\n currentActor.id,\n 'author'\n );\n\n // 8. Prepare and sign all task records (remove cycleId from each)\n const signedTaskRecords = await Promise.all(\n taskRecords.map(async ({ record }) => {\n const taskCycleIds = record.payload.cycleIds || [];\n const updatedTask = {\n ...record.payload,\n cycleIds: taskCycleIds.filter(id => id !== cycleId)\n };\n return await this.identity.signRecord(\n { ...record, payload: updatedTask },\n currentActor.id,\n 'author'\n );\n })\n );\n\n // 9. Atomic write - all or nothing\n await Promise.all([\n this.cycleStore.write(signedCycleRecord as GitGovRecord & { payload: CycleRecord }),\n ...signedTaskRecords.map(signedTask =>\n this.taskStore.write(signedTask as GitGovRecord & { payload: TaskRecord })\n )\n ]);\n }\n\n /**\n * Moves multiple tasks from one cycle to another atomically\n * Provides transactional semantics - all tasks move or none do\n * All business logic and validation happens here in the adapter\n */\n async moveTasksBetweenCycles(targetCycleId: string, taskIds: string[], sourceCycleId: string): Promise<void> {\n // 1. Validate inputs\n if (!sourceCycleId || typeof sourceCycleId !== 'string') {\n throw new Error('ValidationError: sourceCycleId must be a non-empty string');\n }\n if (!targetCycleId || typeof targetCycleId !== 'string') {\n throw new Error('ValidationError: targetCycleId must be a non-empty string');\n }\n if (!Array.isArray(taskIds) || taskIds.length === 0) {\n throw new Error('ValidationError: taskIds must be a non-empty array');\n }\n if (sourceCycleId === targetCycleId) {\n throw new Error('ValidationError: Source and target cycles must be different');\n }\n\n // 2. Read all records\n const [sourceCycleRecord, targetCycleRecord] = await Promise.all([\n this.cycleStore.read(sourceCycleId),\n this.cycleStore.read(targetCycleId)\n ]);\n\n if (!sourceCycleRecord) {\n throw new Error(`RecordNotFoundError: Source cycle not found: ${sourceCycleId}`);\n }\n if (!targetCycleRecord) {\n throw new Error(`RecordNotFoundError: Target cycle not found: ${targetCycleId}`);\n }\n\n // 3. Read all task records and validate they exist\n const taskRecords = await Promise.all(\n taskIds.map(async (taskId) => {\n const taskRecord = await this.taskStore.read(taskId);\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n return { taskId, record: taskRecord };\n })\n );\n\n // 4. Validate that all tasks are actually linked to source cycle\n const sourceTaskIds = sourceCycleRecord.payload.taskIds || [];\n const notLinkedTasks = taskIds.filter(taskId => !sourceTaskIds.includes(taskId));\n if (notLinkedTasks.length > 0) {\n throw new Error(`ValidationError: Tasks not linked to source cycle ${sourceCycleId}: ${notLinkedTasks.join(', ')}`);\n }\n\n // 5. Prepare updated cycles\n const updatedSourceCycle = {\n ...sourceCycleRecord.payload,\n taskIds: sourceTaskIds.filter(id => !taskIds.includes(id))\n };\n const updatedTargetCycle = {\n ...targetCycleRecord.payload,\n taskIds: [...(targetCycleRecord.payload.taskIds || []), ...taskIds]\n };\n\n // 6. Get current actor for signing\n const currentActor = await this.identity.getCurrentActor();\n\n // 7. Sign both cycle records\n const [signedSourceCycle, signedTargetCycle] = await Promise.all([\n this.identity.signRecord(\n { ...sourceCycleRecord, payload: updatedSourceCycle },\n currentActor.id,\n 'author'\n ),\n this.identity.signRecord(\n { ...targetCycleRecord, payload: updatedTargetCycle },\n currentActor.id,\n 'author'\n )\n ]);\n\n // 8. Prepare and sign all task records (update cycleIds)\n const signedTaskRecords = await Promise.all(\n taskRecords.map(async ({ record }) => {\n const taskCycleIds = record.payload.cycleIds || [];\n const updatedTask = {\n ...record.payload,\n cycleIds: taskCycleIds\n .filter(id => id !== sourceCycleId) // Remove source\n .concat(targetCycleId) // Add target\n };\n return await this.identity.signRecord(\n { ...record, payload: updatedTask },\n currentActor.id,\n 'author'\n );\n })\n );\n\n // 9. Atomic write - all or nothing\n try {\n await Promise.all([\n this.cycleStore.write(signedSourceCycle as GitGovRecord & { payload: CycleRecord }),\n this.cycleStore.write(signedTargetCycle as GitGovRecord & { payload: CycleRecord }),\n ...signedTaskRecords.map(signedTask =>\n this.taskStore.write(signedTask as GitGovRecord & { payload: TaskRecord })\n )\n ]);\n } catch (error) {\n throw new Error(`AtomicOperationError: Failed to move tasks between cycles: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n }\n\n // TODO: Implement when lint_command.md is implemented\n async lint(): Promise<LintReport> {\n throw new Error('NotImplementedError: lint() will be implemented when lint_command.md is ready');\n }\n\n // TODO: Implement when audit_command.md is implemented \n async audit(): Promise<AuditReport> {\n throw new Error('NotImplementedError: audit() will be implemented when audit_command.md is ready');\n }\n\n // TODO: Implement when commit_processor.md is implemented\n async processChanges(_changes: unknown[]): Promise<ExecutionRecord[]> {\n throw new Error('NotImplementedError: processChanges() will be implemented when commit_processor.md is ready');\n }\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"actor_record_schema.json\",\n \"title\": \"ActorRecord\",\n \"description\": \"Canonical schema for actor records as defined in actor_protocol.md\",\n \"additionalProperties\": false,\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"type\",\n \"displayName\",\n \"publicKey\",\n \"roles\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"pattern\": \"^(human|agent)(:[a-z0-9-]+)+$\",\n \"description\": \"Unique, human-readable identifier for the actor.\",\n \"examples\": [\n \"human:camilo\",\n \"agent:aion\",\n \"agent:camilo:cursor\"\n ]\n },\n \"type\": {\n \"type\": \"string\",\n \"enum\": [\n \"human\",\n \"agent\"\n ],\n \"description\": \"The type of actor.\"\n },\n \"displayName\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 100,\n \"description\": \"The name of the actor to be used in user interfaces.\"\n },\n \"publicKey\": {\n \"type\": \"string\",\n \"minLength\": 44,\n \"maxLength\": 44,\n \"description\": \"The Ed25519 public key (base64 encoded, 44 characters) for verifying the actor's signatures.\"\n },\n \"roles\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"pattern\": \"^[a-z0-9-]+(:[a-z0-9-]+)*$\"\n },\n \"minItems\": 1,\n \"uniqueItems\": true,\n \"description\": \"List of capacity roles defining the actor's skills and permissions. Uses hierarchical format with colons.\",\n \"examples\": [\n [\n \"developer:backend:go\",\n \"auditor\"\n ],\n [\n \"planner:ai\"\n ]\n ]\n },\n \"status\": {\n \"type\": \"string\",\n \"enum\": [\n \"active\",\n \"revoked\"\n ],\n \"default\": \"active\",\n \"description\": \"Optional. The lifecycle status of the actor. Defaults to 'active' if not specified.\"\n },\n \"supersededBy\": {\n \"type\": \"string\",\n \"pattern\": \"^(human|agent)(:[a-z0-9-]+)+$\",\n \"description\": \"Optional. The ID of the actor that replaces this one.\"\n },\n \"metadata\": {\n \"type\": \"object\",\n \"description\": \"An optional field for additional, non-canonical metadata.\",\n \"examples\": [\n {\n \"version\": \"1.2.0\",\n \"source\": \"https://github.com/...\"\n },\n {\n \"team\": \"frontend\"\n }\n ]\n }\n }\n}","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"agent_record_schema.json\",\n \"title\": \"AgentRecord\",\n \"description\": \"Canonical schema for agent operational manifests.\",\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"engine\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"pattern\": \"^agent:[a-z0-9:-]+$\",\n \"description\": \"Unique identifier for the agent, linking to an ActorRecord.\"\n },\n \"status\": {\n \"type\": \"string\",\n \"enum\": [\n \"active\",\n \"archived\"\n ],\n \"default\": \"active\"\n },\n \"triggers\": {\n \"type\": \"array\",\n \"default\": [],\n \"description\": \"Optional list of triggers that activate the agent.\\nAdditional fields are allowed and depend on trigger type:\\n- webhook triggers: 'event' (event identifier), 'filter' (condition)\\n- scheduled triggers: 'cron' (cron expression)\\n- manual triggers: 'command' (example CLI command)\\n\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"enum\": [\n \"manual\",\n \"webhook\",\n \"scheduled\"\n ],\n \"description\": \"Type of trigger that activates the agent\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"additionalProperties\": true\n }\n },\n \"knowledge_dependencies\": {\n \"type\": \"array\",\n \"default\": [],\n \"items\": {\n \"type\": \"string\",\n \"description\": \"Glob patterns for blueprint files this agent needs access to\"\n }\n },\n \"prompt_engine_requirements\": {\n \"type\": \"object\",\n \"properties\": {\n \"roles\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"skills\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n }\n },\n \"metadata\": {\n \"type\": \"object\",\n \"description\": \"Optional framework-specific or deployment-specific metadata for agent extensions.\\nCommon use cases: framework identification (langchain, google-adk), deployment info (provider, image, region),\\ncost tracking (cost_per_invocation, currency), tool capabilities, maintainer info.\\nThis field does NOT affect agent execution - it is purely informational.\\n\",\n \"additionalProperties\": true\n },\n \"engine\": {\n \"type\": \"object\",\n \"oneOf\": [\n {\n \"required\": [\n \"type\"\n ],\n \"additionalProperties\": false,\n \"properties\": {\n \"type\": {\n \"const\": \"local\"\n },\n \"runtime\": {\n \"type\": \"string\",\n \"description\": \"Runtime environment (typescript, python, etc.)\"\n },\n \"entrypoint\": {\n \"type\": \"string\",\n \"description\": \"Path to the agent entry file\"\n },\n \"function\": {\n \"type\": \"string\",\n \"description\": \"Function name to invoke\"\n }\n }\n },\n {\n \"required\": [\n \"type\",\n \"url\"\n ],\n \"additionalProperties\": false,\n \"properties\": {\n \"type\": {\n \"const\": \"api\"\n },\n \"url\": {\n \"type\": \"string\",\n \"format\": \"uri\",\n \"description\": \"HTTP endpoint for the agent\"\n },\n \"method\": {\n \"type\": \"string\",\n \"enum\": [\n \"POST\",\n \"GET\"\n ],\n \"default\": \"POST\"\n },\n \"auth\": {\n \"type\": \"object\",\n \"description\": \"Authentication configuration for API requests\",\n \"additionalProperties\": true,\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"enum\": [\n \"bearer\",\n \"oauth\",\n \"api-key\",\n \"actor-signature\"\n ],\n \"description\": \"Authentication type. 'actor-signature' uses the agent's ActorRecord keypair to sign requests.\"\n },\n \"secret_key\": {\n \"type\": \"string\",\n \"description\": \"Reference to secret in Secret Manager (for bearer/api-key/oauth auth types)\"\n },\n \"token\": {\n \"type\": \"string\",\n \"description\": \"Direct token value (not recommended for production, use secret_key instead)\"\n }\n }\n }\n }\n },\n {\n \"required\": [\n \"type\",\n \"url\"\n ],\n \"additionalProperties\": false,\n \"properties\": {\n \"type\": {\n \"const\": \"mcp\"\n },\n \"url\": {\n \"type\": \"string\",\n \"format\": \"uri\",\n \"description\": \"MCP server endpoint\"\n },\n \"auth\": {\n \"type\": \"object\",\n \"description\": \"Authentication configuration for MCP server\",\n \"additionalProperties\": true,\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"enum\": [\n \"bearer\",\n \"oauth\",\n \"api-key\",\n \"actor-signature\"\n ],\n \"description\": \"Authentication type. 'actor-signature' uses the agent's ActorRecord keypair to sign requests.\"\n },\n \"secret_key\": {\n \"type\": \"string\",\n \"description\": \"Reference to secret in Secret Manager (for bearer/api-key/oauth auth types)\"\n },\n \"token\": {\n \"type\": \"string\",\n \"description\": \"Direct token value (not recommended for production, use secret_key instead)\"\n }\n }\n }\n }\n },\n {\n \"required\": [\n \"type\"\n ],\n \"additionalProperties\": false,\n \"properties\": {\n \"type\": {\n \"const\": \"custom\"\n },\n \"protocol\": {\n \"type\": \"string\",\n \"description\": \"Custom protocol identifier (e.g., 'a2a', 'grpc')\"\n },\n \"config\": {\n \"type\": \"object\",\n \"description\": \"Protocol-specific configuration\"\n }\n }\n }\n ]\n }\n },\n \"examples\": [\n {\n \"id\": \"agent:scribe\",\n \"status\": \"active\",\n \"engine\": {\n \"type\": \"local\",\n \"runtime\": \"typescript\",\n \"entrypoint\": \"packages/agents/scribe/index.ts\",\n \"function\": \"runScribe\"\n },\n \"metadata\": {\n \"purpose\": \"documentation-generation\",\n \"maintainer\": \"team:platform\"\n },\n \"triggers\": [\n {\n \"type\": \"manual\"\n }\n ],\n \"knowledge_dependencies\": [\n \"packages/blueprints/**/*.md\"\n ]\n },\n {\n \"id\": \"agent:langchain-analyzer\",\n \"status\": \"active\",\n \"engine\": {\n \"type\": \"api\",\n \"url\": \"https://langchain-service-xyz.a.run.app/analyze\",\n \"method\": \"POST\",\n \"auth\": {\n \"type\": \"actor-signature\"\n }\n },\n \"metadata\": {\n \"framework\": \"langchain\",\n \"version\": \"0.2.0\",\n \"model\": \"gpt-4-turbo\",\n \"deployment\": {\n \"provider\": \"gcp\",\n \"service\": \"cloud-run\",\n \"region\": \"us-central1\"\n },\n \"cost_per_invocation\": 0.03,\n \"currency\": \"USD\"\n },\n \"triggers\": [\n {\n \"type\": \"webhook\",\n \"event\": \"task.ready\"\n }\n ],\n \"knowledge_dependencies\": [\n \"docs/architecture/**/*.md\"\n ]\n },\n {\n \"id\": \"agent:sentiment-analyzer\",\n \"status\": \"active\",\n \"engine\": {\n \"type\": \"api\",\n \"url\": \"http://sentiment-analyzer:8082/analyze\",\n \"method\": \"POST\",\n \"auth\": {\n \"type\": \"actor-signature\"\n }\n },\n \"metadata\": {\n \"framework\": \"google-adk\",\n \"version\": \"1.0.0\",\n \"model\": \"gemini-pro\",\n \"deployment\": {\n \"runtime\": \"docker\",\n \"image\": \"gitgov/sentiment-analyzer:v1.2.0\",\n \"port\": 8082\n },\n \"max_tokens\": 1024\n },\n \"triggers\": [\n {\n \"type\": \"webhook\",\n \"event\": \"feedback.created\"\n }\n ]\n },\n {\n \"id\": \"agent:cursor-reviewer\",\n \"status\": \"active\",\n \"engine\": {\n \"type\": \"mcp\",\n \"url\": \"http://localhost:8083/mcp\",\n \"auth\": {\n \"type\": \"actor-signature\"\n }\n },\n \"metadata\": {\n \"ide\": \"cursor\",\n \"tool\": \"code-review\",\n \"accepts_tools\": [\n \"review\",\n \"refactor\",\n \"test\"\n ]\n },\n \"knowledge_dependencies\": [\n \"packages/**/*.ts\",\n \"packages/**/*.tsx\"\n ],\n \"triggers\": [\n {\n \"type\": \"webhook\",\n \"event\": \"task.status.ready\"\n }\n ]\n },\n {\n \"id\": \"agent:deepl-translator\",\n \"status\": \"active\",\n \"engine\": {\n \"type\": \"api\",\n \"url\": \"https://api.deepl.com/v2/translate\",\n \"method\": \"POST\",\n \"auth\": {\n \"type\": \"bearer\",\n \"secret_key\": \"DEEPL_API_KEY\"\n }\n },\n \"metadata\": {\n \"provider\": \"deepl\",\n \"supported_languages\": [\n \"EN\",\n \"ES\",\n \"FR\",\n \"DE\",\n \"PT\"\n ],\n \"max_chars_per_request\": 5000\n },\n \"triggers\": [\n {\n \"type\": \"manual\"\n }\n ]\n },\n {\n \"id\": \"agent:coordinator\",\n \"status\": \"active\",\n \"engine\": {\n \"type\": \"custom\",\n \"protocol\": \"a2a\",\n \"config\": {\n \"endpoint\": \"https://agent-hub.gitgov.io/a2a\",\n \"version\": \"draft-2025-01\",\n \"capabilities\": [\n \"task-delegation\",\n \"status-sync\",\n \"feedback-loop\"\n ]\n }\n },\n \"metadata\": {\n \"purpose\": \"multi-agent-orchestration\",\n \"experimental\": true\n },\n \"triggers\": [\n {\n \"type\": \"scheduled\",\n \"cron\": \"0 */4 * * *\"\n }\n ]\n },\n {\n \"id\": \"agent:minimal-watcher\",\n \"engine\": {\n \"type\": \"local\"\n }\n },\n {\n \"id\": \"agent:local-mcp-server\",\n \"status\": \"active\",\n \"engine\": {\n \"type\": \"mcp\",\n \"url\": \"http://localhost:9000/mcp\"\n },\n \"knowledge_dependencies\": [\n \"packages/blueprints/**/*.md\"\n ],\n \"triggers\": [\n {\n \"type\": \"manual\"\n }\n ]\n },\n {\n \"id\": \"agent:code-reviewer\",\n \"status\": \"active\",\n \"engine\": {\n \"type\": \"local\",\n \"runtime\": \"typescript\",\n \"entrypoint\": \"packages/agents/code-reviewer/index.ts\",\n \"function\": \"reviewCode\"\n },\n \"prompt_engine_requirements\": {\n \"roles\": [\n \"code-reviewer\",\n \"security-auditor\"\n ],\n \"skills\": [\n \"typescript\",\n \"security-best-practices\",\n \"code-quality-analysis\"\n ]\n },\n \"knowledge_dependencies\": [\n \"packages/**/*.ts\",\n \"packages/**/*.tsx\"\n ],\n \"triggers\": [\n {\n \"type\": \"webhook\",\n \"event\": \"pull-request.opened\",\n \"filter\": \"branch:main\"\n }\n ]\n }\n ]\n}","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"changelog_record_schema.json\",\n \"title\": \"ChangelogRecord\",\n \"description\": \"Canonical schema for changelog records - aggregates N tasks into 1 release note\",\n \"additionalProperties\": false,\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"title\",\n \"description\",\n \"relatedTasks\",\n \"completedAt\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d{10}-changelog-[a-z0-9-]{1,50}$\",\n \"maxLength\": 71,\n \"description\": \"Unique identifier for the changelog entry\",\n \"examples\": [\n \"1752707800-changelog-sistema-autenticacion-v1\",\n \"1752707800-changelog-sprint-24-api-performance\"\n ]\n },\n \"title\": {\n \"type\": \"string\",\n \"minLength\": 10,\n \"maxLength\": 150,\n \"description\": \"Executive title of the deliverable\",\n \"examples\": [\n \"Sistema de Autenticación Completo v1.0\",\n \"Sprint 24 - Performance Optimizations\"\n ]\n },\n \"description\": {\n \"type\": \"string\",\n \"minLength\": 20,\n \"maxLength\": 5000,\n \"description\": \"Detailed description of the value delivered, including key decisions and impact\"\n },\n \"relatedTasks\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d{10}-task-[a-z0-9-]{1,50}$\"\n },\n \"minItems\": 1,\n \"description\": \"IDs of tasks that compose this deliverable (minimum 1 required)\"\n },\n \"completedAt\": {\n \"type\": \"number\",\n \"minimum\": 0,\n \"description\": \"Unix timestamp in seconds when the deliverable was completed\"\n },\n \"relatedCycles\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d{10}-cycle-[a-z0-9-]{1,50}$\"\n },\n \"default\": [],\n \"description\": \"Optional IDs of cycles related to this deliverable\"\n },\n \"relatedExecutions\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d{10}-exec-[a-z0-9-]{1,50}$\"\n },\n \"default\": [],\n \"description\": \"Optional IDs of key execution records related to this work\"\n },\n \"version\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 50,\n \"description\": \"Optional version or release identifier (e.g., 'v1.0.0', 'sprint-24')\",\n \"examples\": [\n \"v1.0.0\",\n \"v2.1.3\",\n \"sprint-24\"\n ]\n },\n \"tags\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"pattern\": \"^[a-z0-9-]+(:[a-z0-9-]+)*$\"\n },\n \"default\": [],\n \"description\": \"Optional tags for categorization (e.g., 'feature:auth', 'bugfix', 'security')\"\n },\n \"commits\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"maxLength\": 100\n },\n \"default\": [],\n \"description\": \"Optional list of git commit hashes related to this deliverable\"\n },\n \"files\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"maxLength\": 500\n },\n \"default\": [],\n \"description\": \"Optional list of main files that were created or modified\"\n },\n \"notes\": {\n \"type\": \"string\",\n \"maxLength\": 3000,\n \"description\": \"Optional additional context, decisions, or learnings\"\n }\n },\n \"examples\": [\n {\n \"id\": \"1752707800-changelog-sistema-autenticacion-v1\",\n \"title\": \"Sistema de Autenticación Completo v1.0\",\n \"description\": \"Implementación completa del sistema de autenticación con OAuth2, 2FA via TOTP, recuperación de contraseƱa, y UI responsive. Incluye tests E2E completos (95% coverage) y documentación tĆ©cnica actualizada.\",\n \"relatedTasks\": [\n \"1752274500-task-crear-ui-login\",\n \"1752274600-task-integrar-oauth2-backend\",\n \"1752274700-task-implementar-2fa-totp\",\n \"1752274800-task-tests-e2e-auth\",\n \"1752274900-task-documentar-flujo-auth\"\n ],\n \"completedAt\": 1752707800,\n \"relatedCycles\": [\n \"1752200000-cycle-q1-auth-milestone\"\n ],\n \"relatedExecutions\": [\n \"1752274550-exec-analisis-auth-providers\",\n \"1752707750-exec-final-integration-test\"\n ],\n \"version\": \"v1.0.0\",\n \"tags\": [\n \"feature:auth\",\n \"security\",\n \"frontend\",\n \"backend\"\n ],\n \"commits\": [\n \"abc123def\",\n \"456ghi789\",\n \"jkl012mno\"\n ],\n \"files\": [\n \"src/pages/Login.tsx\",\n \"src/services/auth.ts\",\n \"src/components/TwoFactorSetup.tsx\",\n \"e2e/auth.spec.ts\"\n ],\n \"notes\": \"Decisión tĆ©cnica: Usamos NextAuth.js despuĆ©s de evaluar Passport.js. El 2FA se implementó con TOTP (Google Authenticator compatible) en lugar de SMS por seguridad y costo.\"\n },\n {\n \"id\": \"1752707900-changelog-hotfix-payment-timeout\",\n \"title\": \"Hotfix: Critical Payment Timeout Fix\",\n \"description\": \"Fixed critical payment timeout issue affecting 15% of transactions. Increased timeout from 5s to 30s and added circuit breaker pattern for third-party API calls.\",\n \"relatedTasks\": [\n \"1752707850-task-fix-payment-timeout\",\n \"1752707870-task-add-circuit-breaker\"\n ],\n \"completedAt\": 1752707900,\n \"version\": \"v1.2.1\",\n \"tags\": [\n \"hotfix\",\n \"critical\",\n \"payment\"\n ],\n \"commits\": [\n \"xyz789abc\"\n ],\n \"notes\": \"Emergency response to production incident. Deployed to production within 2 hours.\"\n }\n ]\n}","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"cycle_record_schema.json\",\n \"title\": \"CycleRecord\",\n \"description\": \"Canonical schema for cycle records - strategic grouping of work\",\n \"additionalProperties\": false,\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"title\",\n \"status\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d{10}-cycle-[a-z0-9-]{1,50}$\",\n \"maxLength\": 67,\n \"description\": \"Unique identifier for the cycle (10 timestamp + 1 dash + 5 'cycle' + 1 dash + max 50 slug = 67 max)\",\n \"examples\": [\n \"1754400000-cycle-sprint-24-api-performance\",\n \"1754500000-cycle-auth-system-v2\",\n \"1754600000-cycle-q4-2025-growth\"\n ]\n },\n \"title\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 256,\n \"description\": \"Human-readable title for the cycle (e.g., 'Sprint 24', 'Auth v2.0', 'Q4 2025')\",\n \"examples\": [\n \"Sprint 24 - API Performance\",\n \"Authentication System v2.0\",\n \"Q4 2025 - Growth & Scale\"\n ]\n },\n \"status\": {\n \"type\": \"string\",\n \"enum\": [\n \"planning\",\n \"active\",\n \"completed\",\n \"archived\"\n ],\n \"description\": \"The lifecycle status of the cycle\"\n },\n \"taskIds\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d{10}-task-[a-z0-9-]{1,50}$\",\n \"maxLength\": 66\n },\n \"default\": [],\n \"description\": \"Optional array of Task IDs that belong to this cycle. Can be empty for cycles that only contain child cycles. (10 timestamp + 1 dash + 4 'task' + 1 dash + max 50 slug = 66 max)\",\n \"examples\": [\n [\n \"1752274500-task-optimizar-endpoint-search\",\n \"1752360900-task-anadir-cache-a-redis\"\n ]\n ]\n },\n \"childCycleIds\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d{10}-cycle-[a-z0-9-]{1,50}$\",\n \"maxLength\": 67\n },\n \"default\": [],\n \"description\": \"Optional array of Cycle IDs that are children of this cycle, allowing for hierarchies (e.g., Q1 containing Sprint 1, Sprint 2, Sprint 3). (10 timestamp + 1 dash + 5 'cycle' + 1 dash + max 50 slug = 67 max)\",\n \"examples\": [\n [\n \"1754400000-cycle-sprint-24\",\n \"1754500000-cycle-sprint-25\"\n ]\n ]\n },\n \"tags\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"pattern\": \"^[a-z0-9-]+(:[a-z0-9-]+)*$\",\n \"maxLength\": 100\n },\n \"default\": [],\n \"description\": \"Optional list of key:value tags for categorization (e.g., 'roadmap:q4', 'team:alpha', 'okr:growth').\",\n \"examples\": [\n [\n \"roadmap:q4\",\n \"team:backend\"\n ],\n [\n \"sprint:24\",\n \"focus:performance\"\n ],\n [\n \"milestone:v2\",\n \"security\"\n ]\n ]\n },\n \"notes\": {\n \"type\": \"string\",\n \"minLength\": 0,\n \"maxLength\": 10000,\n \"description\": \"Optional description of the cycle's goals, objectives, and context\"\n }\n },\n \"examples\": [\n {\n \"id\": \"1754400000-cycle-sprint-24-api-performance\",\n \"title\": \"Sprint 24 - API Performance\",\n \"status\": \"active\",\n \"taskIds\": [\n \"1752274500-task-optimizar-endpoint-search\",\n \"1752360900-task-anadir-cache-a-redis\",\n \"1752447300-task-implementar-rate-limiting\"\n ],\n \"tags\": [\n \"sprint:24\",\n \"team:backend\",\n \"focus:performance\"\n ],\n \"notes\": \"Objetivo: Reducir la latencia p95 de la API por debajo de 200ms y preparar infraestructura para Black Friday.\"\n },\n {\n \"id\": \"1754500000-cycle-auth-system-v2\",\n \"title\": \"Authentication System v2.0\",\n \"status\": \"planning\",\n \"taskIds\": [\n \"1752274500-task-oauth2-integration\",\n \"1752360900-task-2fa-implementation\",\n \"1752447300-task-password-recovery\",\n \"1752533700-task-session-management\"\n ],\n \"tags\": [\n \"milestone:v2\",\n \"security\",\n \"feature:auth\"\n ],\n \"notes\": \"Milestone mayor: Sistema completo de autenticación con OAuth2, 2FA, y gestión avanzada de sesiones. CrĆtico para lanzamiento Q4.\"\n },\n {\n \"id\": \"1754600000-cycle-q4-2025-growth\",\n \"title\": \"Q4 2025 - Growth & Scale\",\n \"status\": \"active\",\n \"childCycleIds\": [\n \"1754400000-cycle-sprint-24-api-performance\",\n \"1754500000-cycle-auth-system-v2\",\n \"1754650000-cycle-mobile-app-launch\"\n ],\n \"tags\": [\n \"roadmap:q4\",\n \"strategy:growth\",\n \"okr:scale-to-1m-users\"\n ],\n \"notes\": \"Objetivo trimestral: Escalar a 1M usuarios activos. Incluye mejoras de performance, nuevo sistema de auth, y lanzamiento de app móvil.\"\n }\n ]\n}","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"embedded_metadata_schema.json\",\n \"title\": \"EmbeddedMetadataRecord\",\n \"description\": \"Canonical schema for the wrapper structure of all GitGovernance records.\",\n \"type\": \"object\",\n \"properties\": {\n \"header\": {\n \"type\": \"object\",\n \"properties\": {\n \"version\": {\n \"type\": \"string\",\n \"enum\": [\n \"1.0\"\n ],\n \"description\": \"Version of the embedded metadata format.\"\n },\n \"type\": {\n \"type\": \"string\",\n \"enum\": [\n \"actor\",\n \"agent\",\n \"task\",\n \"execution\",\n \"changelog\",\n \"feedback\",\n \"cycle\",\n \"custom\"\n ],\n \"description\": \"The type of the record contained in the payload.\"\n },\n \"schemaUrl\": {\n \"type\": \"string\",\n \"description\": \"Optional URL to a custom schema for the payload.\"\n },\n \"schemaChecksum\": {\n \"type\": \"string\",\n \"pattern\": \"^[a-fA-F0-9]{64}$\",\n \"description\": \"Optional SHA-256 checksum of the custom schema.\"\n },\n \"payloadChecksum\": {\n \"type\": \"string\",\n \"pattern\": \"^[a-fA-F0-9]{64}$\",\n \"description\": \"SHA-256 checksum of the canonically serialized payload.\"\n },\n \"signatures\": {\n \"type\": \"array\",\n \"minItems\": 1,\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"keyId\": {\n \"type\": \"string\",\n \"pattern\": \"^(human|agent)(:[a-z0-9-]+)+$\",\n \"description\": \"The Actor ID of the signer (must match ActorRecord.id pattern).\"\n },\n \"role\": {\n \"type\": \"string\",\n \"pattern\": \"^([a-z-]+|custom:[a-z0-9-]+)$\",\n \"minLength\": 1,\n \"maxLength\": 50,\n \"description\": \"The context role of the signature (e.g., 'author', 'reviewer', 'auditor', or 'custom:*').\"\n },\n \"notes\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 1000,\n \"description\": \"Human-readable note from the signer. Part of the signature digest.\"\n },\n \"signature\": {\n \"type\": \"string\",\n \"pattern\": \"^[A-Za-z0-9+/]{86}==$\",\n \"description\": \"The Ed25519 signature (base64 encoded, 88 chars with padding) of the signature digest.\"\n },\n \"timestamp\": {\n \"type\": \"integer\",\n \"description\": \"Unix timestamp of the signature.\"\n }\n },\n \"required\": [\n \"keyId\",\n \"role\",\n \"notes\",\n \"signature\",\n \"timestamp\"\n ],\n \"additionalProperties\": false\n },\n \"description\": \"An array of one or more signature objects.\"\n }\n },\n \"required\": [\n \"version\",\n \"type\",\n \"payloadChecksum\",\n \"signatures\"\n ],\n \"additionalProperties\": false\n },\n \"payload\": {\n \"type\": \"object\",\n \"description\": \"The specific record data, validated against the schema defined by header.type.\"\n }\n },\n \"required\": [\n \"header\",\n \"payload\"\n ],\n \"additionalProperties\": false,\n \"oneOf\": [\n {\n \"if\": {\n \"properties\": {\n \"header\": {\n \"type\": \"object\",\n \"properties\": {\n \"type\": {\n \"const\": \"actor\"\n }\n }\n }\n }\n },\n \"then\": {\n \"properties\": {\n \"payload\": {\n \"$ref\": \"ref:actor_record_schema\"\n }\n }\n },\n \"else\": false\n },\n {\n \"if\": {\n \"properties\": {\n \"header\": {\n \"type\": \"object\",\n \"properties\": {\n \"type\": {\n \"const\": \"agent\"\n }\n }\n }\n }\n },\n \"then\": {\n \"properties\": {\n \"payload\": {\n \"$ref\": \"ref:agent_record_schema\"\n }\n }\n },\n \"else\": false\n },\n {\n \"if\": {\n \"properties\": {\n \"header\": {\n \"type\": \"object\",\n \"properties\": {\n \"type\": {\n \"const\": \"task\"\n }\n }\n }\n }\n },\n \"then\": {\n \"properties\": {\n \"payload\": {\n \"$ref\": \"ref:task_record_schema\"\n }\n }\n },\n \"else\": false\n },\n {\n \"if\": {\n \"properties\": {\n \"header\": {\n \"type\": \"object\",\n \"properties\": {\n \"type\": {\n \"const\": \"execution\"\n }\n }\n }\n }\n },\n \"then\": {\n \"properties\": {\n \"payload\": {\n \"$ref\": \"ref:execution_record_schema\"\n }\n }\n },\n \"else\": false\n },\n {\n \"if\": {\n \"properties\": {\n \"header\": {\n \"type\": \"object\",\n \"properties\": {\n \"type\": {\n \"const\": \"changelog\"\n }\n }\n }\n }\n },\n \"then\": {\n \"properties\": {\n \"payload\": {\n \"$ref\": \"ref:changelog_record_schema\"\n }\n }\n },\n \"else\": false\n },\n {\n \"if\": {\n \"properties\": {\n \"header\": {\n \"type\": \"object\",\n \"properties\": {\n \"type\": {\n \"const\": \"feedback\"\n }\n }\n }\n }\n },\n \"then\": {\n \"properties\": {\n \"payload\": {\n \"$ref\": \"ref:feedback_record_schema\"\n }\n }\n },\n \"else\": false\n },\n {\n \"if\": {\n \"properties\": {\n \"header\": {\n \"type\": \"object\",\n \"properties\": {\n \"type\": {\n \"const\": \"cycle\"\n }\n }\n }\n }\n },\n \"then\": {\n \"properties\": {\n \"payload\": {\n \"$ref\": \"ref:cycle_record_schema\"\n }\n }\n },\n \"else\": false\n },\n {\n \"if\": {\n \"properties\": {\n \"header\": {\n \"type\": \"object\",\n \"properties\": {\n \"type\": {\n \"const\": \"custom\"\n }\n }\n }\n }\n },\n \"then\": {\n \"properties\": {\n \"header\": {\n \"type\": \"object\",\n \"required\": [\n \"schemaUrl\",\n \"schemaChecksum\"\n ]\n }\n }\n },\n \"else\": false\n }\n ],\n \"examples\": [\n {\n \"header\": {\n \"version\": \"1.0\",\n \"type\": \"task\",\n \"payloadChecksum\": \"a1b2c3d4e5f6...\",\n \"signatures\": [\n {\n \"keyId\": \"human:lead-dev\",\n \"role\": \"author\",\n \"notes\": \"Initial task creation for OAuth 2.0 implementation\",\n \"signature\": \"...\",\n \"timestamp\": 1752274500\n }\n ]\n },\n \"payload\": {\n \"id\": \"1752274500-task-implementar-auth\",\n \"status\": \"pending\",\n \"priority\": \"high\",\n \"description\": \"Implementar autenticación OAuth 2.0.\",\n \"tags\": [\n \"skill:go\",\n \"area:backend\"\n ]\n }\n },\n {\n \"header\": {\n \"version\": \"1.0\",\n \"type\": \"execution\",\n \"payloadChecksum\": \"b2c3d4e5f6a1...\",\n \"signatures\": [\n {\n \"keyId\": \"agent:cursor\",\n \"role\": \"author\",\n \"notes\": \"OAuth 2.0 flow completed with GitHub provider integration\",\n \"signature\": \"...\",\n \"timestamp\": 1752274600\n },\n {\n \"keyId\": \"human:camilo\",\n \"role\": \"reviewer\",\n \"notes\": \"Reviewed and tested locally. LGTM.\",\n \"signature\": \"...\",\n \"timestamp\": 1752274650\n }\n ]\n },\n \"payload\": {\n \"id\": \"1752274600-exec-implement-oauth\",\n \"taskId\": \"1752274500-task-implement-oauth\",\n \"type\": \"progress\",\n \"title\": \"OAuth 2.0 flow implemented\",\n \"result\": \"Completed the OAuth 2.0 authentication flow...\"\n }\n },\n {\n \"header\": {\n \"version\": \"1.0\",\n \"type\": \"actor\",\n \"payloadChecksum\": \"c3d4e5f6a1b2...\",\n \"signatures\": [\n {\n \"keyId\": \"human:admin\",\n \"role\": \"author\",\n \"notes\": \"New developer onboarded to team\",\n \"signature\": \"...\",\n \"timestamp\": 1752274700\n },\n {\n \"keyId\": \"agent:aion\",\n \"role\": \"auditor\",\n \"notes\": \"Actor verification: 10/10. Credentials validated.\",\n \"signature\": \"...\",\n \"timestamp\": 1752274705\n }\n ]\n },\n \"payload\": {\n \"id\": \"human:new-developer\",\n \"type\": \"human\",\n \"displayName\": \"New Developer\",\n \"publicKey\": \"...\",\n \"roles\": [\n \"developer\"\n ]\n }\n }\n ]\n}","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"execution_record_schema.json\",\n \"title\": \"ExecutionRecord\",\n \"description\": \"Canonical schema for execution log records - the universal event stream\",\n \"additionalProperties\": false,\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"taskId\",\n \"type\",\n \"title\",\n \"result\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d{10}-exec-[a-z0-9-]{1,50}$\",\n \"maxLength\": 66,\n \"description\": \"Unique identifier for the execution log entry (10 timestamp + 1 dash + 4 'exec' + 1 dash + max 50 slug = 66 max)\",\n \"examples\": [\n \"1752275000-exec-refactor-queries\",\n \"1752361200-exec-api-externa-caida\"\n ]\n },\n \"taskId\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d{10}-task-[a-z0-9-]{1,50}$\",\n \"maxLength\": 66,\n \"description\": \"ID of the parent task this execution belongs to (10 timestamp + 1 dash + 4 'task' + 1 dash + max 50 slug = 66 max)\"\n },\n \"type\": {\n \"type\": \"string\",\n \"enum\": [\n \"analysis\",\n \"progress\",\n \"blocker\",\n \"completion\",\n \"info\",\n \"correction\"\n ],\n \"description\": \"Semantic classification of the execution event\",\n \"examples\": [\n \"progress\",\n \"analysis\",\n \"blocker\",\n \"completion\"\n ]\n },\n \"title\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 256,\n \"description\": \"Human-readable title for the execution (used to generate ID)\",\n \"examples\": [\n \"Refactor de queries N+1\",\n \"API Externa CaĆda\",\n \"Plan de implementación OAuth2\"\n ]\n },\n \"result\": {\n \"type\": \"string\",\n \"minLength\": 10,\n \"maxLength\": 22000,\n \"description\": \"The tangible, verifiable output or result of the execution. \\nThis is the \\\"WHAT\\\" - evidence of work or event summary.\\n\"\n },\n \"notes\": {\n \"type\": \"string\",\n \"maxLength\": 6500,\n \"description\": \"Optional narrative, context and decisions behind the execution.\\nThis is the \\\"HOW\\\" and \\\"WHY\\\" - the story behind the result.\\n\"\n },\n \"references\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"maxLength\": 500\n },\n \"default\": [],\n \"description\": \"Optional list of typed references to relevant commits, files, PRs, or external documents.\\nShould use typed prefixes for clarity and trazabilidad (see execution_protocol_appendix.md):\\n- commit: Git commit SHA\\n- pr: Pull Request number\\n- file: File path (relative to repo root)\\n- url: External URL\\n- issue: GitHub Issue number\\n- task: TaskRecord ID\\n- exec: ExecutionRecord ID (for corrections or dependencies)\\n- changelog: ChangelogRecord ID\\n\"\n }\n },\n \"examples\": [\n {\n \"id\": \"1752275500-exec-refactor-queries\",\n \"taskId\": \"1752274500-task-optimizar-api\",\n \"type\": \"progress\",\n \"title\": \"Refactor de queries N+1\",\n \"result\": \"Refactorizados 3 queries N+1 a un solo JOIN optimizado. Performance mejoró de 2.5s a 200ms.\",\n \"notes\": \"Identificados 3 N+1 queries en el endpoint /api/search. Aplicado eager loading y caching de relaciones.\",\n \"references\": [\n \"commit:b2c3d4e\",\n \"file:src/api/search.ts\"\n ]\n },\n {\n \"id\": \"1752361200-exec-api-externa-caida\",\n \"taskId\": \"1752274500-task-optimizar-api\",\n \"type\": \"blocker\",\n \"title\": \"API Externa CaĆda\",\n \"result\": \"No se puede continuar con testing de integración. API de pagos devuelve 503.\",\n \"notes\": \"La API de pagos de terceros (api.payments.com) estĆ” devolviendo errores 503. Contactado soporte del proveedor. ETA de resolución: 2-3 horas.\",\n \"references\": [\n \"url:https://status.payments.com\"\n ]\n },\n {\n \"id\": \"1752188000-exec-plan-oauth-implementation\",\n \"taskId\": \"1752274500-task-oauth-implementation\",\n \"type\": \"analysis\",\n \"title\": \"Plan de implementación OAuth2\",\n \"result\": \"Documento de diseƱo tĆ©cnico completado. 5 sub-tareas identificadas con estimaciones de complejidad.\",\n \"notes\": \"Evaluadas 3 opciones: NextAuth.js (elegida), Passport.js, custom implementation. NextAuth.js por madurez y soporte de mĆŗltiples providers.\",\n \"references\": [\n \"file:docs/oauth-design.md\"\n ]\n },\n {\n \"id\": \"1752707800-exec-oauth-completed\",\n \"taskId\": \"1752274500-task-oauth-implementation\",\n \"type\": \"completion\",\n \"title\": \"OAuth Implementation Completed\",\n \"result\": \"Sistema OAuth2 completamente implementado, testeado y deployado a staging. 95% test coverage. Todos los acceptance criteria cumplidos.\",\n \"notes\": \"Implementación finalizada. Code review aprobado. Tests E2E passing. Ready para changelog y deploy a producción.\",\n \"references\": [\n \"pr:456\",\n \"commit:def789abc\",\n \"url:https://staging.app.com/login\"\n ]\n },\n {\n \"id\": \"1752275600-exec-cambio-estrategia-redis\",\n \"taskId\": \"1752274500-task-oauth-implementation\",\n \"type\": \"info\",\n \"title\": \"Cambio de estrategia: Usar Redis para sessions\",\n \"result\": \"Decisión: Migrar de JWT stateless a sessions en Redis por requisito de revocación inmediata.\",\n \"notes\": \"Durante code review se identificó requisito crĆtico: revocar sesiones inmediatamente (ej: compromiso de cuenta). JWT stateless no permite esto sin lista negra compleja. Redis sessions permite revocación instantĆ”nea.\",\n \"references\": [\n \"issue:567\",\n \"url:https://redis.io/docs/manual/keyspace-notifications/\"\n ]\n },\n {\n \"id\": \"1752275700-exec-correccion-metricas\",\n \"taskId\": \"1752274500-task-optimizar-api\",\n \"type\": \"correction\",\n \"title\": \"Corrección: MĆ©tricas de performance\",\n \"result\": \"Corrección de execution 1752275500-exec-refactor-queries: El performance fue 200ms, no 50ms como se reportó.\",\n \"notes\": \"Error de tipeo en execution original. La mejora real fue de 2.5s a 200ms (no 50ms). Sigue siendo significativa (92% mejora) pero nĆŗmeros correctos son importantes para mĆ©tricas.\",\n \"references\": [\n \"exec:1752275500-exec-refactor-queries\"\n ]\n }\n ]\n}","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"feedback_record_schema.json\",\n \"title\": \"FeedbackRecord\",\n \"description\": \"Canonical schema for feedback records - structured conversation about work\",\n \"additionalProperties\": false,\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"entityType\",\n \"entityId\",\n \"type\",\n \"status\",\n \"content\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d{10}-feedback-[a-z0-9-]{1,50}$\",\n \"maxLength\": 70,\n \"description\": \"Unique identifier for the feedback entry\",\n \"examples\": [\n \"1752788100-feedback-blocking-rest-api\",\n \"1752788200-feedback-question-test-coverage\"\n ]\n },\n \"entityType\": {\n \"type\": \"string\",\n \"enum\": [\n \"task\",\n \"execution\",\n \"changelog\",\n \"feedback\",\n \"cycle\"\n ],\n \"description\": \"The type of entity this feedback refers to\"\n },\n \"entityId\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 256,\n \"description\": \"The ID of the entity this feedback refers to.\\nMust match the pattern for its entityType:\\n- task: ^\\\\d{10}-task-[a-z0-9-]{1,50}$\\n- execution: ^\\\\d{10}-exec-[a-z0-9-]{1,50}$\\n- changelog: ^\\\\d{10}-changelog-[a-z0-9-]{1,50}$\\n- feedback: ^\\\\d{10}-feedback-[a-z0-9-]{1,50}$\\n- cycle: ^\\\\d{10}-cycle-[a-z0-9-]{1,50}$\\n\",\n \"examples\": [\n \"1752274500-task-implementar-oauth\",\n \"1752642000-exec-subtarea-9-4\",\n \"1752788100-feedback-blocking-rest-api\"\n ]\n },\n \"type\": {\n \"type\": \"string\",\n \"enum\": [\n \"blocking\",\n \"suggestion\",\n \"question\",\n \"approval\",\n \"clarification\",\n \"assignment\"\n ],\n \"description\": \"The semantic intent of the feedback\",\n \"examples\": [\n \"blocking\",\n \"question\",\n \"approval\"\n ]\n },\n \"status\": {\n \"type\": \"string\",\n \"enum\": [\n \"open\",\n \"acknowledged\",\n \"resolved\",\n \"wontfix\"\n ],\n \"description\": \"The lifecycle status of the feedback. \\nNote: FeedbackRecords are immutable. To change status, create a new feedback \\nthat references this one using entityType: \\\"feedback\\\" and resolvesFeedbackId.\\n\"\n },\n \"content\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 5000,\n \"description\": \"The content of the feedback. Reduced from 10000 to 5000 chars for practical use.\"\n },\n \"assignee\": {\n \"type\": \"string\",\n \"pattern\": \"^(human|agent)(:[a-z0-9-]+)+$\",\n \"maxLength\": 256,\n \"description\": \"Optional. The Actor ID responsible for addressing the feedback (e.g., 'human:maria', 'agent:camilo:cursor')\",\n \"examples\": [\n \"human:maria\",\n \"agent:code-reviewer\",\n \"agent:camilo:cursor\"\n ]\n },\n \"resolvesFeedbackId\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d{10}-feedback-[a-z0-9-]{1,50}$\",\n \"maxLength\": 70,\n \"description\": \"Optional. The ID of another feedback record that this one resolves or responds to\",\n \"examples\": [\n \"1752788100-feedback-blocking-rest-api\"\n ]\n }\n },\n \"examples\": [\n {\n \"id\": \"1752788100-feedback-blocking-rest-api\",\n \"entityType\": \"execution\",\n \"entityId\": \"1752642000-exec-subtarea-9-4\",\n \"type\": \"blocking\",\n \"status\": \"open\",\n \"content\": \"Esta implementación no cumple el estĆ”ndar de rutas REST. Los endpoints deben seguir el patrón /api/v1/{resource}/{id}. Actualmente usa /get-user?id=X que no es RESTful.\"\n },\n {\n \"id\": \"1752788200-feedback-rest-api-fixed\",\n \"entityType\": \"feedback\",\n \"entityId\": \"1752788100-feedback-blocking-rest-api\",\n \"type\": \"clarification\",\n \"status\": \"resolved\",\n \"content\": \"Implementada la corrección. Ahora todos los endpoints siguen el estĆ”ndar REST: GET /api/v1/users/:id, POST /api/v1/users, etc. Tests actualizados y passing.\",\n \"resolvesFeedbackId\": \"1752788100-feedback-blocking-rest-api\"\n },\n {\n \"id\": \"1752788300-feedback-assign-auth-task\",\n \"entityType\": \"task\",\n \"entityId\": \"1752274500-task-implementar-oauth\",\n \"type\": \"assignment\",\n \"status\": \"open\",\n \"content\": \"Asignando esta tarea a MarĆa por su experiencia con OAuth2. Prioridad alta para el sprint actual.\",\n \"assignee\": \"human:maria\"\n },\n {\n \"id\": \"1752788400-feedback-question-test-coverage\",\n \"entityType\": \"task\",\n \"entityId\": \"1752274500-task-implementar-oauth\",\n \"type\": \"question\",\n \"status\": \"open\",\n \"content\": \"ĀæCuĆ”l es el nivel de test coverage esperado para esta feature? El spec no lo menciona explĆcitamente. ĀæDebemos apuntar a 80% como el resto del proyecto?\"\n }\n ]\n}","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"task_record_schema.json\",\n \"title\": \"TaskRecord\",\n \"description\": \"Canonical schema for task records as defined in task_protocol.md\",\n \"additionalProperties\": false,\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"title\",\n \"status\",\n \"priority\",\n \"description\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d{10}-task-[a-z0-9-]{1,50}$\",\n \"maxLength\": 66,\n \"description\": \"Unique identifier for the task (10 timestamp + 1 dash + 4 'task' + 1 dash + max 50 slug = 66 max)\",\n \"examples\": [\n \"1752274500-task-implementar-auth\",\n \"1752347700-task-fix-logging\"\n ]\n },\n \"title\": {\n \"type\": \"string\",\n \"minLength\": 3,\n \"maxLength\": 150,\n \"description\": \"A brief, human-readable title for the task. Used to generate the ID slug.\"\n },\n \"cycleIds\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"pattern\": \"^\\\\d{10}-cycle-[a-z0-9-]{1,50}$\",\n \"maxLength\": 67\n },\n \"default\": [],\n \"description\": \"Optional. The IDs of the strategic cycles this task belongs to. (10 timestamp + 1 dash + 5 'cycle' + 1 dash + max 50 slug = 67 max)\"\n },\n \"status\": {\n \"type\": \"string\",\n \"enum\": [\n \"draft\",\n \"review\",\n \"ready\",\n \"active\",\n \"done\",\n \"archived\",\n \"paused\",\n \"discarded\"\n ],\n \"maxLength\": 40,\n \"description\": \"Current state of the task in the institutional flow\"\n },\n \"priority\": {\n \"type\": \"string\",\n \"enum\": [\n \"low\",\n \"medium\",\n \"high\",\n \"critical\"\n ],\n \"maxLength\": 40,\n \"description\": \"Strategic or tactical priority level\"\n },\n \"description\": {\n \"type\": \"string\",\n \"minLength\": 10,\n \"maxLength\": 22000,\n \"description\": \"Functional, technical or strategic summary of the objective\"\n },\n \"tags\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"pattern\": \"^[a-z0-9-]+(:[a-z0-9-:]+)*$\"\n },\n \"default\": [],\n \"description\": \"Optional. List of key:value tags for categorization and role suggestion (e.g., 'skill:react', 'role:agent:developer').\"\n },\n \"references\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 500\n },\n \"default\": [],\n \"description\": \"Valid links or files, when mentioned\"\n },\n \"notes\": {\n \"type\": \"string\",\n \"minLength\": 0,\n \"maxLength\": 3000,\n \"description\": \"Additional comments, decisions made or added context\"\n }\n },\n \"examples\": [\n {\n \"id\": \"1752274500-task-implement-oauth-flow\",\n \"title\": \"Implement OAuth 2.0 authentication flow\",\n \"status\": \"draft\",\n \"priority\": \"high\",\n \"description\": \"Implement complete OAuth 2.0 flow with GitHub provider. Include token refresh, session management, and secure storage. Must support both web and CLI flows.\",\n \"cycleIds\": [\n \"1752270000-cycle-auth-mvp\"\n ],\n \"tags\": [\n \"skill:security\",\n \"category:feature\",\n \"package:core\"\n ],\n \"references\": [\n \"url:https://docs.github.com/en/apps/oauth-apps/building-oauth-apps\"\n ],\n \"notes\": \"Consider using proven library like passport.js or implement from scratch for learning.\"\n },\n {\n \"id\": \"1752347700-task-fix-memory-leak-indexer\",\n \"title\": \"Fix memory leak in indexer process\",\n \"status\": \"active\",\n \"priority\": \"critical\",\n \"description\": \"Indexer process consuming >2GB RAM after 24h uptime. Profiling shows EventEmitter listeners not being cleaned up properly. Fix leak and add monitoring.\",\n \"cycleIds\": [],\n \"tags\": [\n \"category:bug\",\n \"skill:performance\",\n \"package:core\"\n ],\n \"references\": [\n \"file:packages/core/src/adapters/indexer_adapter/index.ts\",\n \"commit:a1b2c3d4\",\n \"issue:789\"\n ],\n \"notes\": \"Discovered during production monitoring. Affects long-running processes only.\"\n },\n {\n \"id\": \"1752448900-task-add-typescript-linting\",\n \"title\": \"Add TypeScript strict mode and ESLint rules\",\n \"status\": \"done\",\n \"priority\": \"medium\",\n \"description\": \"Enable TypeScript strict mode across all packages. Configure ESLint with recommended rules. Fix all existing violations. Add pre-commit hook.\",\n \"cycleIds\": [\n \"1752440000-cycle-code-quality-q1\"\n ],\n \"tags\": [\n \"category:tooling\",\n \"skill:typescript\",\n \"epic:code-quality\"\n ],\n \"references\": [\n \"pr:123\",\n \"file:.eslintrc.js\",\n \"file:tsconfig.json\"\n ],\n \"notes\": \"Approved by tech lead. All 47 violations fixed in PR #123.\"\n },\n {\n \"id\": \"1752550000-task-research-graphql-migration\",\n \"title\": \"Research GraphQL migration feasibility\",\n \"status\": \"draft\",\n \"priority\": \"low\",\n \"description\": \"Evaluate feasibility of migrating REST API to GraphQL. Document pros/cons, effort estimation, and recommended approach. Focus on developer experience and performance.\",\n \"cycleIds\": [],\n \"tags\": [\n \"category:research\",\n \"skill:graphql\",\n \"skill:backend\"\n ],\n \"references\": []\n }\n ]\n}","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"workflow_methodology_schema.json\",\n \"title\": \"WorkflowMethodologyRecord\",\n \"description\": \"Complete schema for workflow methodology configuration files that define state transitions, signatures, and view configurations\",\n \"type\": \"object\",\n \"required\": [\n \"version\",\n \"name\",\n \"state_transitions\"\n ],\n \"additionalProperties\": false,\n \"properties\": {\n \"$schema\": {\n \"type\": \"string\",\n \"description\": \"JSON Schema reference\"\n },\n \"version\": {\n \"type\": \"string\",\n \"pattern\": \"^\\\\d+\\\\.\\\\d+\\\\.\\\\d+$\",\n \"description\": \"Semantic version of the methodology configuration\"\n },\n \"name\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 100,\n \"description\": \"Human-readable name of the methodology\"\n },\n \"description\": {\n \"type\": \"string\",\n \"maxLength\": 500,\n \"description\": \"Brief description of the methodology's purpose and scope\"\n },\n \"state_transitions\": {\n \"type\": \"object\",\n \"description\": \"Defines valid state transitions and their requirements\",\n \"additionalProperties\": {\n \"type\": \"object\",\n \"required\": [\n \"from\",\n \"requires\"\n ],\n \"additionalProperties\": false,\n \"properties\": {\n \"from\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"enum\": [\n \"draft\",\n \"review\",\n \"ready\",\n \"active\",\n \"done\",\n \"archived\",\n \"paused\",\n \"discarded\"\n ]\n },\n \"minItems\": 1,\n \"description\": \"Valid source states for this transition\"\n },\n \"requires\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"command\": {\n \"type\": \"string\",\n \"description\": \"CLI command that triggers this transition\"\n },\n \"event\": {\n \"type\": \"string\",\n \"description\": \"System event that triggers this transition\"\n },\n \"signatures\": {\n \"type\": \"object\",\n \"description\": \"Signature requirements keyed by role (e.g., 'approver:quality', 'developer:backend')\",\n \"additionalProperties\": {\n \"type\": \"object\",\n \"required\": [\n \"role\",\n \"capability_roles\",\n \"min_approvals\"\n ],\n \"additionalProperties\": false,\n \"properties\": {\n \"role\": {\n \"type\": \"string\",\n \"description\": \"Required signature role\"\n },\n \"capability_roles\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n },\n \"minItems\": 1,\n \"description\": \"Required capability roles in actor record\"\n },\n \"min_approvals\": {\n \"type\": \"integer\",\n \"minimum\": 1,\n \"description\": \"Minimum number of required approvals\"\n },\n \"actor_type\": {\n \"type\": \"string\",\n \"enum\": [\n \"human\",\n \"agent\"\n ],\n \"description\": \"Optional: restrict to specific actor type\"\n },\n \"specific_actors\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n },\n \"description\": \"Optional: specific actors that can sign\"\n }\n }\n }\n },\n \"custom_rules\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n },\n \"description\": \"List of custom rule identifiers to validate\"\n }\n }\n }\n }\n }\n },\n \"custom_rules\": {\n \"type\": \"object\",\n \"description\": \"Definitions for custom validation rules\",\n \"additionalProperties\": {\n \"type\": \"object\",\n \"required\": [\n \"description\",\n \"validation\"\n ],\n \"additionalProperties\": false,\n \"properties\": {\n \"description\": {\n \"type\": \"string\",\n \"maxLength\": 200,\n \"description\": \"Human-readable description of the rule\"\n },\n \"validation\": {\n \"type\": \"string\",\n \"enum\": [\n \"assignment_required\",\n \"sprint_capacity\",\n \"epic_complexity\",\n \"custom\",\n \"javascript\"\n ],\n \"description\": \"Validation type identifier\"\n },\n \"parameters\": {\n \"type\": \"object\",\n \"description\": \"Optional parameters for the validation rule\"\n },\n \"javascript_function\": {\n \"type\": \"string\",\n \"description\": \"JavaScript function code for 'javascript' validation type. Must return Promise<boolean>\"\n },\n \"module_path\": {\n \"type\": \"string\",\n \"description\": \"Path to external module for custom validation (alternative to javascript_function)\"\n }\n }\n }\n },\n \"view_configs\": {\n \"type\": \"object\",\n \"description\": \"Visual representation configurations for different view types\",\n \"additionalProperties\": {\n \"type\": \"object\",\n \"required\": [\n \"columns\"\n ],\n \"additionalProperties\": false,\n \"properties\": {\n \"columns\": {\n \"type\": \"object\",\n \"description\": \"Column definitions mapping visual names to task states\",\n \"additionalProperties\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"enum\": [\n \"draft\",\n \"review\",\n \"ready\",\n \"active\",\n \"done\",\n \"archived\",\n \"paused\",\n \"discarded\"\n ]\n },\n \"minItems\": 1\n }\n },\n \"theme\": {\n \"type\": \"string\",\n \"enum\": [\n \"default\",\n \"dark\",\n \"minimal\",\n \"corporate\"\n ],\n \"description\": \"Visual theme for this view configuration\"\n },\n \"layout\": {\n \"type\": \"string\",\n \"enum\": [\n \"horizontal\",\n \"vertical\",\n \"grid\"\n ],\n \"description\": \"Layout direction for the view\"\n }\n }\n }\n },\n \"agent_integration\": {\n \"type\": \"object\",\n \"description\": \"Optional agent automation configuration for methodology\",\n \"additionalProperties\": false,\n \"properties\": {\n \"description\": {\n \"type\": \"string\",\n \"maxLength\": 200,\n \"description\": \"Brief description of the agent integration\"\n },\n \"required_agents\": {\n \"type\": \"array\",\n \"description\": \"List of agents required for this methodology\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"engine\"\n ],\n \"anyOf\": [\n {\n \"required\": [\n \"id\"\n ]\n },\n {\n \"required\": [\n \"required_roles\"\n ]\n }\n ],\n \"additionalProperties\": false,\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"pattern\": \"^agent:[a-z0-9:-]+$\",\n \"description\": \"Optional: Specific agent ID. If provided, uses this exact agent.\"\n },\n \"required_roles\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"pattern\": \"^[a-z0-9-]+(:[a-z0-9-]+)*$\"\n },\n \"minItems\": 1,\n \"description\": \"Optional: Required capability roles. Matches any agent with these roles (from ActorRecord).\"\n },\n \"engine\": {\n \"type\": \"object\",\n \"oneOf\": [\n {\n \"required\": [\n \"type\"\n ],\n \"properties\": {\n \"type\": {\n \"const\": \"local\"\n },\n \"runtime\": {\n \"type\": \"string\"\n },\n \"entrypoint\": {\n \"type\": \"string\"\n },\n \"function\": {\n \"type\": \"string\"\n }\n }\n },\n {\n \"required\": [\n \"type\"\n ],\n \"properties\": {\n \"type\": {\n \"const\": \"api\"\n },\n \"url\": {\n \"type\": \"string\"\n },\n \"method\": {\n \"type\": \"string\",\n \"enum\": [\n \"POST\",\n \"GET\"\n ]\n },\n \"auth\": {\n \"type\": \"object\"\n }\n }\n },\n {\n \"required\": [\n \"type\"\n ],\n \"properties\": {\n \"type\": {\n \"const\": \"mcp\"\n },\n \"url\": {\n \"type\": \"string\"\n },\n \"auth\": {\n \"type\": \"object\"\n }\n }\n }\n ]\n },\n \"triggers\": {\n \"type\": \"array\",\n \"description\": \"Event triggers for this agent\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"event\",\n \"action\"\n ],\n \"additionalProperties\": false,\n \"properties\": {\n \"event\": {\n \"type\": \"string\",\n \"description\": \"Event that triggers the agent\"\n },\n \"action\": {\n \"type\": \"string\",\n \"description\": \"Action the agent should perform\"\n }\n }\n }\n },\n \"knowledge_dependencies\": {\n \"type\": \"array\",\n \"description\": \"Knowledge files this agent depends on\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n }\n }\n },\n \"automation_rules\": {\n \"type\": \"array\",\n \"description\": \"Automation rules linking triggers to agents\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"trigger\",\n \"agent\",\n \"action\"\n ],\n \"additionalProperties\": false,\n \"properties\": {\n \"trigger\": {\n \"type\": \"string\",\n \"description\": \"Event or condition that triggers automation\"\n },\n \"agent\": {\n \"type\": \"string\",\n \"pattern\": \"^agent:[a-z0-9:-]+$\",\n \"description\": \"Agent ID that handles this automation\"\n },\n \"action\": {\n \"type\": \"string\",\n \"description\": \"Specific action the agent should perform\"\n }\n }\n }\n }\n }\n }\n },\n \"examples\": [\n {\n \"version\": \"1.0.0\",\n \"name\": \"Simple Kanban\",\n \"description\": \"Basic workflow for small teams\",\n \"state_transitions\": {\n \"review\": {\n \"from\": [\n \"draft\"\n ],\n \"requires\": {\n \"command\": \"gitgov task submit\"\n }\n },\n \"ready\": {\n \"from\": [\n \"review\"\n ],\n \"requires\": {\n \"command\": \"gitgov task approve\",\n \"signatures\": {\n \"__default__\": {\n \"role\": \"approver\",\n \"capability_roles\": [\n \"approver:product\"\n ],\n \"min_approvals\": 1\n }\n }\n }\n },\n \"active\": {\n \"from\": [\n \"ready\"\n ],\n \"requires\": {\n \"event\": \"first_execution_record_created\"\n }\n },\n \"done\": {\n \"from\": [\n \"active\"\n ],\n \"requires\": {\n \"command\": \"gitgov task complete\"\n }\n }\n },\n \"view_configs\": {\n \"kanban-3col\": {\n \"columns\": {\n \"To Do\": [\n \"draft\",\n \"review\"\n ],\n \"In Progress\": [\n \"ready\",\n \"active\"\n ],\n \"Done\": [\n \"done\"\n ]\n },\n \"theme\": \"minimal\",\n \"layout\": \"horizontal\"\n }\n }\n },\n {\n \"version\": \"1.0.0\",\n \"name\": \"GitGovernance Default Methodology\",\n \"description\": \"Standard GitGovernance workflow with quality gates and agent collaboration\",\n \"state_transitions\": {\n \"review\": {\n \"from\": [\n \"draft\"\n ],\n \"requires\": {\n \"command\": \"gitgov task submit\",\n \"signatures\": {\n \"__default__\": {\n \"role\": \"submitter\",\n \"capability_roles\": [\n \"author\"\n ],\n \"min_approvals\": 1\n }\n }\n }\n },\n \"ready\": {\n \"from\": [\n \"review\"\n ],\n \"requires\": {\n \"command\": \"gitgov task approve\",\n \"signatures\": {\n \"__default__\": {\n \"role\": \"approver\",\n \"capability_roles\": [\n \"approver:product\"\n ],\n \"min_approvals\": 1\n },\n \"design\": {\n \"role\": \"approver\",\n \"capability_roles\": [\n \"approver:design\"\n ],\n \"min_approvals\": 1\n },\n \"quality\": {\n \"role\": \"approver\",\n \"capability_roles\": [\n \"approver:quality\"\n ],\n \"min_approvals\": 1\n }\n }\n }\n },\n \"active\": {\n \"from\": [\n \"ready\",\n \"paused\"\n ],\n \"requires\": {\n \"event\": \"first_execution_record_created\",\n \"custom_rules\": [\n \"task_must_have_valid_assignment_for_executor\"\n ]\n }\n },\n \"done\": {\n \"from\": [\n \"active\"\n ],\n \"requires\": {\n \"command\": \"gitgov task complete\",\n \"signatures\": {\n \"__default__\": {\n \"role\": \"approver\",\n \"capability_roles\": [\n \"approver:quality\"\n ],\n \"min_approvals\": 1\n }\n }\n }\n },\n \"archived\": {\n \"from\": [\n \"done\"\n ],\n \"requires\": {\n \"event\": \"changelog_record_created\"\n }\n },\n \"paused\": {\n \"from\": [\n \"active\",\n \"review\"\n ],\n \"requires\": {\n \"event\": \"feedback_blocking_created\"\n }\n },\n \"discarded\": {\n \"from\": [\n \"ready\",\n \"active\"\n ],\n \"requires\": {\n \"command\": \"gitgov task cancel\",\n \"signatures\": {\n \"__default__\": {\n \"role\": \"canceller\",\n \"capability_roles\": [\n \"approver:product\",\n \"approver:quality\"\n ],\n \"min_approvals\": 1\n }\n }\n }\n }\n },\n \"custom_rules\": {\n \"task_must_have_valid_assignment_for_executor\": {\n \"description\": \"Task must have a valid assignment before execution can begin\",\n \"validation\": \"assignment_required\"\n }\n },\n \"view_configs\": {\n \"kanban-4col\": {\n \"columns\": {\n \"Draft\": [\n \"draft\"\n ],\n \"In Progress\": [\n \"review\",\n \"ready\",\n \"active\"\n ],\n \"Review\": [\n \"done\"\n ],\n \"Done\": [\n \"archived\"\n ],\n \"Cancelled\": [\n \"discarded\"\n ]\n },\n \"theme\": \"minimal\",\n \"layout\": \"horizontal\"\n },\n \"kanban-7col\": {\n \"columns\": {\n \"Draft\": [\n \"draft\"\n ],\n \"Review\": [\n \"review\"\n ],\n \"Ready\": [\n \"ready\"\n ],\n \"Active\": [\n \"active\"\n ],\n \"Done\": [\n \"done\"\n ],\n \"Archived\": [\n \"archived\"\n ],\n \"Blocked\": [\n \"paused\"\n ],\n \"Cancelled\": [\n \"discarded\"\n ]\n },\n \"theme\": \"corporate\",\n \"layout\": \"vertical\"\n }\n }\n }\n ]\n}","/**\n * GitGovernance Protocol Schemas\n * \n * Auto-generated from blueprints. Do not edit manually.\n * Run 'pnpm sync:schemas' to update.\n */\n\nimport actorRecordSchema from \"./actor_record_schema.json\";\nimport agentRecordSchema from \"./agent_record_schema.json\";\nimport changelogRecordSchema from \"./changelog_record_schema.json\";\nimport cycleRecordSchema from \"./cycle_record_schema.json\";\nimport embeddedMetadataSchema from \"./embedded_metadata_schema.json\";\nimport executionRecordSchema from \"./execution_record_schema.json\";\nimport feedbackRecordSchema from \"./feedback_record_schema.json\";\nimport taskRecordSchema from \"./task_record_schema.json\";\nimport workflowMethodologyRecordSchema from \"./workflow_methodology_record_schema.json\";\n\n/**\n * All GitGovernance protocol schemas\n */\nexport const Schemas = {\n ActorRecord: actorRecordSchema,\n AgentRecord: agentRecordSchema,\n ChangelogRecord: changelogRecordSchema,\n CycleRecord: cycleRecordSchema,\n EmbeddedMetadata: embeddedMetadataSchema,\n ExecutionRecord: executionRecordSchema,\n FeedbackRecord: feedbackRecordSchema,\n TaskRecord: taskRecordSchema,\n WorkflowMethodologyRecord: workflowMethodologyRecordSchema,\n} as const;\n\n/**\n * Schema names for type safety\n */\nexport type SchemaName = \n | \"ActorRecord\"\n | \"AgentRecord\"\n | \"ChangelogRecord\"\n | \"CycleRecord\"\n | \"EmbeddedMetadata\"\n | \"ExecutionRecord\"\n | \"FeedbackRecord\"\n | \"TaskRecord\"\n | \"WorkflowMethodologyRecord\";\n\n/**\n * Get a schema by name\n */\nexport function getSchema(name: SchemaName) {\n return Schemas[name];\n}\n\n/**\n * Get all schema names\n */\nexport function getSchemaNames(): SchemaName[] {\n return Object.keys(Schemas) as SchemaName[];\n}\n\n/**\n * Check if a schema exists\n */\nexport function hasSchema(name: string): name is SchemaName {\n return name in Schemas;\n}\n","import Ajv from \"ajv\";\nimport type { ValidateFunction } from \"ajv\";\nimport addFormats from \"ajv-formats\";\nimport * as fs from \"fs\";\nimport * as yaml from \"js-yaml\";\n\n// Direct import from generated schemas\nimport { Schemas } from \"./generated\";\n\n/**\n * Singleton cache for schema validators to avoid repeated I/O and AJV compilation.\n * Improves performance by caching compiled validators for schema files.\n */\nexport class SchemaValidationCache {\n private static validators = new Map<string, ValidateFunction>();\n private static schemaValidators = new Map<string, ValidateFunction>();\n private static ajv: Ajv | null = null;\n\n /**\n * Gets or creates a cached validator for the specified schema path.\n * @param schemaPath Absolute path to the YAML schema file\n * @returns Compiled AJV validator function\n */\n static getValidator(schemaPath: string): ValidateFunction {\n if (!this.validators.has(schemaPath)) {\n // Initialize AJV instance if not already done\n if (!this.ajv) {\n this.ajv = new Ajv({ allErrors: true });\n addFormats(this.ajv);\n }\n\n // Load and compile schema\n const schemaContent = fs.readFileSync(schemaPath, \"utf8\");\n const schema = yaml.load(schemaContent);\n const validator = this.ajv.compile(schema as object);\n\n this.validators.set(schemaPath, validator);\n }\n\n return this.validators.get(schemaPath)!;\n }\n\n /**\n * Gets or creates a cached validator for a schema object.\n * @param schema The schema object (already parsed YAML/JSON)\n * @returns Compiled AJV validator function\n */\n static getValidatorFromSchema<T = unknown>(schema: object): ValidateFunction<T> {\n // Create a stable key from the schema object\n const schemaKey = JSON.stringify(schema);\n\n if (!this.schemaValidators.has(schemaKey)) {\n // Initialize AJV instance if not already done\n if (!this.ajv) {\n this.ajv = new Ajv({ allErrors: true });\n addFormats(this.ajv);\n\n // Pre-load all schemas for reference resolution\n this.preloadSchemas();\n }\n\n // Remove $id temporarily to avoid conflicts with preloaded schemas\n // (This doesn't modify the original schema object)\n const { $id, ...schemaWithoutId } = schema as any;\n\n // Compile schema directly - AJV will resolve $ref using preloaded aliases\n const validator = this.ajv.compile(schemaWithoutId);\n this.schemaValidators.set(schemaKey, validator);\n }\n\n return this.schemaValidators.get(schemaKey)! as ValidateFunction<T>;\n }\n\n /**\n * Pre-loads referenced schema files for $ref resolution.\n * Uses direct imports and dynamic iteration.\n */\n private static preloadSchemas(): void {\n if (!this.ajv) return;\n\n try {\n // Map schema names to their expected ref aliases\n const schemaRefMap: Record<string, string> = {\n 'ActorRecord': 'ref:actor_record_schema',\n 'AgentRecord': 'ref:agent_record_schema',\n 'ChangelogRecord': 'ref:changelog_record_schema',\n 'CycleRecord': 'ref:cycle_record_schema',\n 'ExecutionRecord': 'ref:execution_record_schema',\n 'FeedbackRecord': 'ref:feedback_record_schema',\n 'TaskRecord': 'ref:task_record_schema',\n 'WorkflowMethodologyRecord': 'ref:workflow_methodology_record_schema'\n };\n\n // Register schemas with correct aliases\n Object.entries(Schemas).forEach(([name, schema]) => {\n if (name !== 'EmbeddedMetadata' && schemaRefMap[name]) {\n const refName = schemaRefMap[name];\n this.ajv!.addSchema(schema, refName);\n }\n });\n } catch {\n // If preloading fails, continue without it\n }\n }\n\n /**\n * Clears the cache (useful for testing or schema updates).\n */\n static clearCache(): void {\n this.validators.clear();\n this.schemaValidators.clear();\n this.ajv = null;\n }\n\n /**\n * Gets cache statistics for monitoring.\n */\n static getCacheStats(): { cachedSchemas: number; schemasLoaded: string[] } {\n return {\n cachedSchemas: this.validators.size + this.schemaValidators.size,\n schemasLoaded: Array.from(this.validators.keys())\n };\n }\n}\n","export * from \"./generated\";\nexport * from \"./schema_cache\";\nexport * from \"./errors\";","import type { ActorRecord } from \"../types\";\nimport type { AgentRecord } from \"../types\";\nimport type { CycleRecord } from \"../types\";\nimport type { TaskRecord } from \"../types\";\nimport type { ExecutionRecord } from \"../types\";\nimport type { ChangelogRecord } from \"../types\";\nimport type { FeedbackRecord } from \"../types\";\nimport type { EmbeddedMetadataRecord } from \"./embedded.types\";\n\n/**\n * A custom record type for testing purposes.\n */\nexport type CustomRecord = {\n type: 'custom';\n data: unknown;\n}\n\n/**\n * Defines the possible 'type' values for any record in the system.\n */\nexport type GitGovRecordType =\n | \"actor\"\n | \"agent\"\n | \"cycle\"\n | \"task\"\n | \"execution\"\n | \"changelog\"\n | \"feedback\"\n | \"custom\";\n\n/**\n * The canonical payload for any GitGovernance record.\n */\nexport type GitGovRecordPayload =\n | ActorRecord\n | AgentRecord\n | CycleRecord\n | TaskRecord\n | ExecutionRecord\n | ChangelogRecord\n | FeedbackRecord\n | CustomRecord;\n\n/**\n * The canonical type for any record in GitGovernance, wrapping a payload with metadata.\n */\nexport type GitGovRecord = EmbeddedMetadataRecord<GitGovRecordPayload>;\n\n/**\n * Specific GitGov record types with full metadata (header + payload).\n * These types provide clean, type-safe access to records with their signatures and checksums.\n * \n * @example\n * const taskRecord: GitGovTaskRecord = await taskStore.read(taskId);\n * const authorId = taskRecord.header.signatures[0].keyId;\n */\nexport type GitGovTaskRecord = EmbeddedMetadataRecord<TaskRecord>;\nexport type GitGovCycleRecord = EmbeddedMetadataRecord<CycleRecord>;\nexport type GitGovFeedbackRecord = EmbeddedMetadataRecord<FeedbackRecord>;\nexport type GitGovExecutionRecord = EmbeddedMetadataRecord<ExecutionRecord>;\nexport type GitGovChangelogRecord = EmbeddedMetadataRecord<ChangelogRecord>;\nexport type GitGovActorRecord = EmbeddedMetadataRecord<ActorRecord>;\nexport type GitGovAgentRecord = EmbeddedMetadataRecord<AgentRecord>;\n\n// Payloads for creating new records\nexport type ActorPayload = Partial<ActorRecord>;\nexport type AgentPayload = Partial<AgentRecord>;\nexport type CyclePayload = Partial<CycleRecord>;\nexport type TaskPayload = Partial<TaskRecord>;\nexport type ExecutionPayload = Partial<ExecutionRecord>;\nexport type ChangelogPayload = Partial<ChangelogRecord>;\nexport type FeedbackPayload = Partial<FeedbackRecord>;\n\n/**\n * Base class for all GitGovernance-specific errors.\n * Centralized here as it's used across multiple modules (schemas, validation, etc.)\n */\nexport class GitGovError extends Error {\n constructor(message: string, public readonly code: string) {\n super(message);\n this.name = this.constructor.name;\n }\n}\n\n","/**\n * Schema-specific error types for GitGovernance core.\n * These errors are thrown during JSON Schema validation and compilation.\n */\n\n// Import GitGovError from models (common types) - no circular dependencies\nimport { GitGovError } from '../types/common.types';\n\n// Re-export for backward compatibility\nexport { GitGovError };\n\n/**\n * Custom Error type for failures related to JSON Schema validation.\n */\nexport class SchemaValidationError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"SchemaValidationError\";\n }\n}\n\n/**\n * Error for detailed AJV validation failures with multiple field errors.\n */\nexport class DetailedValidationError extends GitGovError {\n constructor(\n recordType: string,\n public readonly errors: Array<{\n field: string;\n message: string;\n value: unknown;\n }>\n ) {\n const errorSummary = errors\n .map(err => `${err.field}: ${err.message}`)\n .join(', ');\n\n super(\n `${recordType} validation failed: ${errorSummary}`,\n 'DETAILED_VALIDATION_ERROR'\n );\n }\n}\n","/**\n * Validation and common error types for GitGovernance core.\n * These errors are thrown during record validation, checksum verification, and general operations.\n */\n\n// Import GitGovError from models (common types)\nexport { GitGovError } from '../types/common.types';\n\n/**\n * Custom Error type for failures when a payload's checksum does not match\n * the one specified in the header.\n */\nexport class ChecksumMismatchError extends Error {\n constructor(message: string = \"Payload checksum does not match the header.\") {\n super(message);\n this.name = \"ChecksumMismatchError\";\n }\n}\n\n/**\n * Custom Error type for failures during cryptographic signature verification.\n */\nexport class SignatureVerificationError extends Error {\n constructor(message: string = \"Signature verification failed.\") {\n super(message);\n this.name = \"SignatureVerificationError\";\n }\n}\n\n/**\n * Error for when required fields are missing during record creation.\n */\nexport class RequiredFieldError extends Error {\n constructor(recordType: string, missingFields: string[]) {\n super(`${recordType} requires ${missingFields.join(', ')}`);\n this.name = \"RequiredFieldError\";\n }\n}\n\n/**\n * Error for when a record is not found during operations.\n */\nexport class RecordNotFoundError extends Error {\n constructor(recordType: string, recordId: string) {\n super(`${recordType} with id ${recordId} not found`);\n this.name = \"RecordNotFoundError\";\n }\n}\n\n/**\n * Error for when project root cannot be determined.\n */\nexport class ProjectRootError extends Error {\n constructor() {\n super('Could not find project root. Are you in a git repository?');\n this.name = \"ProjectRootError\";\n }\n}\n\n/**\n * Error for when record creation validation fails.\n */\nexport class RecordCreationError extends Error {\n constructor(recordType: string, details: string) {\n super(`Invalid ${recordType} created: ${details}`);\n this.name = \"RecordCreationError\";\n }\n}\n\n/**\n * Error for when operations are not implemented or require external components.\n */\nexport class NotImplementedError extends Error {\n constructor(operation: string, reason: string) {\n super(`${operation} not implemented yet - ${reason}`);\n this.name = \"NotImplementedError\";\n }\n}\n\n/**\n * Error for protocol violations in workflow operations.\n */\nexport class ProtocolViolationError extends Error {\n constructor(message: string, violationType?: string) {\n super(`Protocol violation: ${message}`);\n this.name = \"ProtocolViolationError\";\n if (violationType) {\n this.message += ` (Type: ${violationType})`;\n }\n }\n}\n\n/**\n * Standard validation result interface for all validators.\n * Ensures consistency across all validateXDetailed functions.\n */\nexport interface ValidationResult {\n isValid: boolean;\n errors: Array<{\n field: string;\n message: string;\n value: unknown;\n }>;\n}\n","import { createHash } from \"crypto\";\nimport type { GitGovRecordPayload } from \"../types\";\n\n/**\n * Recursively sorts the keys of an object, including nested objects.\n * This is the core of canonical serialization.\n * @param obj The object to sort.\n * @returns A new object with all keys sorted alphabetically.\n */\nfunction sortKeys(obj: any): any {\n if (typeof obj !== 'object' || obj === null) {\n return obj;\n }\n if (Array.isArray(obj)) {\n return obj.map(sortKeys);\n }\n const sortedKeys = Object.keys(obj).sort();\n const newObj: Record<string, any> = {};\n for (const key of sortedKeys) {\n newObj[key] = sortKeys(obj[key]);\n }\n return newObj;\n}\n\n/**\n * Canonically serializes a payload object.\n * @param payload The object to serialize.\n * @returns A deterministic JSON string.\n */\nfunction canonicalize(payload: object): string {\n const sortedPayload = sortKeys(payload);\n return JSON.stringify(sortedPayload);\n}\n\n/**\n * Calculates the SHA-256 checksum of a record's payload.\n */\nexport function calculatePayloadChecksum(payload: GitGovRecordPayload): string {\n const jsonString = canonicalize(payload);\n return createHash(\"sha256\").update(jsonString, \"utf8\").digest(\"hex\");\n} ","export * from \"./logger\";","export type LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\" | \"silent\";\n\nexport interface Logger {\n debug(message: string, ...args: any[]): void;\n info(message: string, ...args: any[]): void;\n warn(message: string, ...args: any[]): void;\n error(message: string, ...args: any[]): void;\n}\n\nclass ConsoleLogger implements Logger {\n private level: LogLevel;\n private prefix: string;\n\n constructor(prefix: string = \"\", level: LogLevel = \"info\") {\n this.prefix = prefix;\n this.level = level;\n }\n\n private shouldLog(level: LogLevel): boolean {\n const levels: LogLevel[] = [\"debug\", \"info\", \"warn\", \"error\", \"silent\"];\n const currentLevelIndex = levels.indexOf(this.level);\n const messageLevelIndex = levels.indexOf(level);\n\n return currentLevelIndex <= messageLevelIndex && this.level !== \"silent\";\n }\n\n debug(message: string, ...args: any[]): void {\n if (this.shouldLog(\"debug\")) {\n console.log(`${this.prefix}${message}`, ...args);\n }\n }\n\n info(message: string, ...args: any[]): void {\n if (this.shouldLog(\"info\")) {\n console.log(`${this.prefix}${message}`, ...args);\n }\n }\n\n warn(message: string, ...args: any[]): void {\n if (this.shouldLog(\"warn\")) {\n console.warn(`${this.prefix}${message}`, ...args);\n }\n }\n\n error(message: string, ...args: any[]): void {\n if (this.shouldLog(\"error\")) {\n console.error(`${this.prefix}${message}`, ...args);\n }\n }\n\n setLevel(level: LogLevel): void {\n this.level = level;\n }\n}\n\n// Factory function para crear loggers\nexport function createLogger(prefix: string = \"\", level?: LogLevel): Logger {\n const logLevel = level ||\n (process.env['NODE_ENV'] === \"test\" ? \"silent\" : \"info\") ||\n (process.env['LOG_LEVEL'] as LogLevel) ||\n \"info\";\n\n return new ConsoleLogger(prefix, logLevel);\n}\n\n// Logger global para uso directo\nexport const logger = createLogger(\"[App] \"); ","import { generateKeyPair, sign, verify, createHash } from \"crypto\";\nimport { promisify } from \"util\";\nimport { calculatePayloadChecksum } from \"./checksum\";\nimport type { GitGovRecordPayload, Signature } from \"../types\";\nimport { createLogger } from \"../logger\";\nconst logger = createLogger(\"[CryptoModule] \");\nconst generateKeyPairAsync = promisify(generateKeyPair);\n\n/**\n * Generates a new Ed25519 key pair.\n * @returns A promise that resolves to an object with publicKey and privateKey in base64 format.\n * \n * The publicKey is the raw Ed25519 key (32 bytes -> 44 chars in base64).\n * The privateKey is stored in PKCS8 PEM format for compatibility.\n * \n * Note: Node.js crypto does not support 'raw' format directly for Ed25519,\n * so we extract the raw 32-byte key from the SPKI DER encoding (RFC 8410).\n * SPKI DER structure: [algorithm identifier (12 bytes)] + [raw public key (32 bytes)]\n */\nexport async function generateKeys(): Promise<{ publicKey: string; privateKey: string; }> {\n const { publicKey, privateKey } = await generateKeyPairAsync('ed25519', {\n publicKeyEncoding: { type: 'spki', format: 'der' },\n privateKeyEncoding: { type: 'pkcs8', format: 'pem' },\n });\n\n // Extract raw Ed25519 public key (last 32 bytes of SPKI DER format)\n const rawPublicKey = publicKey.subarray(-32);\n\n return {\n publicKey: rawPublicKey.toString('base64'), // 32 bytes -> 44 chars\n privateKey: Buffer.from(privateKey).toString('base64'),\n };\n}\n\n/**\n * Creates a signature for a given payload.\n */\nexport function signPayload(\n payload: GitGovRecordPayload,\n privateKey: string,\n keyId: string,\n role: string,\n notes: string,\n): Signature {\n const payloadChecksum = calculatePayloadChecksum(payload);\n const timestamp = Math.floor(Date.now() / 1000);\n const digest = `${payloadChecksum}:${keyId}:${role}:${notes}:${timestamp}`;\n\n // Per the blueprint, sign the SHA-256 hash of the digest\n const digestHash = createHash('sha256').update(digest).digest();\n\n const signature = sign(null, digestHash, {\n key: Buffer.from(privateKey, 'base64'),\n type: 'pkcs8',\n format: 'pem'\n });\n\n return {\n keyId,\n role,\n notes,\n signature: signature.toString('base64'),\n timestamp,\n };\n}\n\n/**\n * Verifies all signatures on a record.\n * \n * Reconstructs SPKI DER format from raw Ed25519 key for verification.\n */\nexport async function verifySignatures(\n record: { header: { payloadChecksum: string, signatures: Signature[] }, payload: GitGovRecordPayload },\n getActorPublicKey: (keyId: string) => Promise<string | null>\n): Promise<boolean> {\n for (const signature of record.header.signatures) {\n const publicKeyBase64 = await getActorPublicKey(signature.keyId);\n if (!publicKeyBase64) {\n logger.warn(`Public key not found for actor: ${signature.keyId}`);\n return false;\n }\n\n const digest = `${record.header.payloadChecksum}:${signature.keyId}:${signature.role}:${signature.notes}:${signature.timestamp}`;\n const digestHash = createHash('sha256').update(digest).digest();\n\n // Reconstruct SPKI DER from raw Ed25519 public key (RFC 8410)\n // SPKI DER structure: [algorithm identifier (12 bytes)] + [raw key (32 bytes)]\n const algorithmIdentifier = Buffer.from([\n 0x30, 0x2a, 0x30, 0x05, 0x06, 0x03, 0x2b, 0x65,\n 0x70, 0x03, 0x21, 0x00\n ]);\n const rawPublicKey = Buffer.from(publicKeyBase64, 'base64');\n const spkiPublicKey = Buffer.concat([algorithmIdentifier, rawPublicKey]);\n\n const isValid = verify(\n null,\n digestHash,\n {\n key: spkiPublicKey,\n type: 'spki',\n format: 'der'\n },\n Buffer.from(signature.signature, 'base64')\n );\n\n if (!isValid) {\n return false;\n }\n }\n return true;\n}\n","import type { ValidateFunction, ErrorObject } from \"ajv\";\nimport type { EmbeddedMetadataRecord } from '../types/embedded.types';\nimport type { GitGovRecordPayload } from '../types/common.types';\nimport type { ValidationResult } from './errors';\nimport { SchemaValidationCache } from '../schemas/schema_cache';\nimport { calculatePayloadChecksum } from '../crypto/checksum';\nimport { verifySignatures } from '../crypto/signatures';\nimport { DetailedValidationError, ChecksumMismatchError, SignatureVerificationError } from './common';\nimport { Schemas } from '../schemas';\n\n/**\n * Schema-based validation for EmbeddedMetadata wrapper\n */\nexport function validateEmbeddedMetadataSchema(\n data: unknown\n): [boolean, ValidateFunction[\"errors\"]] {\n const validator = SchemaValidationCache.getValidatorFromSchema(Schemas.EmbeddedMetadata);\n const isValid = validator(data);\n\n return [isValid, validator.errors];\n}\n\n/**\n * Type guard to check if data is a valid EmbeddedMetadataRecord\n */\nexport function isEmbeddedMetadataRecord<T extends GitGovRecordPayload>(data: unknown): data is EmbeddedMetadataRecord<T> {\n const [isValid] = validateEmbeddedMetadataSchema(data);\n return isValid;\n}\n\n/**\n * Detailed validation for EmbeddedMetadataRecord with formatted errors\n */\nexport function validateEmbeddedMetadataDetailed(data: unknown): ValidationResult {\n const [isValid, ajvErrors] = validateEmbeddedMetadataSchema(data);\n\n const formattedErrors = ajvErrors?.map((error: ErrorObject) => ({\n field: error.instancePath || error.schemaPath,\n message: error.message || 'Validation failed',\n value: error.data\n })) || [];\n\n return {\n isValid,\n errors: formattedErrors\n };\n}\n\n/**\n * Full validation for EmbeddedMetadataRecord including schema, checksum, and signatures\n */\nexport async function validateFullEmbeddedMetadataRecord<T extends GitGovRecordPayload>(\n record: EmbeddedMetadataRecord<T>,\n getActorPublicKey: (keyId: string) => Promise<string | null>\n): Promise<void> {\n // 1. Schema Validation - validate the entire record structure\n const [isValidSchema, errors] = validateEmbeddedMetadataSchema(record);\n if (!isValidSchema) {\n const formattedErrors = errors?.map(error => ({\n field: error.instancePath || error.schemaPath,\n message: error.message || 'Validation failed',\n value: error.data\n })) || [];\n\n throw new DetailedValidationError('EmbeddedMetadata', formattedErrors);\n }\n\n // 2. Checksum Validation\n const expectedChecksum = calculatePayloadChecksum(record.payload);\n if (expectedChecksum !== record.header.payloadChecksum) {\n throw new ChecksumMismatchError();\n }\n\n // 3. Signature Verification\n const areSignaturesValid = await verifySignatures(\n record,\n getActorPublicKey\n );\n if (!areSignaturesValid) {\n throw new SignatureVerificationError();\n }\n}\n\n/**\n * Business rules validation for EmbeddedMetadata\n * Validates conditional requirements based on header.type\n */\nexport function validateEmbeddedMetadataBusinessRules<T extends GitGovRecordPayload>(data: EmbeddedMetadataRecord<T>): ValidationResult {\n const errors: Array<{ field: string; message: string; value: unknown }> = [];\n\n // Rule 1: If header.type is \"custom\", schemaUrl and schemaChecksum are required\n if (data.header.type === 'custom') {\n if (!data.header.schemaUrl) {\n errors.push({\n field: 'header.schemaUrl',\n message: 'schemaUrl is required when header.type is \"custom\"',\n value: data.header.schemaUrl\n });\n }\n\n if (!data.header.schemaChecksum) {\n errors.push({\n field: 'header.schemaChecksum',\n message: 'schemaChecksum is required when header.type is \"custom\"',\n value: data.header.schemaChecksum\n });\n }\n }\n\n // Rule 2: Validate payloadChecksum format (SHA-256)\n const sha256Pattern = /^[a-fA-F0-9]{64}$/;\n if (!sha256Pattern.test(data.header.payloadChecksum)) {\n errors.push({\n field: 'header.payloadChecksum',\n message: 'payloadChecksum must be a valid SHA-256 hash (64 hex characters)',\n value: data.header.payloadChecksum\n });\n }\n\n // Rule 3: Validate schemaChecksum format if present\n if (data.header.schemaChecksum && !sha256Pattern.test(data.header.schemaChecksum)) {\n errors.push({\n field: 'header.schemaChecksum',\n message: 'schemaChecksum must be a valid SHA-256 hash (64 hex characters)',\n value: data.header.schemaChecksum\n });\n }\n\n // Rule 4: Validate signatures array is not empty\n if (!data.header.signatures || data.header.signatures.length === 0) {\n errors.push({\n field: 'header.signatures',\n message: 'At least one signature is required',\n value: data.header.signatures\n });\n }\n\n return {\n isValid: errors.length === 0,\n errors\n };\n}\n","import type { ValidateFunction, ErrorObject } from \"ajv\";\nimport type { TaskRecord } from \"../types\";\nimport type { GitGovRecord } from \"../types\";\nimport { SchemaValidationCache } from \"../schemas/schema_cache\";\nimport { Schemas } from '../schemas';\nimport {\n DetailedValidationError\n} from \"./common\";\nimport type { ValidationResult } from './errors';\nimport { validateFullEmbeddedMetadataRecord } from './embedded_metadata_validator';\n\n// --- Schema Validation ---\nexport function validateTaskRecordSchema(\n data: unknown\n): [boolean, ValidateFunction[\"errors\"]] {\n const validateSchema = SchemaValidationCache.getValidatorFromSchema(Schemas.TaskRecord);\n const isValid = validateSchema(data) as boolean;\n return [isValid, validateSchema.errors];\n}\n\n/**\n * Type guard to check if data is a valid TaskRecord.\n */\nexport function isTaskRecord(data: unknown): data is TaskRecord {\n const validateSchema = SchemaValidationCache.getValidatorFromSchema(Schemas.TaskRecord);\n return validateSchema(data) as boolean;\n}\n\n/**\n * Validates a TaskRecord and returns detailed validation result.\n * Use this in factories and adapters for comprehensive error reporting.\n */\nexport function validateTaskRecordDetailed(data: unknown): ValidationResult {\n const [isValid, ajvErrors] = validateTaskRecordSchema(data);\n\n const formattedErrors = ajvErrors ? ajvErrors.map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n })) : [];\n\n return {\n isValid,\n errors: formattedErrors\n };\n}\n\n// --- Full Validation Orchestrator ---\n/**\n * Performs a complete validation of a TaskRecord, including schema,\n * checksum, and signature checks.\n * @param record The full GitGovRecord containing the task payload.\n * @param getActorPublicKey A function to retrieve the public key for a given actor ID.\n */\nexport async function validateFullTaskRecord(\n record: GitGovRecord & { payload: TaskRecord },\n getActorPublicKey: (keyId: string) => Promise<string | null>\n): Promise<void> {\n // 1. Schema Validation\n const [isValidSchema, errors] = validateTaskRecordSchema(record.payload);\n if (!isValidSchema) {\n const formattedErrors = (errors || []).map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n }));\n throw new DetailedValidationError('TaskRecord', formattedErrors);\n }\n\n // 2. Embedded Metadata Validation (header + wrapper)\n await validateFullEmbeddedMetadataRecord(record, getActorPublicKey);\n}\n","/**\n * Sanitizes a string to be used in a GitGovernance ID slug.\n * Converts to lower-case, replaces spaces with hyphens, and removes invalid characters.\n */\nfunction sanitizeForId(name: string): string {\n return name\n .toLowerCase()\n .replace(/\\s+/g, \"-\")\n .replace(/[^a-z0-9-]/g, \"\")\n .slice(0, 50); // Ensure slug is not too long\n}\n\n/**\n * Generates an Actor ID (e.g., 'human:camilo-velandia').\n */\nexport function generateActorId(type: 'human' | 'agent', displayName: string): string {\n const slug = sanitizeForId(displayName);\n return `${type}:${slug}`;\n}\n\n/**\n * Generates a Task ID (e.g., '12345-task-implement-auth').\n */\nexport function generateTaskId(title: string, timestamp: number): string {\n const slug = sanitizeForId(title);\n return `${timestamp}-task-${slug}`;\n}\n\n/**\n * Generates a Cycle ID (e.g., '12345-cycle-release-v1').\n */\nexport function generateCycleId(title: string, timestamp: number): string {\n const slug = sanitizeForId(title);\n return `${timestamp}-cycle-${slug}`;\n}\n\n/**\n * Generates an Execution ID (e.g., '12345-exec-commit-changes').\n */\nexport function generateExecutionId(title: string, timestamp: number): string {\n const slug = sanitizeForId(title);\n return `${timestamp}-exec-${slug}`;\n}\n\n/**\n * Generates a Changelog ID from title (Protocol v2.0.0).\n * \n * Pattern: {timestamp}-changelog-{slug}\n * Example: '1752707800-changelog-sistema-autenticacion-v1'\n * \n * This follows the official changelog_record_schema.yaml pattern for\n * Release Notes System that aggregates N tasks into 1 deliverable.\n */\nexport function generateChangelogId(title: string, timestamp: number): string {\n const slug = sanitizeForId(title);\n return `${timestamp}-changelog-${slug}`;\n}\n\n/**\n * Generates a Feedback ID (e.g., '12345-feedback-code-review').\n */\nexport function generateFeedbackId(title: string, timestamp: number): string {\n const slug = sanitizeForId(title);\n return `${timestamp}-feedback-${slug}`;\n}\n\n/**\n * Parses a timestamp-based record ID (e.g., '12345-task-slug') into its components.\n */\nexport function parseTimestampedId(id: string): { timestamp: number; prefix: string; slug: string } | null {\n if (typeof id !== 'string') return null;\n const match = id.match(/^(\\d+)-(\\w+)-(.+)$/);\n if (!match || !match[1] || !match[2] || !match[3]) {\n return null;\n }\n return {\n timestamp: parseInt(match[1], 10),\n prefix: match[2],\n slug: match[3],\n };\n}\n\n/**\n * Parses an Actor ID (e.g., 'human:camilo') into its components.\n */\nexport function parseActorId(id: string): { type: 'human' | 'agent'; slug: string } | null {\n if (typeof id !== 'string') return null;\n const parts = id.split(':');\n if (parts.length < 2 || (parts[0] !== 'human' && parts[0] !== 'agent')) {\n return null;\n }\n const type = parts[0] as 'human' | 'agent';\n const slug = parts.slice(1).join(':'); // Re-join in case slug contains ':'\n return { type, slug };\n}\n\n/**\n * Valid prefixes for timestamp-based record IDs.\n */\nconst VALID_PREFIXES = ['task', 'cycle', 'exec', 'changelog', 'feedback'] as const;\n\n/**\n * Validates the format of a timestamp-based record ID.\n */\nexport function isValidTimestampedId(id: string): boolean {\n const parsed = parseTimestampedId(id);\n if (!parsed) return false;\n\n // Check if prefix is valid and slug is not empty\n return VALID_PREFIXES.includes(parsed.prefix as any) && parsed.slug.length > 0;\n}\n","import type { TaskRecord } from \"../types\";\nimport { validateTaskRecordDetailed } from \"../validation/task_validator\";\nimport { DetailedValidationError } from \"../validation/common\";\nimport { generateTaskId } from \"../utils/id_generator\";\n\n/**\n * Creates a new, fully-formed TaskRecord with validation.\n */\nexport async function createTaskRecord(\n payload: Partial<TaskRecord>\n): Promise<TaskRecord> {\n // Generate timestamp for ID if not provided\n const timestamp = Math.floor(Date.now() / 1000);\n\n // Build task with defaults for optional fields\n const task: TaskRecord = {\n id: payload.id || generateTaskId(payload.title || '', timestamp),\n title: payload.title || '',\n status: payload.status || 'draft',\n priority: payload.priority || 'medium',\n description: payload.description || '',\n tags: payload.tags || [],\n cycleIds: payload.cycleIds,\n references: payload.references,\n notes: payload.notes,\n ...payload,\n } as TaskRecord;\n\n // Use validator to check complete schema with detailed errors\n const validation = validateTaskRecordDetailed(task);\n if (!validation.isValid) {\n throw new DetailedValidationError('TaskRecord', validation.errors);\n }\n\n return task;\n}\n\n","import type { ValidateFunction, ErrorObject } from \"ajv\";\nimport type { CycleRecord } from \"../types\";\nimport type { GitGovRecord } from \"../types\";\nimport { SchemaValidationCache } from \"../schemas/schema_cache\";\nimport { DetailedValidationError } from \"./common\";\nimport type { ValidationResult } from './errors';\nimport { validateFullEmbeddedMetadataRecord } from './embedded_metadata_validator';\nimport { Schemas } from \"../schemas\";\n\n// --- Schema Validation ---\nconst cycleSchema = Schemas.CycleRecord;\n\nexport function validateCycleRecordSchema(\n data: unknown\n): [boolean, ValidateFunction[\"errors\"]] {\n const validateSchema = SchemaValidationCache.getValidatorFromSchema(cycleSchema);\n const isValid = validateSchema(data) as boolean;\n return [isValid, validateSchema.errors];\n}\n\n/**\n * Type guard to check if data is a valid CycleRecord.\n */\nexport function isCycleRecord(data: unknown): data is CycleRecord {\n const validateSchema = SchemaValidationCache.getValidatorFromSchema(cycleSchema);\n return validateSchema(data) as boolean;\n}\n\n/**\n * Validates a CycleRecord and returns detailed validation result.\n * Use this in factories and adapters for comprehensive error reporting.\n */\nexport function validateCycleRecordDetailed(data: unknown): ValidationResult {\n const [isValid, ajvErrors] = validateCycleRecordSchema(data);\n\n const formattedErrors = ajvErrors ? ajvErrors.map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n })) : [];\n\n return {\n isValid,\n errors: formattedErrors\n };\n}\n\n// --- Full Validation Orchestrator ---\n/**\n * Performs a complete validation of a CycleRecord, including schema,\n * checksum, and signature checks.\n * @param record The full GitGovRecord containing the cycle payload.\n * @param getActorPublicKey A function to retrieve the public key for a given actor ID.\n */\nexport async function validateFullCycleRecord(\n record: GitGovRecord & { payload: CycleRecord },\n getActorPublicKey: (keyId: string) => Promise<string | null>\n): Promise<void> {\n // 1. Schema Validation\n const [isValidSchema, errors] = validateCycleRecordSchema(record.payload);\n if (!isValidSchema) {\n const formattedErrors = (errors || []).map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n }));\n throw new DetailedValidationError('CycleRecord', formattedErrors);\n }\n\n // 2. Embedded Metadata Validation (header + wrapper)\n await validateFullEmbeddedMetadataRecord(record, getActorPublicKey);\n}\n","import type { CycleRecord } from \"../types\";\nimport { validateCycleRecordDetailed } from \"../validation/cycle_validator\";\nimport { DetailedValidationError } from \"../validation/common\";\nimport { generateCycleId } from \"../utils/id_generator\";\n\n/**\n * Creates a new, fully-formed CycleRecord with validation.\n */\nexport async function createCycleRecord(\n payload: Partial<CycleRecord>\n): Promise<CycleRecord> {\n // Generate timestamp for ID if not provided\n const timestamp = Math.floor(Date.now() / 1000);\n\n // Build cycle with defaults for optional fields\n const cycle: CycleRecord = {\n id: payload.id || generateCycleId(payload.title || '', timestamp),\n title: payload.title || '',\n status: payload.status || 'planning',\n taskIds: payload.taskIds || [], // EARS-21: Default empty array\n childCycleIds: payload.childCycleIds,\n tags: payload.tags,\n notes: payload.notes,\n ...payload,\n } as CycleRecord;\n\n // Use validator to check complete schema with detailed errors\n const validation = validateCycleRecordDetailed(cycle);\n if (!validation.isValid) {\n throw new DetailedValidationError('CycleRecord', validation.errors);\n }\n\n return cycle;\n}\n\n","export * from \"./record_store\";\n","import { promises as fs } from 'fs';\nimport * as path from 'path';\nimport { existsSync } from 'fs';\n\n// Project root cache for performance\nlet projectRoot: string | null = null;\nlet lastSearchPath: string | null = null;\n\n/**\n * GitGovernance Configuration Types\n * Based on config_file.md blueprint\n */\n\nexport interface GitGovConfig {\n protocolVersion: string; // Obligatorio segĆŗn config_file.md\n projectId: string; // Obligatorio segĆŗn config_file.md\n projectName: string; // Obligatorio segĆŗn config_file.md\n rootCycle: string; // Obligatorio: ID del ciclo raĆz (creado durante 'gitgov init')\n blueprints?: {\n root?: string; // Opcional, default: \"./blueprints\"\n };\n state?: {\n branch?: string; // Opcional, default: \"gitgov-state\"\n };\n cloud?: {\n projectId?: string; // Opcional, para SaaS integration\n providerMappings?: Record<string, string>; // Opcional\n };\n}\n\n/**\n * GitGovernance Session State Types\n * Based on session_state.md blueprint\n */\n\nexport interface ActorState {\n activeTaskId?: string;\n activeCycleId?: string;\n lastSync?: string;\n [key: string]: any; // Allow additional actor-specific state\n}\n\nexport interface GitGovSession {\n cloud?: {\n sessionToken?: string;\n };\n lastSession?: {\n actorId: string;\n timestamp: string;\n };\n actorState?: Record<string, ActorState>;\n}\n\n/**\n * Configuration Manager Class\n * Provides typed access to GitGovernance configuration and session state\n */\nexport class ConfigManager {\n private configPath: string;\n private sessionPath: string;\n\n constructor(projectRootPath: string = ConfigManager.findProjectRoot() || process.cwd()) {\n this.configPath = path.join(projectRootPath, '.gitgov', 'config.json');\n this.sessionPath = path.join(projectRootPath, '.gitgov', '.session.json');\n }\n\n /**\n * Load GitGovernance configuration\n */\n async loadConfig(): Promise<GitGovConfig | null> {\n try {\n const configContent = await fs.readFile(this.configPath, 'utf-8');\n return JSON.parse(configContent) as GitGovConfig;\n } catch (error) {\n // Config file doesn't exist or is invalid\n return null;\n }\n }\n\n /**\n * Load GitGovernance session state\n */\n async loadSession(): Promise<GitGovSession | null> {\n try {\n const sessionContent = await fs.readFile(this.sessionPath, 'utf-8');\n return JSON.parse(sessionContent) as GitGovSession;\n } catch (error) {\n // Session file doesn't exist or is invalid\n return null;\n }\n }\n\n /**\n * Get root cycle from configuration\n */\n async getRootCycle(): Promise<string | null> {\n const config = await this.loadConfig();\n return config?.rootCycle || null;\n }\n\n /**\n * Get project information from configuration\n */\n async getProjectInfo(): Promise<{ id: string; name: string } | null> {\n const config = await this.loadConfig();\n if (!config) return null;\n\n return {\n id: config.projectId,\n name: config.projectName\n };\n }\n\n /**\n * Get actor state for a specific actor\n */\n async getActorState(actorId: string): Promise<ActorState | null> {\n const session = await this.loadSession();\n return session?.actorState?.[actorId] || null;\n }\n\n /**\n * Update actor state for a specific actor\n */\n async updateActorState(actorId: string, state: Partial<ActorState>): Promise<void> {\n const session = await this.loadSession() || {};\n if (!session.actorState) session.actorState = {};\n\n session.actorState[actorId] = {\n ...session.actorState[actorId],\n ...state,\n lastSync: new Date().toISOString()\n };\n\n await fs.writeFile(this.sessionPath, JSON.stringify(session, null, 2), 'utf-8');\n }\n\n /**\n * Get cloud session token\n */\n async getCloudSessionToken(): Promise<string | null> {\n const session = await this.loadSession();\n return session?.cloud?.sessionToken || null;\n }\n\n // --- Static Utility Methods (consolidated from project-utils) ---\n\n /**\n * Finds the project root by searching upwards for a .git directory.\n * Caches the result for subsequent calls.\n * @param startPath The path to start searching from. Defaults to the current working directory.\n * @returns The absolute path to the project root, or null if not found.\n */\n static findProjectRoot(startPath: string = process.cwd()): string | null {\n // In test environment, allow cache reset via global\n if (typeof (global as any).projectRoot !== 'undefined' && (global as any).projectRoot === null) {\n projectRoot = null;\n lastSearchPath = null;\n }\n\n // Reset cache if we're searching from a different directory\n if (lastSearchPath && lastSearchPath !== startPath) {\n projectRoot = null;\n lastSearchPath = null;\n }\n\n if (projectRoot && lastSearchPath === startPath) {\n return projectRoot;\n }\n\n // Update last search path\n lastSearchPath = startPath;\n\n let currentPath = startPath;\n // Prevent infinite loop by stopping at the filesystem root\n while (currentPath !== path.parse(currentPath).root) {\n if (existsSync(path.join(currentPath, '.git'))) {\n projectRoot = currentPath;\n return projectRoot;\n }\n currentPath = path.dirname(currentPath);\n }\n\n // Final check at the root directory\n if (existsSync(path.join(currentPath, '.git'))) {\n projectRoot = currentPath;\n return projectRoot;\n }\n\n return null;\n }\n\n /**\n * Finds the appropriate project root by searching upwards.\n * First looks for .gitgov (initialized project), then .git (for init).\n * @param startPath The path to start searching from. Defaults to the current working directory.\n * @returns The absolute path to the project root, or null if not found.\n */\n static findGitgovRoot(startPath: string = process.cwd()): string | null {\n let currentPath = startPath;\n\n // First pass: Look for .gitgov (initialized GitGovernance project)\n while (currentPath !== path.parse(currentPath).root) {\n if (existsSync(path.join(currentPath, '.gitgov'))) {\n return currentPath;\n }\n currentPath = path.dirname(currentPath);\n }\n\n // Final check at root for .gitgov\n if (existsSync(path.join(currentPath, '.gitgov'))) {\n return currentPath;\n }\n\n // Second pass: Look for .git (for init command)\n currentPath = startPath;\n while (currentPath !== path.parse(currentPath).root) {\n if (existsSync(path.join(currentPath, '.git'))) {\n return currentPath;\n }\n currentPath = path.dirname(currentPath);\n }\n\n // Final check at root for .git\n if (existsSync(path.join(currentPath, '.git'))) {\n return currentPath;\n }\n\n return null;\n }\n\n /**\n * Gets the .gitgov directory path from project root\n */\n static getGitgovPath(): string {\n const root = ConfigManager.findGitgovRoot();\n if (!root) {\n throw new Error(\"Could not find project root. Make sure you are inside a GitGovernance repository.\");\n }\n return path.join(root, '.gitgov');\n }\n\n /**\n * Checks if current directory is a GitGovernance project\n */\n static isGitgovProject(): boolean {\n try {\n const gitgovPath = ConfigManager.getGitgovPath();\n return existsSync(gitgovPath);\n } catch {\n return false;\n }\n }\n}\n\n/**\n * Create a ConfigManager instance for the current project\n */\nexport function createConfigManager(projectRoot?: string): ConfigManager {\n return new ConfigManager(projectRoot);\n}\n","import { promises as fs, constants } from 'fs';\nimport * as path from 'path';\nimport { ConfigManager } from '../config_manager';\nimport type { GitGovRecord, GitGovRecordPayload, CustomRecord } from '../types';\n\ntype StorablePayload = Exclude<GitGovRecordPayload, CustomRecord>;\n\n// Define an interface for the filesystem dependencies for mocking\nexport interface FsDependencies {\n mkdir: typeof fs.mkdir;\n writeFile: typeof fs.writeFile;\n readFile: typeof fs.readFile;\n readdir: typeof fs.readdir;\n unlink: typeof fs.unlink;\n access: typeof fs.access;\n}\n\nexport class RecordStore<T extends StorablePayload> {\n private recordType: string;\n private recordsDir: string;\n private fs: FsDependencies;\n\n constructor(\n recordType: string,\n rootPath?: string,\n fsDeps: FsDependencies = fs\n ) {\n const foundRoot = rootPath || ConfigManager.findProjectRoot();\n if (!foundRoot) {\n throw new Error(\"Could not find project root. RecordStore requires a valid project root.\");\n }\n this.recordType = recordType;\n this.recordsDir = path.join(foundRoot, '.gitgov', this.recordType);\n this.fs = fsDeps;\n }\n\n private getRecordPath(recordId: string): string {\n const safeId = recordId.replace(/:/g, '_');\n return path.join(this.recordsDir, `${safeId}.json`);\n }\n\n private async ensureDirExists(): Promise<void> {\n await this.fs.mkdir(this.recordsDir, { recursive: true });\n }\n\n async write(record: GitGovRecord & { payload: T }): Promise<void> {\n await this.ensureDirExists();\n const filePath = this.getRecordPath(record.payload.id);\n const content = JSON.stringify(record, null, 2);\n await this.fs.writeFile(filePath, content, 'utf-8');\n }\n\n\n async read(recordId: string): Promise<(GitGovRecord & { payload: T }) | null> {\n const filePath = this.getRecordPath(recordId);\n try {\n const content = await this.fs.readFile(filePath, 'utf-8');\n const record = JSON.parse(content) as GitGovRecord & { payload: T };\n\n return record;\n } catch (e: unknown) {\n const error = e as NodeJS.ErrnoException;\n if (error.code === 'ENOENT') {\n return null;\n }\n throw error;\n }\n }\n\n\n async delete(recordId: string): Promise<void> {\n const filePath = this.getRecordPath(recordId);\n try {\n await this.fs.unlink(filePath);\n } catch (e: unknown) {\n const error = e as NodeJS.ErrnoException;\n if (error.code !== 'ENOENT') {\n throw error;\n }\n }\n }\n\n async list(): Promise<string[]> {\n try {\n const files = await this.fs.readdir(this.recordsDir, { withFileTypes: true });\n return files\n .filter(file => file.isFile() && file.name.endsWith('.json'))\n .map(file => file.name.replace(/\\.json$/, '').replace(/_/g, ':'));\n } catch (e: unknown) {\n const error = e as NodeJS.ErrnoException;\n if (error.code === 'ENOENT') {\n return [];\n }\n throw error;\n }\n }\n\n async exists(recordId: string): Promise<boolean> {\n const filePath = this.getRecordPath(recordId);\n try {\n await this.fs.access(filePath, constants.F_OK);\n return true;\n } catch {\n return false;\n }\n }\n}\n","import type { ActorRecord } from \"../../types\";\nimport type { AgentRecord } from \"../../types\";\nimport type {\n GitGovRecord,\n ActorPayload,\n AgentPayload,\n} from \"../../types\";\nimport { RecordStore } from \"../../store/record_store\";\nimport { createActorRecord } from \"../../factories/actor_factory\";\nimport { validateFullActorRecord } from \"../../validation/actor_validator\";\nimport { createAgentRecord } from \"../../factories/agent_factory\";\nimport { validateFullAgentRecord } from \"../../validation/agent_validator\";\nimport { generateKeys, signPayload } from \"../../crypto/signatures\";\nimport { calculatePayloadChecksum } from \"../../crypto/checksum\";\nimport { generateActorId } from \"../../utils/id_generator\";\nimport type { Signature } from \"../../types\";\nimport type {\n IEventStream,\n ActorCreatedEvent,\n ActorRevokedEvent,\n AgentRegisteredEvent\n} from \"../../event_bus\";\nimport { ConfigManager } from \"../../config_manager\";\n\n/**\n * IdentityAdapter Interface - The Identity Management Contract\n */\nexport interface IIdentityAdapter {\n // ActorRecord Operations\n createActor(payload: ActorPayload, signerId: string): Promise<ActorRecord>;\n getActor(actorId: string): Promise<ActorRecord | null>;\n listActors(): Promise<ActorRecord[]>;\n revokeActor(actorId: string, revokedBy?: string, reason?: \"compromised\" | \"rotation\" | \"manual\", supersededBy?: string): Promise<ActorRecord>;\n\n // Succession Chain Resolution\n resolveCurrentActorId(originalActorId: string): Promise<string>;\n getCurrentActor(): Promise<ActorRecord>;\n getEffectiveActorForAgent(agentId: string): Promise<ActorRecord | null>;\n\n // Advanced Operations\n signRecord(record: GitGovRecord, actorId: string, role: string): Promise<GitGovRecord>;\n rotateActorKey(actorId: string): Promise<{ oldActor: ActorRecord; newActor: ActorRecord }>;\n authenticate(sessionToken: string): Promise<void>;\n getActorPublicKey(keyId: string): Promise<string | null>;\n\n // AgentRecord Operations\n createAgentRecord(payload: Partial<AgentPayload>): Promise<AgentRecord>;\n getAgentRecord(agentId: string): Promise<AgentRecord | null>;\n listAgentRecords(): Promise<AgentRecord[]>;\n}\n\n/**\n * IdentityAdapter Dependencies - Facade + Dependency Injection Pattern\n */\nexport interface IdentityAdapterDependencies {\n // Data Layer (Protocols)\n actorStore: RecordStore<ActorRecord>;\n agentStore: RecordStore<AgentRecord>;\n\n // Optional: Event Bus for event-driven integration (graceful degradation)\n eventBus?: IEventStream;\n}\n\nexport class IdentityAdapter implements IIdentityAdapter {\n private actorStore: RecordStore<ActorRecord>;\n private agentStore: RecordStore<AgentRecord>;\n private eventBus: IEventStream | undefined;\n\n constructor(dependencies: IdentityAdapterDependencies) {\n this.actorStore = dependencies.actorStore;\n this.agentStore = dependencies.agentStore;\n this.eventBus = dependencies.eventBus; // Graceful degradation\n }\n\n /**\n * Get actor public key for validation - used by other adapters\n */\n async getActorPublicKey(keyId: string): Promise<string | null> {\n try {\n const actor = await this.getActor(keyId);\n return actor?.publicKey || null;\n } catch (error) {\n return null;\n }\n }\n\n async createActor(\n payload: ActorPayload,\n _signerId: string\n ): Promise<ActorRecord> {\n // Validate required fields\n if (!payload.type || !payload.displayName) {\n throw new Error('ActorRecord requires type and displayName');\n }\n\n // Generate new keys for the actor\n const { publicKey, privateKey } = await generateKeys();\n\n // Generate ID if not provided\n const actorId = payload.id || generateActorId(payload.type, payload.displayName);\n\n // Create complete ActorRecord payload\n const completePayload: ActorRecord = {\n id: actorId,\n type: payload.type,\n displayName: payload.displayName,\n publicKey,\n roles: payload.roles || ['author'],\n status: payload.status || 'active',\n ...payload\n };\n\n // Validate the payload using the factory\n const validatedPayload = await createActorRecord(completePayload);\n\n // Calculate checksum for the payload\n const payloadChecksum = calculatePayloadChecksum(validatedPayload);\n\n // Create signature for the record\n const signature = await signPayload(validatedPayload, privateKey, actorId, 'author', 'Actor registration');\n\n // Create the complete GitGovRecord structure\n const record: GitGovRecord & { payload: ActorRecord } = {\n header: {\n version: '1.0',\n type: 'actor',\n payloadChecksum,\n signatures: [signature]\n },\n payload: validatedPayload\n };\n\n // Validate the complete record\n await validateFullActorRecord(record, async (keyId) => {\n if (keyId === actorId) {\n return publicKey; // Self-referential for bootstrap\n }\n const signerActor = await this.getActor(keyId);\n return signerActor?.publicKey || null;\n });\n\n // Store the record with validation\n await this.actorStore.write(record);\n\n // Emit actor created event (graceful degradation if no eventBus)\n if (this.eventBus) {\n // Check if this is the first actor (bootstrap)\n const allActorIds = await this.actorStore.list();\n const isBootstrap = allActorIds.length === 1; // Only the actor we just created\n\n const event: ActorCreatedEvent = {\n type: \"identity.actor.created\",\n timestamp: Date.now(),\n source: \"identity_adapter\",\n payload: {\n actorId,\n type: validatedPayload.type,\n publicKey: validatedPayload.publicKey,\n roles: validatedPayload.roles,\n isBootstrap,\n },\n };\n this.eventBus.publish(event);\n }\n\n // TODO: Store private key securely (outside of this core module)\n // For now, we'll just log it (NOT for production)\n console.warn(`Private key for ${actorId}: ${privateKey} (STORE SECURELY)`);\n\n return validatedPayload;\n }\n\n async getActor(actorId: string): Promise<ActorRecord | null> {\n const record = await this.actorStore.read(actorId);\n return record ? record.payload : null;\n }\n\n async listActors(): Promise<ActorRecord[]> {\n const ids = await this.actorStore.list();\n const actors: ActorRecord[] = [];\n\n for (const id of ids) {\n const record = await this.actorStore.read(id);\n if (record) {\n actors.push(record.payload);\n }\n }\n\n return actors;\n }\n\n async signRecord(\n record: GitGovRecord,\n actorId: string,\n role: string\n ): Promise<GitGovRecord> {\n // MVP MODE: Generate functionally valid mock signature\n // TODO: Replace with real cryptographic signing when key management is implemented\n\n // Verify actor exists\n const actor = await this.getActor(actorId);\n if (!actor) {\n throw new Error(`Actor not found: ${actorId}`);\n }\n\n // Calculate payload checksum (real)\n const payloadChecksum = calculatePayloadChecksum(record.payload);\n\n // Generate mock signature that passes validation\n const mockSignature: Signature = {\n keyId: actorId,\n role: role,\n notes: 'Record signed',\n signature: `mock-signature-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,\n timestamp: Math.floor(Date.now() / 1000)\n };\n\n // Create signed record with real checksum + mock signature\n const signedRecord: GitGovRecord = {\n ...record,\n header: {\n ...record.header,\n payloadChecksum,\n signatures: [...(record.header.signatures || []), mockSignature]\n }\n };\n\n return signedRecord;\n }\n\n /**\n * Resolves the current active ActorRecord ID by following the succession chain.\n * This is critical for AgentRecord operations after key rotation.\n * \n * @param originalActorId - The original actor ID (may be revoked)\n * @returns Promise<string> - The current active actor ID\n */\n async resolveCurrentActorId(originalActorId: string): Promise<string> {\n let currentId = originalActorId;\n let actor = await this.getActor(currentId);\n\n // Follow the succession chain until we find an active actor\n while (actor && actor.status === 'revoked' && actor.supersededBy) {\n currentId = actor.supersededBy;\n actor = await this.getActor(currentId);\n }\n\n return currentId;\n }\n\n /**\n * Gets the current ActorRecord of the system based on active session or fallback.\n * This is critical for CLI commands that need to know \"who is the current user\".\n * \n * @returns Promise<ActorRecord> - The current active ActorRecord\n */\n async getCurrentActor(): Promise<ActorRecord> {\n // 1. Try to get from session\n const configManager = new ConfigManager();\n const session = await configManager.loadSession();\n\n if (session?.lastSession?.actorId) {\n // Use resolveCurrentActorId to handle succession chain\n const currentActorId = await this.resolveCurrentActorId(session.lastSession.actorId);\n const actor = await this.getActor(currentActorId);\n if (actor) {\n return actor;\n }\n }\n\n // 2. Fallback: first active actor in the system\n const actors = await this.listActors();\n const activeActor = actors.find(a => a.status === 'active');\n if (activeActor) {\n return activeActor;\n }\n\n throw new Error(\"ā No active actors found. Run 'gitgov init' first.\");\n }\n\n /**\n * Gets the effective (current active) ActorRecord for an AgentRecord.\n * This resolves the succession chain to get the current cryptographic identity.\n * \n * @param agentId - The AgentRecord ID (may reference revoked ActorRecord)\n * @returns Promise<ActorRecord | null> - The current active ActorRecord or null\n */\n async getEffectiveActorForAgent(agentId: string): Promise<ActorRecord | null> {\n const currentActorId = await this.resolveCurrentActorId(agentId);\n return this.getActor(currentActorId);\n }\n\n async rotateActorKey(\n _actorId: string\n ): Promise<{ oldActor: ActorRecord; newActor: ActorRecord }> {\n // TODO: Implement key rotation workflow\n throw new Error('rotateActorKey not implemented yet - complex operation');\n }\n\n async revokeActor(actorId: string, revokedBy: string = \"system\", reason: \"compromised\" | \"rotation\" | \"manual\" = \"manual\", supersededBy?: string): Promise<ActorRecord> {\n // Read the existing actor\n const existingRecord = await this.actorStore.read(actorId);\n if (!existingRecord) {\n throw new Error(`ActorRecord with id ${actorId} not found`);\n }\n\n // Update the status to revoked\n const revokedPayload: ActorRecord = {\n ...existingRecord.payload,\n status: \"revoked\",\n ...(supersededBy && { supersededBy })\n };\n\n // Calculate new checksum for the updated payload\n const payloadChecksum = calculatePayloadChecksum(revokedPayload);\n\n // Create updated record\n const updatedRecord: GitGovRecord & { payload: ActorRecord } = {\n ...existingRecord,\n header: {\n ...existingRecord.header,\n payloadChecksum\n },\n payload: revokedPayload\n };\n\n // Store the updated record with validation\n await this.actorStore.write(updatedRecord);\n\n // Emit actor revoked event (graceful degradation if no eventBus)\n if (this.eventBus) {\n const eventPayload: ActorRevokedEvent[\"payload\"] = {\n actorId,\n revokedBy,\n revocationReason: reason,\n };\n\n if (supersededBy) {\n eventPayload.supersededBy = supersededBy;\n }\n\n const event: ActorRevokedEvent = {\n type: \"identity.actor.revoked\",\n timestamp: Date.now(),\n source: \"identity_adapter\",\n payload: eventPayload,\n };\n this.eventBus.publish(event);\n }\n\n return revokedPayload;\n }\n\n async authenticate(_sessionToken: string): Promise<void> {\n // TODO: Implement session token storage for SaaS mode\n console.warn('authenticate not fully implemented yet');\n }\n\n async createAgentRecord(payload: Partial<AgentPayload>): Promise<AgentRecord> {\n // Validate required fields\n if (!payload.id || !payload.engine) {\n throw new Error('AgentRecord requires id and engine');\n }\n\n // Verify that corresponding ActorRecord exists and is of type 'agent'\n const correspondingActor = await this.getActor(payload.id);\n if (!correspondingActor) {\n throw new Error(`ActorRecord with id ${payload.id} not found. AgentRecord can only be created for existing ActorRecord.`);\n }\n if (correspondingActor.type !== 'agent') {\n throw new Error(`ActorRecord with id ${payload.id} must be of type 'agent' to create AgentRecord.`);\n }\n\n // Create complete AgentRecord payload\n const completePayload: AgentRecord = {\n id: payload.id,\n engine: payload.engine,\n status: payload.status || 'active',\n triggers: payload.triggers || [],\n knowledge_dependencies: payload.knowledge_dependencies || [],\n prompt_engine_requirements: payload.prompt_engine_requirements || {},\n ...payload\n };\n\n // Validate the payload using the factory\n const validatedPayload = await createAgentRecord(completePayload);\n\n // Calculate checksum for the payload\n const payloadChecksum = calculatePayloadChecksum(validatedPayload);\n\n // Create signature for the record using the corresponding actor's key\n // Note: In a real implementation, we would need access to the actor's private key\n // For now, we'll create a placeholder signature structure\n const signature = signPayload(validatedPayload, 'placeholder-private-key', payload.id, 'author', 'Agent registration');\n\n // Create the complete GitGovRecord structure\n const record: GitGovRecord & { payload: AgentRecord } = {\n header: {\n version: '1.0',\n type: 'agent',\n payloadChecksum,\n signatures: [signature]\n },\n payload: validatedPayload\n };\n\n // Validate the complete record\n await validateFullAgentRecord(record, async (keyId) => {\n if (keyId === payload.id) {\n return correspondingActor.publicKey; // Use the actor's public key\n }\n const signerActor = await this.getActor(keyId);\n return signerActor?.publicKey || null;\n });\n\n // Store the record with validation\n await this.agentStore.write(record);\n\n // Emit agent registered event (graceful degradation if no eventBus)\n if (this.eventBus) {\n const event: AgentRegisteredEvent = {\n type: \"identity.agent.registered\",\n timestamp: Date.now(),\n source: \"identity_adapter\",\n payload: {\n agentId: validatedPayload.id,\n engine: validatedPayload.engine,\n correspondingActorId: correspondingActor.id,\n },\n };\n this.eventBus.publish(event);\n }\n\n return validatedPayload;\n }\n\n async getAgentRecord(agentId: string): Promise<AgentRecord | null> {\n const record = await this.agentStore.read(agentId);\n return record ? record.payload : null;\n }\n\n async listAgentRecords(): Promise<AgentRecord[]> {\n const ids = await this.agentStore.list();\n const agents: AgentRecord[] = [];\n\n for (const id of ids) {\n const record = await this.agentStore.read(id);\n if (record) {\n agents.push(record.payload);\n }\n }\n\n return agents;\n }\n}\n","import type { ValidateFunction, ErrorObject } from \"ajv\";\nimport type { ActorRecord } from \"../types\";\nimport type { GitGovRecord } from \"../types\";\nimport { DetailedValidationError } from \"./common\";\nimport type { ValidationResult } from './errors';\nimport { SchemaValidationCache } from \"../schemas/schema_cache\";\nimport { Schemas } from \"../schemas\";\nimport { validateFullEmbeddedMetadataRecord } from './embedded_metadata_validator';\n\n// --- Schema Validation ---\nconst actorSchema = Schemas.ActorRecord;\n\nexport function validateActorRecordSchema(\n data: unknown\n): [boolean, ValidateFunction[\"errors\"]] {\n const validateSchema = SchemaValidationCache.getValidatorFromSchema(actorSchema);\n const isValid = validateSchema(data) as boolean;\n return [isValid, validateSchema.errors];\n}\n\nexport function isActorRecord(data: unknown): data is ActorRecord {\n const validateSchema = SchemaValidationCache.getValidatorFromSchema(actorSchema);\n return validateSchema(data) as boolean;\n}\n\n/**\n * Validates an ActorRecord and returns detailed validation result.\n * Use this in factories and adapters for comprehensive error reporting.\n */\nexport function validateActorRecordDetailed(data: unknown): ValidationResult {\n const [isValid, ajvErrors] = validateActorRecordSchema(data);\n\n const formattedErrors = ajvErrors ? ajvErrors.map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n })) : [];\n\n return {\n isValid,\n errors: formattedErrors\n };\n}\n\n// --- Full Validation Orchestrator ---\n/**\n * Performs a complete validation of an ActorRecord, including schema,\n * checksum, and signature checks.\n * @param record The full GitGovRecord containing the actor payload.\n * @param getActorPublicKey A function to retrieve the public key for a given actor ID.\n */\nexport async function validateFullActorRecord(\n record: GitGovRecord & { payload: ActorRecord },\n getActorPublicKey: (keyId: string) => Promise<string | null>\n): Promise<void> {\n // 1. Schema Validation\n const [isValidSchema, errors] = validateActorRecordSchema(record.payload);\n if (!isValidSchema) {\n const formattedErrors = (errors || []).map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n }));\n throw new DetailedValidationError('ActorRecord', formattedErrors);\n }\n\n // 2. Embedded Metadata Validation (header + wrapper)\n await validateFullEmbeddedMetadataRecord(record, getActorPublicKey);\n}\n","import type { ActorRecord } from \"../types\";\nimport { validateActorRecordDetailed } from \"../validation/actor_validator\";\nimport { generateActorId } from \"../utils/id_generator\";\nimport { DetailedValidationError } from \"../validation/common\";\n\n/**\n * Creates a new, fully-formed ActorRecord with validation.\n */\nexport async function createActorRecord(\n payload: Partial<ActorRecord>\n): Promise<ActorRecord> {\n // Build actor with defaults for optional fields\n const actor: ActorRecord = {\n id: payload.id || generateActorId(payload.type || 'human', payload.displayName || ''),\n type: payload.type || 'human' as const,\n displayName: payload.displayName || '',\n publicKey: payload.publicKey || '',\n roles: payload.roles || ['author'] as [string, ...string[]],\n status: payload.status || 'active',\n ...payload,\n } as ActorRecord;\n\n // Use validator to check complete schema with detailed errors\n const validation = validateActorRecordDetailed(actor);\n if (!validation.isValid) {\n throw new DetailedValidationError('ActorRecord', validation.errors);\n }\n\n return actor;\n}\n","import type { ValidateFunction, ErrorObject } from \"ajv\";\nimport type { AgentRecord } from \"../types\";\nimport type { GitGovRecord } from \"../types\";\nimport { DetailedValidationError, SchemaValidationError } from \"./common\";\nimport { validateFullEmbeddedMetadataRecord } from './embedded_metadata_validator';\nimport type { ValidationResult } from './errors';\nimport { SchemaValidationCache } from \"../schemas/schema_cache\";\nimport { Schemas } from '../schemas';\nimport type { ActorRecord } from \"../types\";\n\n// --- Schema Validation ---\nexport function validateAgentRecordSchema(\n data: unknown\n): [boolean, ValidateFunction[\"errors\"]] {\n const validateSchema = SchemaValidationCache.getValidatorFromSchema(Schemas.AgentRecord);\n const isValid = validateSchema(data) as boolean;\n return [isValid, validateSchema.errors];\n}\n\nexport function isAgentRecord(data: unknown): data is AgentRecord {\n const validateSchema = SchemaValidationCache.getValidatorFromSchema(Schemas.AgentRecord);\n return validateSchema(data) as boolean;\n}\n\n/**\n * Validates an AgentRecord and returns detailed validation result.\n * Use this in factories and adapters for comprehensive error reporting.\n */\nexport function validateAgentRecordDetailed(data: unknown): ValidationResult {\n const [isValid, ajvErrors] = validateAgentRecordSchema(data);\n\n const formattedErrors = ajvErrors ? ajvErrors.map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n })) : [];\n\n return {\n isValid,\n errors: formattedErrors\n };\n}\n\n// --- Full Validation Orchestrator ---\n/**\n * Performs a complete validation of an AgentRecord, including schema,\n * checksum, and signature checks.\n * @param record The full GitGovRecord containing the agent payload.\n * @param getActorPublicKey A function to retrieve the public key for a given actor ID.\n */\nexport async function validateFullAgentRecord(\n record: GitGovRecord & { payload: AgentRecord },\n getActorPublicKey: (keyId: string) => Promise<string | null>\n): Promise<void> {\n // 1. Schema Validation\n const [isValidSchema, errors] = validateAgentRecordSchema(record.payload);\n if (!isValidSchema) {\n const formattedErrors = (errors || []).map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n }));\n throw new DetailedValidationError('AgentRecord', formattedErrors);\n }\n\n // 2. Embedded Metadata Validation (header + wrapper)\n await validateFullEmbeddedMetadataRecord(record, getActorPublicKey);\n}\n\n/**\n * Validates that an AgentRecord has a valid relationship with its corresponding ActorRecord,\n * including succession chain resolution for key rotation scenarios.\n * \n * @param agentRecord The AgentRecord to validate\n * @param getEffectiveActor Function to get the effective ActorRecord (with succession resolution)\n */\nexport async function validateAgentActorRelationship(\n agentRecord: AgentRecord,\n getEffectiveActor: (agentId: string) => Promise<ActorRecord | null>\n): Promise<void> {\n const effectiveActor = await getEffectiveActor(agentRecord.id);\n\n if (!effectiveActor) {\n throw new SchemaValidationError(\n `No active ActorRecord found for AgentRecord ${agentRecord.id}. AgentRecord requires corresponding ActorRecord.`\n );\n }\n\n if (effectiveActor.type !== 'agent') {\n throw new SchemaValidationError(\n `ActorRecord ${effectiveActor.id} must be of type 'agent' to support AgentRecord ${agentRecord.id}.`\n );\n }\n\n if (effectiveActor.status !== 'active') {\n throw new SchemaValidationError(\n `ActorRecord succession chain for ${agentRecord.id} does not resolve to an active actor. Current effective actor: ${effectiveActor.id} (status: ${effectiveActor.status}).`\n );\n }\n}\n","import type { AgentRecord } from \"../types\";\nimport { validateAgentRecordDetailed } from \"../validation/agent_validator\";\nimport { DetailedValidationError } from \"../validation/common\";\n\n/**\n * Creates a new, fully-formed AgentRecord with validation.\n */\nexport async function createAgentRecord(\n payload: Partial<AgentRecord>\n): Promise<AgentRecord> {\n // Build agent with defaults for optional fields\n const agent: AgentRecord = {\n id: payload.id || '',\n engine: payload.engine || { type: 'local' as const },\n status: payload.status || 'active',\n triggers: payload.triggers || [],\n knowledge_dependencies: payload.knowledge_dependencies || [],\n prompt_engine_requirements: payload.prompt_engine_requirements || {},\n ...payload,\n } as AgentRecord;\n\n // Use validator to check complete schema with detailed errors\n const validation = validateAgentRecordDetailed(agent);\n if (!validation.isValid) {\n throw new DetailedValidationError('AgentRecord', validation.errors);\n }\n\n return agent;\n}\n","import { createFeedbackRecord } from '../../factories/feedback_factory';\nimport { RecordStore } from '../../store';\nimport { IdentityAdapter } from '../identity_adapter';\nimport type { FeedbackRecord } from '../../types';\nimport type { IEventStream, FeedbackCreatedEvent } from '../../event_bus';\nimport type { GitGovRecord } from '../../types';\n\n/**\n * FeedbackAdapter Dependencies - Facade + Dependency Injection Pattern\n */\nexport interface FeedbackAdapterDependencies {\n // Data Layer (Protocols)\n feedbackStore: RecordStore<FeedbackRecord>;\n\n // Infrastructure Layer\n identity: IdentityAdapter;\n eventBus: IEventStream; // For emitting events\n}\n\n/**\n * FeedbackAdapter Interface - The Communication Facilitator\n */\n/**\n * FeedbackThread structure for conversation trees\n */\nexport interface FeedbackThread {\n feedback: FeedbackRecord;\n responses: FeedbackThread[];\n}\n\nexport interface IFeedbackAdapter {\n /**\n * Creates a new FeedbackRecord.\n */\n create(payload: Partial<FeedbackRecord>, actorId: string): Promise<FeedbackRecord>;\n\n /**\n * Helper: Creates a new feedback that \"resolves\" another (immutable pattern).\n */\n resolve(feedbackId: string, actorId: string, content?: string): Promise<FeedbackRecord>;\n\n /**\n * Gets a specific FeedbackRecord by its ID.\n */\n getFeedback(feedbackId: string): Promise<FeedbackRecord | null>;\n\n /**\n * Gets all FeedbackRecords for a specific entity.\n */\n getFeedbackByEntity(entityId: string): Promise<FeedbackRecord[]>;\n\n /**\n * Gets all FeedbackRecords in the system.\n */\n getAllFeedback(): Promise<FeedbackRecord[]>;\n\n /**\n * Builds the complete conversation tree for a feedback.\n */\n getFeedbackThread(feedbackId: string, maxDepth?: number): Promise<FeedbackThread>;\n}\n\n/**\n * FeedbackAdapter - The Communication Facilitator\n * \n * Implements Facade + Dependency Injection Pattern for testeable and configurable orchestration.\n * Acts as Mediator between structured communication and data stores.\n */\nexport class FeedbackAdapter implements IFeedbackAdapter {\n private feedbackStore: RecordStore<FeedbackRecord>;\n private identity: IdentityAdapter;\n private eventBus: IEventStream;\n\n constructor(dependencies: FeedbackAdapterDependencies) {\n this.feedbackStore = dependencies.feedbackStore;\n this.identity = dependencies.identity;\n this.eventBus = dependencies.eventBus;\n }\n\n /**\n * [EARS-1, EARS-2, EARS-3, EARS-4, EARS-5, EARS-6, EARS-7, EARS-8] Creates a new FeedbackRecord for structured communication between actors.\n * \n * Description: Creates a new FeedbackRecord for structured communication between actors.\n * Implementation: Builds record with status: \"open\", signs with actorId, persists and emits event.\n * Usage: Invoked by `gitgov feedback create` to create feedback, assignments, blocks, responses.\n * Returns: Complete and signed FeedbackRecord.\n */\n async create(payload: Partial<FeedbackRecord>, actorId: string): Promise<FeedbackRecord> {\n // Input validation - Type-safe approach\n const payloadWithEntityId = payload as Partial<FeedbackRecord> & { entityId?: string; entityType?: string };\n if (!payloadWithEntityId.entityId) {\n throw new Error('RecordNotFoundError: entityId is required');\n }\n\n if (payloadWithEntityId.entityType && !['task', 'execution', 'changelog', 'feedback', 'cycle'].includes(payloadWithEntityId.entityType)) {\n throw new Error('InvalidEntityTypeError: entityType must be task, execution, changelog, feedback, or cycle');\n }\n\n // Validate no duplicate assignments: a task can be assigned to multiple actors,\n // but the same task cannot have multiple open assignments to the same actor\n // EARS-36: In immutable pattern, assignments stay 'open' forever. Check for resolution via resolvesFeedbackId\n if (payload.type === 'assignment' && payload.assignee) {\n const existingFeedbacks = await this.getFeedbackByEntity(payloadWithEntityId.entityId);\n\n // Find all open assignments for this actor\n const openAssignments = existingFeedbacks.filter(feedback =>\n feedback.type === 'assignment' &&\n feedback.assignee === payload.assignee &&\n feedback.status === 'open'\n );\n\n if (openAssignments.length > 0) {\n // For each open assignment, check if it has been resolved\n // Resolution feedbacks have entityType='feedback' and resolvesFeedbackId pointing to the assignment\n // They are NOT in the same entity list, so we need to search all feedbacks\n const allFeedbacks = await this.getAllFeedback();\n\n for (const assignment of openAssignments) {\n const hasResolution = allFeedbacks.some(feedback =>\n feedback.entityType === 'feedback' &&\n feedback.resolvesFeedbackId === assignment.id &&\n feedback.status === 'resolved'\n );\n\n if (!hasResolution) {\n // Open assignment WITHOUT resolution = duplicate\n throw new Error(`DuplicateAssignmentError: Task ${payloadWithEntityId.entityId} is already assigned to ${payload.assignee} (feedback: ${assignment.id})`);\n }\n }\n }\n }\n\n // Set default status to \"open\" (can be overridden by payload.status)\n const enrichedPayload = {\n status: 'open' as const,\n ...payload // Allows payload.status to override default\n };\n\n try {\n // 1. Build the record with factory\n const validatedPayload = await createFeedbackRecord(enrichedPayload);\n\n // 2. Create unsigned record structure\n const unsignedRecord: GitGovRecord & { payload: FeedbackRecord } = {\n header: {\n version: '1.0',\n type: 'feedback',\n payloadChecksum: 'will-be-calculated-by-signRecord',\n signatures: [{\n keyId: actorId,\n role: 'author',\n notes: 'Feedback created',\n signature: 'placeholder',\n timestamp: Date.now()\n }]\n },\n payload: validatedPayload,\n };\n\n // 3. Sign the record\n const signedRecord = await this.identity.signRecord(unsignedRecord, actorId, 'author');\n\n // 4. Persist the record\n await this.feedbackStore.write(signedRecord as GitGovRecord & { payload: FeedbackRecord });\n\n // 5. Emit event - responsibility ends here\n this.eventBus.publish({\n type: 'feedback.created',\n timestamp: Date.now(),\n source: 'feedback_adapter',\n payload: {\n feedbackId: validatedPayload.id,\n entityType: validatedPayload.entityType,\n entityId: validatedPayload.entityId,\n type: validatedPayload.type,\n status: validatedPayload.status,\n content: validatedPayload.content,\n triggeredBy: actorId,\n assignee: validatedPayload.assignee,\n resolvesFeedbackId: validatedPayload.resolvesFeedbackId\n },\n } as FeedbackCreatedEvent);\n\n return validatedPayload;\n } catch (error) {\n if (error instanceof Error && error.message.includes('DetailedValidationError')) {\n throw error;\n }\n throw error;\n }\n }\n\n /**\n * [EARS-9, EARS-10, EARS-11, EARS-12] Helper: Creates a new feedback that \"resolves\" another (immutable).\n * \n * Description: Helper method that creates a new feedback documenting resolution of another feedback.\n * Implementation: Verifies original exists, then delegates to create() with immutable pattern.\n * Usage: Ergonomic helper for common case. For advanced cases (wontfix, approval), use create() directly.\n * Returns: New FeedbackRecord that points to the original with resolvesFeedbackId.\n */\n async resolve(feedbackId: string, actorId: string, content?: string): Promise<FeedbackRecord> {\n // 1. Verify the original feedback exists\n const originalFeedback = await this.getFeedback(feedbackId);\n if (!originalFeedback) {\n throw new Error(`RecordNotFoundError: Feedback not found: ${feedbackId}`);\n }\n\n // 2. Generate default content if not provided\n const resolveContent = content || `Feedback resolved by ${actorId}`;\n\n // 3. Create NEW feedback that points to the original (immutable pattern)\n // This maintains full immutability - original feedback is never modified\n return await this.create({\n entityType: 'feedback',\n entityId: feedbackId,\n type: 'clarification',\n status: 'resolved',\n content: resolveContent,\n resolvesFeedbackId: feedbackId\n }, actorId);\n }\n\n /**\n * [EARS-13, EARS-14] Gets a specific FeedbackRecord by its ID for query.\n * \n * Description: Gets a specific FeedbackRecord by its ID for query.\n * Implementation: Direct read from record store without modifications.\n * Usage: Invoked by `gitgov feedback show` to display feedback details.\n * Returns: FeedbackRecord found or null if it doesn't exist.\n */\n async getFeedback(feedbackId: string): Promise<FeedbackRecord | null> {\n const record = await this.feedbackStore.read(feedbackId);\n return record ? record.payload : null;\n }\n\n /**\n * [EARS-15] Gets all FeedbackRecords associated with a specific entity.\n * \n * Description: Gets all FeedbackRecords associated with a specific entity.\n * Implementation: Reads all records and filters by matching entityId.\n * Usage: Invoked by `gitgov feedback list` to display feedback for a task/cycle/execution.\n * Returns: Array of FeedbackRecords filtered for the entity.\n */\n async getFeedbackByEntity(entityId: string): Promise<FeedbackRecord[]> {\n const ids = await this.feedbackStore.list();\n const feedbacks: FeedbackRecord[] = [];\n\n for (const id of ids) {\n const record = await this.feedbackStore.read(id);\n if (record && record.payload.entityId === entityId) {\n feedbacks.push(record.payload);\n }\n }\n\n return feedbacks;\n }\n\n /**\n * [EARS-16] Gets all FeedbackRecords in the system for indexation.\n * \n * Description: Gets all FeedbackRecords in the system for complete indexation.\n * Implementation: Complete read from record store without filters.\n * Usage: Invoked by `gitgov feedback list` and by MetricsAdapter for calculations.\n * Returns: Complete array of all FeedbackRecords.\n */\n async getAllFeedback(): Promise<FeedbackRecord[]> {\n const ids = await this.feedbackStore.list();\n const feedbacks: FeedbackRecord[] = [];\n\n for (const id of ids) {\n const record = await this.feedbackStore.read(id);\n if (record) {\n feedbacks.push(record.payload);\n }\n }\n\n return feedbacks;\n }\n\n /**\n * [EARS-17, EARS-18, EARS-19, EARS-20] Builds the complete conversation tree for a feedback.\n * \n * Description: Recursively constructs the conversation tree for a feedback.\n * Implementation: Reads root feedback, finds all responses, builds tree recursively until maxDepth.\n * Usage: Invoked by `gitgov feedback thread` and `gitgov feedback show --thread`.\n * Returns: FeedbackThread object with tree structure.\n */\n async getFeedbackThread(feedbackId: string, maxDepth: number = Infinity): Promise<FeedbackThread> {\n return await this.buildThread(feedbackId, maxDepth, 0);\n }\n\n /**\n * Private helper: Recursively builds conversation thread.\n */\n private async buildThread(\n feedbackId: string,\n maxDepth: number,\n currentDepth: number\n ): Promise<FeedbackThread> {\n // 1. Depth limit reached\n if (currentDepth >= maxDepth) {\n throw new Error(`Max depth ${maxDepth} reached for feedback thread`);\n }\n\n // 2. Get root feedback\n const feedback = await this.getFeedback(feedbackId);\n if (!feedback) {\n throw new Error(`RecordNotFoundError: Feedback not found: ${feedbackId}`);\n }\n\n // 3. Find all responses (feedbacks pointing to this one)\n const allFeedbacks = await this.getAllFeedback();\n const responses = allFeedbacks.filter(\n f => f.entityType === 'feedback' && f.entityId === feedbackId\n );\n\n // 4. Build tree recursively\n const responseThreads: FeedbackThread[] = [];\n for (const response of responses) {\n try {\n const thread = await this.buildThread(response.id, maxDepth, currentDepth + 1);\n responseThreads.push(thread);\n } catch (error) {\n // If depth limit reached, just skip this branch\n if (error instanceof Error && error.message.includes('Max depth')) {\n continue;\n }\n throw error;\n }\n }\n\n return {\n feedback,\n responses: responseThreads\n };\n }\n}\n","import type { ValidateFunction, ErrorObject } from \"ajv\";\nimport type { FeedbackRecord } from '../types';\nimport type { GitGovRecord } from '../types';\nimport type { ValidationResult } from './errors';\nimport { SchemaValidationCache } from '../schemas/schema_cache';\nimport { DetailedValidationError } from './common';\nimport { validateFullEmbeddedMetadataRecord } from './embedded_metadata_validator';\nimport { Schemas } from '../schemas';\n\n/**\n * Schema-based validation for FeedbackRecord payload\n */\nexport function validateFeedbackRecordSchema(\n data: unknown\n): [boolean, ValidateFunction[\"errors\"]] {\n const validator = SchemaValidationCache.getValidatorFromSchema(Schemas.FeedbackRecord);\n const isValid = validator(data);\n\n return [isValid, validator.errors];\n}\n\n/**\n * Type guard to check if data is a valid FeedbackRecord\n */\nexport function isFeedbackRecord(data: unknown): data is FeedbackRecord {\n const [isValid] = validateFeedbackRecordSchema(data);\n return isValid;\n}\n\n/**\n * Detailed validation with field-level error reporting\n */\nexport function validateFeedbackRecordDetailed(data: unknown): ValidationResult {\n const [isValid, errors] = validateFeedbackRecordSchema(data);\n\n if (!isValid && errors) {\n const formattedErrors = errors.map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n }));\n\n return {\n isValid: false,\n errors: formattedErrors\n };\n }\n\n return {\n isValid: true,\n errors: []\n };\n}\n\n/**\n * Full validation including checksum and signature verification\n */\nexport async function validateFullFeedbackRecord(\n record: GitGovRecord & { payload: FeedbackRecord },\n getPublicKey: (keyId: string) => Promise<string>\n): Promise<void> {\n // 1. Validate payload schema\n const [isValid, errors] = validateFeedbackRecordSchema(record.payload);\n if (!isValid) {\n const formattedErrors = (errors || []).map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n }));\n throw new DetailedValidationError('FeedbackRecord', formattedErrors);\n }\n\n // 2. Embedded Metadata Validation (header + wrapper)\n await validateFullEmbeddedMetadataRecord(record, getPublicKey);\n}\n","import type { FeedbackRecord } from '../types';\nimport { generateFeedbackId } from '../utils/id_generator';\nimport { validateFeedbackRecordDetailed } from '../validation/feedback_validator';\nimport { DetailedValidationError } from '../validation/common';\n\n/**\n * Creates a complete FeedbackRecord with validation\n * \n * @param payload - Partial FeedbackRecord payload\n * @returns Promise<FeedbackRecord> - The validated FeedbackRecord\n */\nexport async function createFeedbackRecord(payload: Partial<FeedbackRecord>): Promise<FeedbackRecord> {\n const timestamp = Math.floor(Date.now() / 1000);\n\n const feedback: FeedbackRecord = {\n id: payload.id || generateFeedbackId(payload.content || 'feedback', timestamp),\n entityType: payload.entityType || 'task',\n entityId: payload.entityId || '',\n type: payload.type || 'question',\n status: payload.status || (payload.type === 'assignment' ? 'resolved' : 'open'),\n content: payload.content || '',\n assignee: payload.assignee,\n resolvesFeedbackId: payload.resolvesFeedbackId,\n ...payload,\n } as FeedbackRecord;\n\n // Validate the complete feedback record\n const validation = validateFeedbackRecordDetailed(feedback);\n if (!validation.isValid) {\n throw new DetailedValidationError('FeedbackRecord', validation.errors);\n }\n\n return feedback;\n}\n\n","import { createExecutionRecord } from '../../factories/execution_factory';\nimport { RecordStore } from '../../store';\nimport { IdentityAdapter } from '../identity_adapter';\nimport type { ExecutionRecord } from '../../types';\nimport type { TaskRecord } from '../../types';\nimport type { IEventStream, ExecutionCreatedEvent } from '../../event_bus';\nimport type { GitGovRecord } from '../../types';\n\n/**\n * ExecutionAdapter Dependencies - Facade + Dependency Injection Pattern\n */\nexport interface ExecutionAdapterDependencies {\n // Data Layer (Protocols)\n executionStore: RecordStore<ExecutionRecord>;\n\n // Infrastructure Layer\n identity: IdentityAdapter;\n eventBus: IEventStream; // For emitting events\n\n // Optional: Task validation (graceful degradation)\n taskStore?: RecordStore<TaskRecord>;\n}\n\n/**\n * ExecutionAdapter Interface - The Chronicler of the System\n */\nexport interface IExecutionAdapter {\n /**\n * Records a new execution event.\n */\n create(payload: Partial<ExecutionRecord>, actorId: string): Promise<ExecutionRecord>;\n\n /**\n * Gets a specific ExecutionRecord by its ID.\n */\n getExecution(executionId: string): Promise<ExecutionRecord | null>;\n\n /**\n * Gets all ExecutionRecords for a specific Task.\n */\n getExecutionsByTask(taskId: string): Promise<ExecutionRecord[]>;\n\n /**\n * Gets all ExecutionRecords in the system.\n */\n getAllExecutions(): Promise<ExecutionRecord[]>;\n}\n\n/**\n * ExecutionAdapter - The Chronicler of the System\n * \n * Implements Facade + Dependency Injection Pattern for testeable and configurable orchestration.\n * Acts as Mediator between execution logging and data stores.\n */\nexport class ExecutionAdapter implements IExecutionAdapter {\n private executionStore: RecordStore<ExecutionRecord>;\n private identity: IdentityAdapter;\n private eventBus: IEventStream;\n private taskStore: RecordStore<TaskRecord> | undefined;\n\n constructor(dependencies: ExecutionAdapterDependencies) {\n this.executionStore = dependencies.executionStore;\n this.identity = dependencies.identity;\n this.eventBus = dependencies.eventBus;\n this.taskStore = dependencies.taskStore; // Graceful degradation\n }\n\n /**\n * [EARS-1] Records a new execution event to create an immutable audit log.\n * \n * Description: Records a new execution event to create an immutable audit log.\n * Implementation: Builds record with factory, signs with actorId, persists and emits event.\n * Usage: Invoked by `gitgov exec add` to register work done by actors/agents.\n * Returns: Complete and signed ExecutionRecord.\n */\n async create(payload: Partial<ExecutionRecord>, actorId: string): Promise<ExecutionRecord> {\n // Optional: Validate taskId exists (graceful degradation)\n if (this.taskStore && payload.taskId) {\n const taskExists = await this.taskStore.read(payload.taskId);\n if (!taskExists) {\n throw new Error(`RecordNotFoundError: Task not found: ${payload.taskId}`);\n }\n }\n\n try {\n // 1. Build the record with factory (factory validates all required fields)\n const validatedPayload = await createExecutionRecord(payload);\n\n // 2. Create unsigned record structure\n const unsignedRecord: GitGovRecord & { payload: ExecutionRecord } = {\n header: {\n version: '1.0',\n type: 'execution',\n payloadChecksum: 'will-be-calculated-by-signRecord',\n signatures: [{\n keyId: actorId,\n role: 'author',\n notes: 'Execution recorded',\n signature: 'placeholder',\n timestamp: Date.now()\n }]\n },\n payload: validatedPayload,\n };\n\n // 3. Sign the record\n const signedRecord = await this.identity.signRecord(unsignedRecord, actorId, 'author');\n\n // 4. Persist the record\n await this.executionStore.write(signedRecord as GitGovRecord & { payload: ExecutionRecord });\n\n // 5. Emit event - responsibility ends here\n this.eventBus.publish({\n type: 'execution.created',\n timestamp: Date.now(),\n source: 'execution_adapter',\n payload: {\n executionId: validatedPayload.id,\n taskId: validatedPayload.taskId,\n actorId,\n isFirstExecution: await this.isFirstExecutionForTask(validatedPayload.taskId)\n },\n } as ExecutionCreatedEvent);\n\n return validatedPayload;\n } catch (error) {\n // Factory will throw DetailedValidationError for schema violations\n // Re-throw as-is to preserve error type and details\n throw error;\n }\n }\n\n /**\n * [EARS-4] Gets a specific ExecutionRecord by its ID for query.\n * \n * Description: Gets a specific ExecutionRecord by its ID for query.\n * Implementation: Direct read from record store without modifications.\n * Usage: Invoked by `gitgov exec show` to display execution details.\n * Returns: ExecutionRecord found or null if it doesn't exist.\n */\n async getExecution(executionId: string): Promise<ExecutionRecord | null> {\n const record = await this.executionStore.read(executionId);\n return record ? record.payload : null;\n }\n\n /**\n * [EARS-6] Gets all ExecutionRecords associated with a specific Task.\n * \n * Description: Gets all ExecutionRecords associated with a specific Task.\n * Implementation: Reads all records and filters by matching taskId.\n * Usage: Invoked by `gitgov exec list` and MetricsAdapter for staleness calculations.\n * Returns: Array of ExecutionRecords filtered for the task.\n */\n async getExecutionsByTask(taskId: string): Promise<ExecutionRecord[]> {\n const ids = await this.executionStore.list();\n const executions: ExecutionRecord[] = [];\n\n for (const id of ids) {\n const record = await this.executionStore.read(id);\n if (record && record.payload.taskId === taskId) {\n executions.push(record.payload);\n }\n }\n\n return executions;\n }\n\n /**\n * [EARS-7] Gets all ExecutionRecords in the system for indexation.\n * \n * Description: Gets all ExecutionRecords in the system for complete indexation.\n * Implementation: Complete read from record store without filters.\n * Usage: Invoked by `gitgov exec list --all` and MetricsAdapter for general calculations.\n * Returns: Complete array of all ExecutionRecords.\n */\n async getAllExecutions(): Promise<ExecutionRecord[]> {\n const ids = await this.executionStore.list();\n const executions: ExecutionRecord[] = [];\n\n for (const id of ids) {\n const record = await this.executionStore.read(id);\n if (record) {\n executions.push(record.payload);\n }\n }\n\n return executions;\n }\n\n /**\n * Helper method to determine if this is the first execution for a task\n * Used for BacklogAdapter.handleExecutionCreated logic\n */\n private async isFirstExecutionForTask(taskId: string): Promise<boolean> {\n const executions = await this.getExecutionsByTask(taskId);\n return executions.length === 1; // Including the one we just created\n }\n}\n","import type { ValidateFunction, ErrorObject } from \"ajv\";\nimport type { ExecutionRecord } from '../types';\nimport type { GitGovRecord } from '../types';\nimport type { ValidationResult } from './errors';\nimport { SchemaValidationCache } from '../schemas/schema_cache';\nimport { DetailedValidationError } from './common';\nimport { validateFullEmbeddedMetadataRecord } from './embedded_metadata_validator';\nimport { Schemas } from '../schemas';\n\n/**\n * Schema-based validation for ExecutionRecord payload\n */\nexport function validateExecutionRecordSchema(\n data: unknown\n): [boolean, ValidateFunction[\"errors\"]] {\n const validator = SchemaValidationCache.getValidatorFromSchema(Schemas.ExecutionRecord);\n const isValid = validator(data);\n\n return [isValid, validator.errors];\n}\n\n/**\n * Type guard to check if data is a valid ExecutionRecord\n */\nexport function isExecutionRecord(data: unknown): data is ExecutionRecord {\n const [isValid] = validateExecutionRecordSchema(data);\n return isValid;\n}\n\n/**\n * Detailed validation with field-level error reporting\n */\nexport function validateExecutionRecordDetailed(data: unknown): ValidationResult {\n const [isValid, errors] = validateExecutionRecordSchema(data);\n\n if (!isValid && errors) {\n const formattedErrors = errors.map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n }));\n\n return {\n isValid: false,\n errors: formattedErrors\n };\n }\n\n return {\n isValid: true,\n errors: []\n };\n}\n\n/**\n * Full validation including checksum and signature verification\n */\nexport async function validateFullExecutionRecord(\n record: GitGovRecord & { payload: ExecutionRecord },\n getPublicKey: (keyId: string) => Promise<string>\n): Promise<void> {\n // 1. Validate payload schema\n const [isValid, errors] = validateExecutionRecordSchema(record.payload);\n if (!isValid) {\n const formattedErrors = (errors || []).map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n }));\n throw new DetailedValidationError('ExecutionRecord', formattedErrors);\n }\n\n // 2. Embedded Metadata Validation (header + wrapper)\n await validateFullEmbeddedMetadataRecord(record, getPublicKey);\n}\n","import type { ExecutionRecord } from '../types';\nimport { generateExecutionId } from '../utils/id_generator';\nimport { validateExecutionRecordDetailed } from '../validation/execution_validator';\nimport { DetailedValidationError } from '../validation/common';\n\n/**\n * Creates a complete ExecutionRecord with validation\n * \n * @param payload - Partial ExecutionRecord payload\n * @returns Promise<ExecutionRecord> - The validated ExecutionRecord\n */\nexport async function createExecutionRecord(payload: Partial<ExecutionRecord>): Promise<ExecutionRecord> {\n const timestamp = Math.floor(Date.now() / 1000);\n\n const execution: ExecutionRecord = {\n id: payload.id || generateExecutionId(payload.title || 'execution', timestamp),\n taskId: payload.taskId || '',\n result: payload.result || '',\n type: payload.type,\n title: payload.title,\n notes: payload.notes,\n references: payload.references,\n ...payload,\n } as ExecutionRecord;\n\n // Validate the complete execution record\n const validation = validateExecutionRecordDetailed(execution);\n if (!validation.isValid) {\n throw new DetailedValidationError('ExecutionRecord', validation.errors);\n }\n\n return execution;\n}\n\n","import { createChangelogRecord } from '../../factories/changelog_factory';\nimport { RecordStore } from '../../store';\nimport { IdentityAdapter } from '../identity_adapter';\nimport { generateChangelogId } from '../../utils/id_generator';\nimport type { ChangelogRecord } from '../../types';\nimport type { TaskRecord } from '../../types';\nimport type { CycleRecord } from '../../types';\nimport type { IEventStream, ChangelogCreatedEvent } from '../../event_bus';\nimport type { GitGovRecord } from '../../types';\n\n/**\n * Options for filtering and sorting changelog lists\n */\nexport interface ChangelogListOptions {\n tags?: string[]; // Filter by tags (changelogs with ANY of these tags)\n version?: string; // Filter by exact version\n limit?: number; // Limit number of results\n sortBy?: 'completedAt' | 'title'; // Sort field\n sortOrder?: 'asc' | 'desc'; // Sort direction\n}\n\n/**\n * ChangelogAdapter Dependencies - Facade + Dependency Injection Pattern\n */\nexport interface ChangelogAdapterDependencies {\n changelogStore: RecordStore<ChangelogRecord>;\n identity: IdentityAdapter;\n eventBus: IEventStream; // For emitting events\n // Optional: Multi-entity validation (graceful degradation)\n taskStore?: RecordStore<TaskRecord>; // For validating task entities\n cycleStore?: RecordStore<CycleRecord>; // For validating cycle entities\n}\n\n/**\n * ChangelogAdapter Interface - Release Notes & Deliverables Historian\n */\nexport interface IChangelogAdapter {\n /**\n * Records a deliverable/release note aggregating multiple tasks.\n */\n create(payload: Partial<ChangelogRecord>, actorId: string): Promise<ChangelogRecord>;\n\n /**\n * Gets a specific ChangelogRecord by its ID.\n */\n getChangelog(changelogId: string): Promise<ChangelogRecord | null>;\n\n /**\n * Gets all ChangelogRecords for a specific task.\n */\n getChangelogsByTask(taskId: string): Promise<ChangelogRecord[]>;\n\n /**\n * Gets all ChangelogRecords in the system with optional filtering.\n */\n getAllChangelogs(options?: ChangelogListOptions): Promise<ChangelogRecord[]>;\n\n /**\n * Gets recent ChangelogRecords ordered by completedAt.\n */\n getRecentChangelogs(limit: number): Promise<ChangelogRecord[]>;\n}\n\n/**\n * ChangelogAdapter - Release Notes & Deliverables Historian\n * \n * Protocol v2: Aggregates N tasks into 1 release note/deliverable.\n * Focus: Executive communication of delivered value.\n */\nexport class ChangelogAdapter implements IChangelogAdapter {\n private changelogStore: RecordStore<ChangelogRecord>;\n private identity: IdentityAdapter;\n private eventBus: IEventStream;\n private taskStore: RecordStore<TaskRecord> | undefined;\n private cycleStore: RecordStore<CycleRecord> | undefined;\n\n constructor(dependencies: ChangelogAdapterDependencies) {\n this.changelogStore = dependencies.changelogStore;\n this.identity = dependencies.identity;\n this.eventBus = dependencies.eventBus;\n this.taskStore = dependencies.taskStore; // Graceful degradation\n this.cycleStore = dependencies.cycleStore; // Graceful degradation\n }\n\n /**\n * [EARS-1] Records a deliverable/release note.\n * \n * Description: Aggregates multiple tasks into a single deliverable/release note.\n * Implementation: Validates required fields, builds record with factory, signs, persists and emits event.\n * Usage: Invoked by `gitgov changelog add` to document deliverables.\n * Returns: Complete and signed ChangelogRecord.\n */\n async create(payload: Partial<ChangelogRecord>, actorId: string): Promise<ChangelogRecord> {\n // Input validation\n if (!payload.title || payload.title.length < 10) {\n throw new Error('DetailedValidationError: title is required and must be at least 10 characters');\n }\n\n if (!payload.description || payload.description.length < 20) {\n throw new Error('DetailedValidationError: description is required and must be at least 20 characters');\n }\n\n if (!payload.relatedTasks || payload.relatedTasks.length === 0) {\n throw new Error('DetailedValidationError: relatedTasks is required and must contain at least one task ID');\n }\n\n // Optional: Validate that related tasks exist (graceful degradation)\n if (this.taskStore && payload.relatedTasks) {\n for (const taskId of payload.relatedTasks) {\n const taskExists = await this.taskStore.read(taskId);\n if (!taskExists) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n }\n }\n\n // Optional: Validate that related cycles exist (graceful degradation)\n if (this.cycleStore && payload.relatedCycles) {\n for (const cycleId of payload.relatedCycles) {\n const cycleExists = await this.cycleStore.read(cycleId);\n if (!cycleExists) {\n throw new Error(`RecordNotFoundError: Cycle not found: ${cycleId}`);\n }\n }\n }\n\n try {\n // 1. Generate ID if not provided (EARS-14)\n const timestamp = payload.completedAt || Math.floor(Date.now() / 1000);\n if (!payload.id) {\n payload.id = generateChangelogId(payload.title!, timestamp);\n }\n\n // 2. Build the record with factory\n const validatedPayload = await createChangelogRecord(payload);\n\n // 3. Create unsigned record structure\n const unsignedRecord: GitGovRecord & { payload: ChangelogRecord } = {\n header: {\n version: '1.0',\n type: 'changelog',\n payloadChecksum: 'will-be-calculated-by-signRecord',\n signatures: [{\n keyId: actorId,\n role: 'author',\n notes: 'Changelog entry created',\n signature: 'placeholder',\n timestamp: Date.now()\n }]\n },\n payload: validatedPayload,\n };\n\n // 3. Sign the record\n const signedRecord = await this.identity.signRecord(unsignedRecord, actorId, 'author');\n\n // 4. Persist the record\n await this.changelogStore.write(signedRecord as GitGovRecord & { payload: ChangelogRecord });\n\n // 5. Emit event\n this.eventBus.publish({\n type: 'changelog.created',\n timestamp: Date.now(),\n source: 'changelog_adapter',\n payload: {\n changelogId: validatedPayload.id,\n relatedTasks: validatedPayload.relatedTasks,\n title: validatedPayload.title,\n version: validatedPayload.version\n },\n } as ChangelogCreatedEvent);\n\n return validatedPayload;\n } catch (error) {\n if (error instanceof Error && error.message.includes('DetailedValidationError')) {\n throw error;\n }\n throw error;\n }\n }\n\n /**\n * [EARS-9] Gets a specific ChangelogRecord by its ID.\n */\n async getChangelog(changelogId: string): Promise<ChangelogRecord | null> {\n const record = await this.changelogStore.read(changelogId);\n return record ? record.payload : null;\n }\n\n /**\n * [EARS-11] Gets all ChangelogRecords that include a specific task.\n */\n async getChangelogsByTask(taskId: string): Promise<ChangelogRecord[]> {\n const ids = await this.changelogStore.list();\n const changelogs: ChangelogRecord[] = [];\n\n for (const id of ids) {\n const record = await this.changelogStore.read(id);\n if (record && record.payload.relatedTasks.includes(taskId)) {\n changelogs.push(record.payload);\n }\n }\n\n return changelogs;\n }\n\n /**\n * [EARS-11, EARS-12, EARS-13] Gets all ChangelogRecords with optional filtering and sorting.\n */\n async getAllChangelogs(options?: ChangelogListOptions): Promise<ChangelogRecord[]> {\n const ids = await this.changelogStore.list();\n let changelogs: ChangelogRecord[] = [];\n\n // Read all changelogs\n for (const id of ids) {\n const record = await this.changelogStore.read(id);\n if (record) {\n changelogs.push(record.payload);\n }\n }\n\n // [EARS-12] Filter by tags if provided\n if (options?.tags && options.tags.length > 0) {\n changelogs = changelogs.filter(changelog => {\n if (!changelog.tags) return false;\n // Return true if changelog has ANY of the requested tags\n return options.tags!.some(tag => changelog.tags!.includes(tag));\n });\n }\n\n // Filter by version if provided\n if (options?.version) {\n changelogs = changelogs.filter(changelog => changelog.version === options.version);\n }\n\n // [EARS-11] Sort by specified field (default: completedAt desc)\n const sortBy = options?.sortBy || 'completedAt';\n const sortOrder = options?.sortOrder || 'desc';\n\n changelogs.sort((a, b) => {\n let compareValue = 0;\n\n if (sortBy === 'completedAt') {\n compareValue = a.completedAt - b.completedAt;\n } else if (sortBy === 'title') {\n compareValue = a.title.localeCompare(b.title);\n }\n\n return sortOrder === 'asc' ? compareValue : -compareValue;\n });\n\n // [EARS-13] Apply limit if provided\n if (options?.limit && options.limit > 0) {\n changelogs = changelogs.slice(0, options.limit);\n }\n\n return changelogs;\n }\n\n /**\n * [EARS-13] Gets recent ChangelogRecords ordered by completedAt.\n */\n async getRecentChangelogs(limit: number): Promise<ChangelogRecord[]> {\n const allChangelogs = await this.getAllChangelogs();\n\n // Sort by completedAt descending (most recent first)\n const sortedChangelogs = allChangelogs.sort((a, b) => b.completedAt - a.completedAt);\n\n // Apply limit\n return sortedChangelogs.slice(0, limit);\n }\n\n /**\n * Legacy method for backwards compatibility - maps to getChangelogsByTask\n * @deprecated Use getChangelogsByTask instead\n */\n async getChangelogsByEntity(entityId: string, _entityType?: string): Promise<ChangelogRecord[]> {\n return this.getChangelogsByTask(entityId);\n }\n}\n","import type { ValidateFunction, ErrorObject } from \"ajv\";\nimport type { ChangelogRecord } from '../types';\nimport type { GitGovRecord } from '../types';\nimport type { ValidationResult } from './errors';\nimport { SchemaValidationCache } from '../schemas/schema_cache';\nimport { DetailedValidationError } from './common';\nimport { validateFullEmbeddedMetadataRecord } from './embedded_metadata_validator';\nimport { Schemas } from '../schemas';\n\n/**\n * Schema-based validation for ChangelogRecord payload\n */\nexport function validateChangelogRecordSchema(\n data: unknown\n): [boolean, ValidateFunction[\"errors\"]] {\n const validator = SchemaValidationCache.getValidatorFromSchema(Schemas.ChangelogRecord);\n const isValid = validator(data);\n\n return [isValid, validator.errors];\n}\n\n/**\n * Type guard to check if data is a valid ChangelogRecord\n */\nexport function isChangelogRecord(data: unknown): data is ChangelogRecord {\n const [isValid] = validateChangelogRecordSchema(data);\n return isValid;\n}\n\n/**\n * Detailed validation with field-level error reporting\n */\nexport function validateChangelogRecordDetailed(data: unknown): ValidationResult {\n const [isValid, errors] = validateChangelogRecordSchema(data);\n\n if (!isValid && errors) {\n const formattedErrors = errors.map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n }));\n\n return {\n isValid: false,\n errors: formattedErrors\n };\n }\n\n return {\n isValid: true,\n errors: []\n };\n}\n\n/**\n * Full validation including checksum and signature verification\n */\nexport async function validateFullChangelogRecord(\n record: GitGovRecord & { payload: ChangelogRecord },\n getPublicKey: (keyId: string) => Promise<string>\n): Promise<void> {\n // 1. Validate payload schema\n const [isValid, errors] = validateChangelogRecordSchema(record.payload);\n if (!isValid) {\n const formattedErrors = (errors || []).map((error: ErrorObject) => ({\n field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',\n message: error.message || 'Unknown validation error',\n value: error.data\n }));\n throw new DetailedValidationError('ChangelogRecord', formattedErrors);\n }\n\n // 2. Embedded Metadata Validation (header + wrapper)\n await validateFullEmbeddedMetadataRecord(record, getPublicKey);\n}\n","import type { ChangelogRecord } from '../types';\nimport { validateChangelogRecordDetailed } from '../validation/changelog_validator';\nimport { DetailedValidationError } from '../validation/common';\n\n/**\n * Creates a complete ChangelogRecord with validation (Protocol v2)\n * \n * @param payload - Partial ChangelogRecord payload\n * @returns Promise<ChangelogRecord> - The validated ChangelogRecord\n */\nexport async function createChangelogRecord(payload: Partial<ChangelogRecord>): Promise<ChangelogRecord> {\n const timestamp = Math.floor(Date.now() / 1000);\n\n // Build changelog with required fields\n const changelog: ChangelogRecord = {\n // Required fields\n id: payload.id || '',\n title: payload.title || '',\n description: payload.description || '',\n relatedTasks: (payload.relatedTasks || []) as [string, ...string[]],\n completedAt: payload.completedAt || timestamp,\n\n // Optional fields (only include if provided)\n ...(payload.relatedCycles && { relatedCycles: payload.relatedCycles }),\n ...(payload.relatedExecutions && { relatedExecutions: payload.relatedExecutions }),\n ...(payload.version && { version: payload.version }),\n ...(payload.tags && { tags: payload.tags }),\n ...(payload.commits && { commits: payload.commits }),\n ...(payload.files && { files: payload.files }),\n ...(payload.notes && { notes: payload.notes })\n };\n\n // Validate the complete changelog record\n const validation = validateChangelogRecordDetailed(changelog);\n if (!validation.isValid) {\n throw new DetailedValidationError('ChangelogRecord', validation.errors);\n }\n\n return changelog;\n}\n\n","import { RecordStore } from '../../store';\nimport type { TaskRecord } from '../../types';\nimport type { CycleRecord } from '../../types';\nimport type { FeedbackRecord } from '../../types';\nimport type { ExecutionRecord } from '../../types';\nimport type { ActorRecord } from '../../types';\n\n/**\n * MetricsAdapter Dependencies - Facade + Dependency Injection Pattern\n */\nexport type MetricsAdapterDependencies = {\n // Data Layer (Read-Only) - MVP Critical\n taskStore: RecordStore<TaskRecord>;\n cycleStore: RecordStore<CycleRecord>;\n\n // Optional: Additional stores for enhanced metrics (graceful degradation)\n feedbackStore?: RecordStore<FeedbackRecord>;\n executionStore?: RecordStore<ExecutionRecord>;\n actorStore?: RecordStore<ActorRecord>;\n\n // Optional: Platform API for Premium metrics (Tier 4)\n platformApi?: IPlatformApi;\n}\n\n// Platform API interface (Tier 4 - Future)\ninterface IPlatformApi {\n getTokenConsumption(timeframe: string): Promise<TokenConsumption[]>;\n}\n\ntype TokenConsumption = {\n agentId: string;\n tokens: number;\n cost: number;\n timestamp: number;\n}\n\n// Return types specific to the adapter\nexport type SystemStatus = {\n tasks: {\n total: number;\n byStatus: Record<string, number>;\n byPriority: Record<string, number>;\n };\n cycles: {\n total: number;\n active: number;\n completed: number;\n };\n health: {\n overallScore: number; // 0-100\n blockedTasks: number;\n staleTasks: number;\n };\n};\n\nexport type TaskHealthReport = {\n taskId: string;\n healthScore: number; // 0-100\n timeInCurrentStage: number; // dĆas\n stalenessIndex: number; // 0-10\n blockingFeedbacks: number;\n lastActivity: number; // timestamp\n recommendations: string[];\n};\n\nexport type ProductivityMetrics = {\n throughput: number; // tareas/semana\n leadTime: number; // dĆas promedio\n cycleTime: number; // dĆas promedio\n tasksCompleted7d: number; // count\n averageCompletionTime: number; // dĆas\n};\n\nexport type CollaborationMetrics = {\n activeAgents: number; // count\n totalAgents: number; // count\n agentUtilization: number; // percentage\n humanAgentRatio: number; // ratio\n collaborationIndex: number; // 0-100\n};\n\n/**\n * MetricsAdapter Interface - The System Analyst\n */\nexport interface IMetricsAdapter {\n // Public API methods\n getSystemStatus(): Promise<SystemStatus>;\n getTaskHealth(taskId: string): Promise<TaskHealthReport>;\n getProductivityMetrics(): Promise<ProductivityMetrics>;\n getCollaborationMetrics(): Promise<CollaborationMetrics>;\n\n // Pure calculation functions - Tier 1 (MVP Critical)\n calculateTimeInCurrentStage(task: TaskRecord): number;\n calculateStalenessIndex(tasks: TaskRecord[]): number;\n calculateBlockingFeedbackAge(feedback: FeedbackRecord[]): number;\n calculateHealth(tasks: TaskRecord[]): number;\n calculateBacklogDistribution(tasks: TaskRecord[]): Record<string, number>;\n calculateTasksCreatedToday(tasks: TaskRecord[]): number;\n\n // Pure calculation functions - Tier 2 (Important)\n calculateThroughput(tasks: TaskRecord[]): number;\n calculateLeadTime(tasks: TaskRecord[]): number;\n calculateCycleTime(tasks: TaskRecord[]): number;\n calculateActiveAgents(actors: ActorRecord[], executions: ExecutionRecord[]): number;\n}\n\n/**\n * MetricsAdapter - The System Analyst\n * \n * Implements Facade + Dependency Injection Pattern for testeable and configurable orchestration.\n * Acts as Mediator between analytics system and multi-store data sources.\n */\nexport class MetricsAdapter implements IMetricsAdapter {\n private taskStore: RecordStore<TaskRecord>;\n private cycleStore: RecordStore<CycleRecord>;\n private feedbackStore: RecordStore<FeedbackRecord> | undefined;\n private executionStore: RecordStore<ExecutionRecord> | undefined;\n private actorStore: RecordStore<ActorRecord> | undefined;\n private platformApi: IPlatformApi | undefined;\n\n constructor(dependencies: MetricsAdapterDependencies) {\n this.taskStore = dependencies.taskStore;\n this.cycleStore = dependencies.cycleStore;\n this.feedbackStore = dependencies.feedbackStore; // Graceful degradation\n this.executionStore = dependencies.executionStore; // Graceful degradation\n this.actorStore = dependencies.actorStore; // Graceful degradation\n this.platformApi = dependencies.platformApi; // Graceful degradation\n }\n\n // ===== PUBLIC API METHODS =====\n\n /**\n * [EARS-1] Gets aggregated system status using Tier 1 metrics.\n */\n async getSystemStatus(): Promise<SystemStatus> {\n // Read all tasks and cycles\n const taskIds = await this.taskStore.list();\n const tasks: TaskRecord[] = [];\n for (const id of taskIds) {\n const record = await this.taskStore.read(id);\n if (record) tasks.push(record.payload);\n }\n\n const cycleIds = await this.cycleStore.list();\n const cycles: CycleRecord[] = [];\n for (const id of cycleIds) {\n const record = await this.cycleStore.read(id);\n if (record) cycles.push(record.payload);\n }\n\n // Calculate Tier 1 metrics\n const health = this.calculateHealth(tasks);\n\n // Count blocked and stale tasks\n const blockedTasks = tasks.filter(task => task.status === 'paused').length;\n const staleTasks = tasks.filter(task => {\n const staleness = this.calculateTimeInCurrentStage(task);\n return staleness > 7; // More than 7 days in current stage\n }).length;\n\n return {\n tasks: {\n total: tasks.length,\n byStatus: this.countTasksByStatus(tasks),\n byPriority: this.countTasksByPriority(tasks)\n },\n cycles: {\n total: cycles.length,\n active: cycles.filter(c => c.status === 'active').length,\n completed: cycles.filter(c => c.status === 'completed').length\n },\n health: {\n overallScore: health,\n blockedTasks,\n staleTasks\n }\n };\n }\n\n /**\n * [EARS-2] Gets task health analysis using Tier 1 metrics.\n */\n async getTaskHealth(taskId: string): Promise<TaskHealthReport> {\n // EARS-3: Validate task exists\n const taskRecord = await this.taskStore.read(taskId);\n if (!taskRecord) {\n throw new Error(`RecordNotFoundError: Task not found: ${taskId}`);\n }\n\n const task = taskRecord.payload;\n\n // Read related data for analysis\n let feedbacks: FeedbackRecord[] = [];\n let allFeedbacks: FeedbackRecord[] = []; // For checking resolutions (immutable pattern)\n let executions: ExecutionRecord[] = [];\n\n if (this.feedbackStore) {\n const feedbackIds = await this.feedbackStore.list();\n for (const id of feedbackIds) {\n const record = await this.feedbackStore.read(id);\n if (record) {\n allFeedbacks.push(record.payload);\n if (record.payload.entityId === taskId) {\n feedbacks.push(record.payload);\n }\n }\n }\n }\n\n if (this.executionStore) {\n const executionIds = await this.executionStore.list();\n for (const id of executionIds) {\n const record = await this.executionStore.read(id);\n if (record && record.payload.taskId === taskId) {\n executions.push(record.payload);\n }\n }\n }\n\n // Calculate Tier 1 metrics\n const timeInCurrentStage = this.calculateTimeInCurrentStage(task);\n const stalenessIndex = this.calculateStalenessIndex([task]);\n\n // [EARS-32/33] Count only UNRESOLVED blocking feedbacks (immutable pattern)\n // A blocking feedback is unresolved if no resolution feedback exists for it\n const blockingFeedbacks = feedbacks.filter(f => {\n if (f.type !== 'blocking' || f.status !== 'open') return false;\n\n // Check if this blocking feedback has been resolved (via another feedback)\n const hasResolution = allFeedbacks.some(resolution =>\n resolution.entityType === 'feedback' &&\n resolution.resolvesFeedbackId === f.id &&\n resolution.status === 'resolved'\n );\n\n return !hasResolution; // Only count if NOT resolved\n }).length;\n const lastActivity = executions.length > 0 ? Math.max(...executions.map(e => this.getTimestampFromId(e.id))) : this.getTimestampFromId(task.id);\n\n // Generate recommendations\n const recommendations: string[] = [];\n if (timeInCurrentStage > 7) recommendations.push('Task has been stagnant for over 7 days');\n if (blockingFeedbacks > 0) recommendations.push(`${blockingFeedbacks} blocking feedback(s) need attention`);\n if (stalenessIndex > 5) recommendations.push('No recent execution activity detected');\n\n // Calculate health score (0-100)\n let healthScore = 100;\n if (timeInCurrentStage > 7) healthScore -= 30;\n if (blockingFeedbacks > 0) healthScore -= 40;\n if (stalenessIndex > 5) healthScore -= 20;\n healthScore = Math.max(0, healthScore);\n\n return {\n taskId,\n healthScore,\n timeInCurrentStage,\n stalenessIndex,\n blockingFeedbacks,\n lastActivity,\n recommendations\n };\n }\n\n /**\n * [EARS-21] Gets productivity metrics using Tier 2 calculations.\n */\n async getProductivityMetrics(): Promise<ProductivityMetrics> {\n // Read all tasks\n const taskIds = await this.taskStore.list();\n const tasks: TaskRecord[] = [];\n for (const id of taskIds) {\n const record = await this.taskStore.read(id);\n if (record) tasks.push(record.payload);\n }\n\n // Calculate Tier 2 metrics\n const throughput = this.calculateThroughput(tasks);\n const leadTime = this.calculateLeadTime(tasks);\n const cycleTime = this.calculateCycleTime(tasks);\n const tasksCompleted7d = tasks.filter(task => {\n if (task.status !== 'done') return false;\n const completedTime = this.getTimestampFromId(task.id);\n const sevenDaysAgo = Math.floor(Date.now() / 1000) - (7 * 24 * 60 * 60);\n return completedTime >= sevenDaysAgo;\n }).length;\n\n return {\n throughput,\n leadTime,\n cycleTime,\n tasksCompleted7d,\n averageCompletionTime: leadTime // Alias for leadTime\n };\n }\n\n /**\n * [EARS-22] Gets collaboration metrics with agent activity analysis.\n */\n async getCollaborationMetrics(): Promise<CollaborationMetrics> {\n // EARS-24: Graceful degradation if stores not available\n if (!this.actorStore || !this.executionStore) {\n return {\n activeAgents: 0,\n totalAgents: 0,\n agentUtilization: 0,\n humanAgentRatio: 0,\n collaborationIndex: 0\n };\n }\n\n // Read actors and executions\n const actorIds = await this.actorStore.list();\n const actors: ActorRecord[] = [];\n for (const id of actorIds) {\n const record = await this.actorStore.read(id);\n if (record) actors.push(record.payload);\n }\n\n const executionIds = await this.executionStore.list();\n const executions: ExecutionRecord[] = [];\n for (const id of executionIds) {\n const record = await this.executionStore.read(id);\n if (record) executions.push(record.payload);\n }\n\n // Calculate Tier 2 metrics\n const activeAgents = this.calculateActiveAgents(actors, executions);\n const totalAgents = actors.filter(actor => actor.type === 'agent').length;\n const totalHumans = actors.filter(actor => actor.type === 'human').length;\n const agentUtilization = totalAgents > 0 ? (activeAgents / totalAgents) * 100 : 0;\n const humanAgentRatio = totalHumans > 0 ? totalAgents / totalHumans : 0;\n const collaborationIndex = Math.min(100, (activeAgents * 10) + (agentUtilization / 2));\n\n return {\n activeAgents,\n totalAgents,\n agentUtilization,\n humanAgentRatio,\n collaborationIndex\n };\n }\n\n // ===== TIER 1: PURE CALCULATION FUNCTIONS (MVP CRITICAL) =====\n\n /**\n * [EARS-5] Calculates exact days since last state change.\n */\n calculateTimeInCurrentStage(task: TaskRecord): number {\n try {\n // EARS-25: Use creation timestamp as fallback if no signatures\n const currentTime = Math.floor(Date.now() / 1000);\n const taskCreationTime = this.getTimestampFromId(task.id);\n\n // TODO: In a complete implementation, we would look at signatures to find last state change\n // For MVP, we use creation time as approximation\n const lastStateChange = taskCreationTime;\n\n const diffSeconds = currentTime - lastStateChange;\n const diffDays = diffSeconds / (24 * 60 * 60);\n\n return Math.max(0, diffDays);\n } catch (error) {\n // EARS-28: Validate timestamps\n throw new Error(`InvalidDataError: Invalid timestamp data for task ${task.id}`);\n }\n }\n\n /**\n * [EARS-6] Calculates days since last ExecutionRecord.\n */\n calculateStalenessIndex(tasks: TaskRecord[]): number {\n // EARS-13: Graceful degradation without executionStore\n if (!this.executionStore) {\n return 0;\n }\n\n // EARS-11: Validate input\n if (!Array.isArray(tasks)) {\n throw new Error('InvalidDataError: tasks must be an array');\n }\n\n // EARS-12: Handle empty datasets\n if (tasks.length === 0) {\n return 0;\n }\n\n try {\n // For MVP, calculate based on task creation time\n // In complete implementation, would check actual ExecutionRecords\n const currentTime = Math.floor(Date.now() / 1000);\n const staleDays = tasks.map(task => {\n const taskTime = this.getTimestampFromId(task.id);\n return (currentTime - taskTime) / (24 * 60 * 60);\n });\n\n return Math.max(0, Math.max(...staleDays));\n } catch (error) {\n throw new Error('InvalidDataError: Invalid data in staleness calculation');\n }\n }\n\n /**\n * [EARS-7] Calculates days of oldest active blocking feedback.\n */\n calculateBlockingFeedbackAge(feedback: FeedbackRecord[]): number {\n // EARS-14: Graceful degradation without feedbackStore\n if (!this.feedbackStore) {\n return 0;\n }\n\n // EARS-11: Validate input\n if (!Array.isArray(feedback)) {\n throw new Error('InvalidDataError: feedback must be an array');\n }\n\n // Filter blocking and open feedbacks\n const blockingFeedbacks = feedback.filter(f => f.type === 'blocking' && f.status === 'open');\n\n // EARS-12: Handle empty datasets\n if (blockingFeedbacks.length === 0) {\n return 0;\n }\n\n try {\n const currentTime = Math.floor(Date.now() / 1000);\n const ages = blockingFeedbacks.map(f => {\n const feedbackTime = this.getTimestampFromId(f.id);\n return (currentTime - feedbackTime) / (24 * 60 * 60);\n });\n\n return Math.max(...ages);\n } catch (error) {\n throw new Error('InvalidDataError: Invalid timestamp in blocking feedback calculation');\n }\n }\n\n /**\n * [EARS-8] Calculates health percentage using improved protocol formula.\n */\n calculateHealth(tasks: TaskRecord[]): number {\n // EARS-11: Validate input\n if (!Array.isArray(tasks)) {\n throw new Error('InvalidDataError: tasks must be an array');\n }\n\n // EARS-12: Handle empty datasets\n if (tasks.length === 0) {\n return 0;\n }\n\n try {\n // Count tasks by status\n const activeTasks = tasks.filter(task => task.status === 'active').length;\n const doneTasks = tasks.filter(task => task.status === 'done').length;\n const archivedTasks = tasks.filter(task => task.status === 'archived').length;\n const readyTasks = tasks.filter(task => task.status === 'ready').length;\n const reviewTasks = tasks.filter(task => task.status === 'review').length;\n const pausedTasks = tasks.filter(task => task.status === 'paused').length;\n const draftTasks = tasks.filter(task => task.status === 'draft').length;\n\n // Calculate health based on workflow progress and blockers\n // Healthy tasks: done (100%), archived (100%), active (80%), ready (60%), review (40%)\n // Neutral tasks: draft (20%)\n // Problematic tasks: paused (0%)\n const healthyScore = (doneTasks * 100) + (archivedTasks * 100) + (activeTasks * 80) + (readyTasks * 60) + (reviewTasks * 40) + (draftTasks * 20) + (pausedTasks * 0);\n\n const maxPossibleScore = tasks.length * 100;\n\n if (maxPossibleScore === 0) {\n return 0;\n }\n\n return Math.round((healthyScore / maxPossibleScore) * 100);\n } catch (error) {\n throw new Error('InvalidDataError: Invalid data in health calculation');\n }\n }\n\n /**\n * [EARS-9] Returns status distribution with percentages.\n */\n calculateBacklogDistribution(tasks: TaskRecord[]): Record<string, number> {\n // EARS-11: Validate input\n if (!Array.isArray(tasks)) {\n throw new Error('InvalidDataError: tasks must be an array');\n }\n\n // EARS-12: Handle empty datasets\n if (tasks.length === 0) {\n return {};\n }\n\n const validStatuses = ['draft', 'review', 'ready', 'active', 'done', 'archived', 'paused'];\n const distribution: Record<string, number> = {};\n\n // EARS-29: Ignore tasks with invalid status\n const validTasks = tasks.filter(task => validStatuses.includes(task.status));\n\n // EARS-30: Handle division by zero\n if (validTasks.length === 0) {\n return {};\n }\n\n for (const status of validStatuses) {\n const count = validTasks.filter(task => task.status === status).length;\n distribution[status] = (count / validTasks.length) * 100;\n }\n\n return distribution;\n }\n\n /**\n * [EARS-10] Counts tasks created in last 24 hours.\n */\n calculateTasksCreatedToday(tasks: TaskRecord[]): number {\n // EARS-11: Validate input\n if (!Array.isArray(tasks)) {\n throw new Error('InvalidDataError: tasks must be an array');\n }\n\n try {\n const currentTime = Math.floor(Date.now() / 1000);\n const twentyFourHoursAgo = currentTime - (24 * 60 * 60);\n\n return tasks.filter(task => {\n const creationTime = this.getTimestampFromId(task.id);\n return creationTime >= twentyFourHoursAgo;\n }).length;\n } catch (error) {\n throw new Error('InvalidDataError: Invalid timestamp in tasks created today calculation');\n }\n }\n\n // ===== TIER 2: PURE CALCULATION FUNCTIONS (IMPORTANT) =====\n\n /**\n * [EARS-17] Counts tasks moved to 'done' in last 7 days.\n */\n calculateThroughput(tasks: TaskRecord[]): number {\n // EARS-11: Validate input\n if (!Array.isArray(tasks)) {\n throw new Error('InvalidDataError: tasks must be an array');\n }\n\n try {\n const currentTime = Math.floor(Date.now() / 1000);\n const sevenDaysAgo = currentTime - (7 * 24 * 60 * 60);\n\n return tasks.filter(task => {\n if (task.status !== 'done') return false;\n // For MVP, use creation time as approximation of completion time\n const completionTime = this.getTimestampFromId(task.id);\n return completionTime >= sevenDaysAgo;\n }).length;\n } catch (error) {\n throw new Error('InvalidDataError: Invalid data in throughput calculation');\n }\n }\n\n /**\n * [EARS-18] Calculates average done-draft time for lead time.\n */\n calculateLeadTime(tasks: TaskRecord[]): number {\n // EARS-11: Validate input\n if (!Array.isArray(tasks)) {\n throw new Error('InvalidDataError: tasks must be an array');\n }\n\n // EARS-26: Filter only completed tasks\n const completedTasks = tasks.filter(task => task.status === 'done');\n\n // EARS-30: Handle division by zero\n if (completedTasks.length === 0) {\n return 0;\n }\n\n try {\n // For MVP, calculate based on creation time\n // In complete implementation, would use actual state change timestamps\n const currentTime = Math.floor(Date.now() / 1000);\n const leadTimes = completedTasks.map(task => {\n const creationTime = this.getTimestampFromId(task.id);\n return (currentTime - creationTime) / (24 * 60 * 60); // Convert to days\n });\n\n return leadTimes.reduce((sum, time) => sum + time, 0) / leadTimes.length;\n } catch (error) {\n throw new Error('InvalidDataError: Invalid timestamp in lead time calculation');\n }\n }\n\n /**\n * [EARS-19] Calculates average done-active time for cycle time.\n */\n calculateCycleTime(tasks: TaskRecord[]): number {\n // EARS-11: Validate input\n if (!Array.isArray(tasks)) {\n throw new Error('InvalidDataError: tasks must be an array');\n }\n\n // Filter completed tasks that were active\n const activeTasks = tasks.filter(task => task.status === 'done');\n\n // EARS-27: Return 0 for tasks that were never active\n if (activeTasks.length === 0) {\n return 0;\n }\n\n try {\n // For MVP, use approximation based on creation time\n // In complete implementation, would track actual active ā done transitions\n const cycleTimes = activeTasks.map(task => {\n // Approximate cycle time as 30% of total time (active phase)\n const creationTime = this.getTimestampFromId(task.id);\n const currentTime = Math.floor(Date.now() / 1000);\n const totalTime = (currentTime - creationTime) / (24 * 60 * 60);\n return totalTime * 0.3; // Approximate active time\n });\n\n return cycleTimes.reduce((sum, time) => sum + time, 0) / cycleTimes.length;\n } catch (error) {\n throw new Error('InvalidDataError: Invalid data in cycle time calculation');\n }\n }\n\n /**\n * [EARS-20] Counts unique agents with executions in 24h.\n */\n calculateActiveAgents(actors: ActorRecord[], executions: ExecutionRecord[]): number {\n // EARS-11: Validate input\n if (!Array.isArray(actors) || !Array.isArray(executions)) {\n throw new Error('InvalidDataError: actors and executions must be arrays');\n }\n\n try {\n const currentTime = Math.floor(Date.now() / 1000);\n const twentyFourHoursAgo = currentTime - (24 * 60 * 60);\n\n // Get recent executions\n const recentExecutions = executions.filter(execution => {\n const executionTime = this.getTimestampFromId(execution.id);\n return executionTime >= twentyFourHoursAgo;\n });\n\n // Get unique agent IDs from recent executions\n const activeAgentIds = new Set<string>();\n\n if (recentExecutions.length > 0) {\n // Cross-reference executions with agent actors to find active agents\n const agentActors = actors.filter(actor => actor.type === 'agent');\n for (const agent of agentActors) {\n // In a complete implementation, we would track execution authorship\n // For now, if there are recent executions and agent actors, count them as active\n activeAgentIds.add(agent.id);\n }\n }\n\n return activeAgentIds.size;\n } catch (error) {\n throw new Error('InvalidDataError: Invalid data in active agents calculation');\n }\n }\n\n // ===== HELPER METHODS =====\n\n /**\n * Extracts timestamp from ID (format: {timestamp}-{type}-{slug})\n */\n private getTimestampFromId(id: string): number {\n try {\n const parts = id.split('-');\n const timestamp = parseInt(parts[0] || '0', 10);\n\n // EARS-28: Validate timestamps\n if (isNaN(timestamp) || timestamp <= 0) {\n throw new Error(`Invalid timestamp in ID: ${id}`);\n }\n\n return timestamp;\n } catch (error) {\n throw new Error(`InvalidDataError: Cannot extract timestamp from ID: ${id}`);\n }\n }\n\n /**\n * Counts tasks by status\n */\n private countTasksByStatus(tasks: TaskRecord[]): Record<string, number> {\n const counts: Record<string, number> = {};\n\n for (const task of tasks) {\n const status = task.status;\n counts[status] = (counts[status] || 0) + 1;\n }\n\n return counts;\n }\n\n /**\n * Counts tasks by priority\n */\n private countTasksByPriority(tasks: TaskRecord[]): Record<string, number> {\n const counts: Record<string, number> = {};\n\n for (const task of tasks) {\n const priority = task.priority;\n counts[priority] = (counts[priority] || 0) + 1;\n }\n\n return counts;\n }\n\n // ===== TIER 3-4: NOT IMPLEMENTED (FUTURE) =====\n\n /**\n * [EARS-15] Throws NotImplementedError for Tier 3 functions.\n */\n calculateQuality(_tasks: TaskRecord[]): number {\n throw new Error('NotImplementedError: Tier 3 metrics not implemented yet');\n }\n\n calculateReworkRate(_tasks: TaskRecord[]): number {\n throw new Error('NotImplementedError: Tier 3 metrics not implemented yet');\n }\n\n calculateCompletionRate(_tasks: TaskRecord[]): number {\n throw new Error('NotImplementedError: Tier 3 metrics not implemented yet');\n }\n\n calculateAuditScoreDistribution(_tasks: TaskRecord[]): Record<string, number> {\n throw new Error('NotImplementedError: Tier 3 metrics not implemented yet');\n }\n\n calculateEpicPromotionRate(_tasks: TaskRecord[]): number {\n throw new Error('NotImplementedError: Tier 3 metrics not implemented yet');\n }\n\n calculateTaskRefinementRate(_tasks: TaskRecord[]): number {\n throw new Error('NotImplementedError: Tier 3 metrics not implemented yet');\n }\n\n calculatePlanningAccuracy(_tasks: TaskRecord[]): number {\n throw new Error('NotImplementedError: Tier 3 metrics not implemented yet');\n }\n\n calculateDependencyDiscoveryRate(_tasks: TaskRecord[]): number {\n throw new Error('NotImplementedError: Tier 3 metrics not implemented yet');\n }\n\n /**\n * [EARS-16] Returns null for Premium metrics without Platform API.\n */\n calculateCostBurnRate(_consumption: TokenConsumption[]): number {\n if (!this.platformApi) {\n console.warn('Platform API not available for premium metrics');\n return 0;\n }\n throw new Error('NotImplementedError: Tier 4 premium metrics not implemented yet');\n }\n\n calculateTokenConsumption(_consumption: TokenConsumption[]): number {\n if (!this.platformApi) {\n console.warn('Platform API not available for premium metrics');\n return 0;\n }\n throw new Error('NotImplementedError: Tier 4 premium metrics not implemented yet');\n }\n\n calculateTokenConsumptionByAgent(_consumption: TokenConsumption[]): Record<string, number> {\n if (!this.platformApi) {\n console.warn('Platform API not available for premium metrics');\n return {};\n }\n throw new Error('NotImplementedError: Tier 4 premium metrics not implemented yet');\n }\n\n calculateAiAccuracyRate(_tasks: TaskRecord[], _feedback: FeedbackRecord[]): number {\n if (!this.platformApi) {\n console.warn('Platform API not available for premium metrics');\n return 0;\n }\n throw new Error('NotImplementedError: Tier 4 premium metrics not implemented yet');\n }\n\n calculateAgentExecutionTime(_executions: ExecutionRecord[]): number {\n if (!this.platformApi) {\n console.warn('Platform API not available for premium metrics');\n return 0;\n }\n throw new Error('NotImplementedError: Tier 4 premium metrics not implemented yet');\n }\n}\n","import { promises as fs } from 'fs';\nimport * as fsSync from 'fs';\nimport * as path from 'path';\nimport { RecordStore } from '../../store';\nimport { MetricsAdapter } from '../metrics_adapter';\nimport type { TaskRecord } from '../../types';\nimport type { CycleRecord } from '../../types';\nimport type { FeedbackRecord } from '../../types';\nimport type { ExecutionRecord } from '../../types';\nimport type { ChangelogRecord } from '../../types';\nimport type { ActorRecord } from '../../types';\nimport type {\n GitGovTaskRecord,\n GitGovCycleRecord,\n GitGovFeedbackRecord,\n GitGovExecutionRecord,\n GitGovChangelogRecord,\n GitGovActorRecord\n} from '../../types';\nimport type { SystemStatus, ProductivityMetrics, CollaborationMetrics } from '../metrics_adapter';\nimport type { ActivityEvent } from '../../event_bus';\n\n/**\n * Collection of all records with full GitGov metadata (headers + payloads).\n * This allows access to signatures, checksums, and other metadata for enrichment.\n * \n * @see GitGovTaskRecord - Full record type with header.signatures for author/lastModifier extraction\n */\nexport type AllRecords = {\n tasks: GitGovTaskRecord[];\n cycles: GitGovCycleRecord[];\n feedback: GitGovFeedbackRecord[];\n executions: GitGovExecutionRecord[];\n changelogs: GitGovChangelogRecord[];\n actors: GitGovActorRecord[];\n};\n\n/**\n * Enhanced Task Record with calculated activity metadata\n * Used by Dashboard for intelligent sorting and display\n */\nexport type EnrichedTaskRecord = TaskRecord & {\n lastUpdated: number; // Unix timestamp of most recent activity\n lastActivityType: 'task_modified' | 'feedback_received' | 'execution_added' | 'changelog_created' | 'task_created';\n recentActivity?: string; // Human-readable description of recent activity\n};\n\n/**\n * IndexerAdapter Dependencies - Facade + Dependency Injection Pattern\n */\nexport type IndexerAdapterDependencies = {\n // Core calculation engine (CRITICAL)\n metricsAdapter: MetricsAdapter;\n\n // Data stores (read-only)\n taskStore: RecordStore<TaskRecord>;\n cycleStore: RecordStore<CycleRecord>;\n feedbackStore?: RecordStore<FeedbackRecord>;\n executionStore?: RecordStore<ExecutionRecord>;\n changelogStore?: RecordStore<ChangelogRecord>;\n actorStore?: RecordStore<ActorRecord>;\n\n // Optional: Configuration for evolution phases\n cacheStrategy?: \"json\" | \"sqlite\" | \"dual\"; // Default: 'json'\n cachePath?: string; // Default: '.gitgov/index.json'\n};\n\n/**\n * Return types specific to the adapter\n */\nexport type IndexData = {\n metadata: {\n generatedAt: string;\n lastCommitHash: string;\n integrityStatus: \"valid\" | \"warnings\" | \"errors\";\n recordCounts: Record<string, number>;\n cacheStrategy: \"json\" | \"sqlite\" | \"dual\";\n generationTime: number; // ms\n };\n metrics: SystemStatus & ProductivityMetrics & CollaborationMetrics;\n activityHistory: ActivityEvent[]; // Para dashboard activity streams\n tasks: TaskRecord[];\n enrichedTasks: EnrichedTaskRecord[]; // Tasks with activity metadata for Dashboard\n cycles: CycleRecord[];\n actors: ActorRecord[];\n};\n\nexport type IntegrityReport = {\n status: \"valid\" | \"warnings\" | \"errors\";\n recordsScanned: number;\n errorsFound: IntegrityError[];\n warningsFound: IntegrityWarning[];\n validationTime: number; // ms\n checksumFailures: number;\n signatureFailures: number;\n};\n\nexport type IndexGenerationReport = {\n success: boolean;\n recordsProcessed: number;\n metricsCalculated: number;\n generationTime: number; // ms\n cacheSize: number; // bytes\n cacheStrategy: \"json\" | \"sqlite\" | \"dual\";\n errors: string[];\n performance: {\n readTime: number;\n calculationTime: number;\n writeTime: number;\n };\n};\n\nexport type IntegrityError = {\n type: 'schema_violation' | 'checksum_failure' | 'signature_invalid';\n recordId: string;\n message: string;\n};\n\nexport type IntegrityWarning = {\n type: 'missing_reference' | 'deprecated_field' | 'performance_issue';\n recordId: string;\n message: string;\n};\n\n/**\n * IndexerAdapter Interface - The Cache Engine\n */\nexport interface IIndexerAdapter {\n generateIndex(): Promise<IndexGenerationReport>;\n getIndexData(): Promise<IndexData | null>;\n validateIntegrity(): Promise<IntegrityReport>;\n calculateActivityHistory(allRecords: AllRecords): Promise<ActivityEvent[]>; // NUEVO\n calculateLastUpdated(task: TaskRecord, relatedRecords: AllRecords): Promise<{ lastUpdated: number; lastActivityType: EnrichedTaskRecord['lastActivityType']; recentActivity: string }>; // NUEVO\n enrichTaskRecord(task: GitGovTaskRecord, relatedRecords: AllRecords): Promise<EnrichedTaskRecord>; // UPDATED: Now accepts GitGovTaskRecord with headers\n isIndexUpToDate(): Promise<boolean>;\n invalidateCache(): Promise<void>;\n}\n\n/**\n * FileIndexerAdapter - Phase 1 Implementation\n * \n * File-based cache implementation using .gitgov/index.json\n * Optimized for teams with <500 records\n */\nexport class FileIndexerAdapter implements IIndexerAdapter {\n private metricsAdapter: MetricsAdapter;\n private taskStore: RecordStore<TaskRecord>;\n private cycleStore: RecordStore<CycleRecord>;\n private feedbackStore: RecordStore<FeedbackRecord> | undefined;\n private executionStore: RecordStore<ExecutionRecord> | undefined;\n private changelogStore: RecordStore<ChangelogRecord> | undefined;\n private actorStore: RecordStore<ActorRecord> | undefined;\n private cacheStrategy: \"json\" | \"sqlite\" | \"dual\";\n private cachePath: string;\n\n constructor(dependencies: IndexerAdapterDependencies) {\n // Core calculation engine (REQUIRED)\n this.metricsAdapter = dependencies.metricsAdapter;\n\n // Data stores (REQUIRED)\n this.taskStore = dependencies.taskStore;\n this.cycleStore = dependencies.cycleStore;\n\n // Optional stores (graceful degradation)\n this.feedbackStore = dependencies.feedbackStore;\n this.executionStore = dependencies.executionStore;\n this.changelogStore = dependencies.changelogStore;\n this.actorStore = dependencies.actorStore;\n\n // Configuration with defaults\n this.cacheStrategy = dependencies.cacheStrategy || \"json\";\n this.cachePath = dependencies.cachePath || \".gitgov/index.json\";\n }\n\n /**\n * [EARS-1] Generates complete index from raw Records with MetricsAdapter integration\n */\n async generateIndex(): Promise<IndexGenerationReport> {\n const startTime = performance.now();\n const performance_metrics = {\n readTime: 0,\n calculationTime: 0,\n writeTime: 0\n };\n\n try {\n // 1. Read all stores (Phase 1: Read everything into memory)\n const readStart = performance.now();\n\n const [tasks, cycles, actors] = await Promise.all([\n this.readAllTasks(),\n this.readAllCycles(),\n this.readAllActors()\n ]);\n\n performance_metrics.readTime = performance.now() - readStart;\n\n // 2. Delegate calculations to MetricsAdapter\n const calcStart = performance.now();\n\n const [systemStatus, productivityMetrics, collaborationMetrics] = await Promise.all([\n this.metricsAdapter.getSystemStatus(),\n this.metricsAdapter.getProductivityMetrics(),\n this.metricsAdapter.getCollaborationMetrics()\n ]);\n\n performance_metrics.calculationTime = performance.now() - calcStart;\n\n // 3. Calculate activity history\n const allRecords: AllRecords = {\n tasks,\n cycles,\n feedback: await this.readAllFeedback(),\n executions: await this.readAllExecutions(),\n changelogs: await this.readAllChangelogs(),\n actors\n };\n\n const activityHistory = await this.calculateActivityHistory(allRecords);\n\n // 3.5. Enrich tasks with activity metadata\n const enrichedTasks: EnrichedTaskRecord[] = [];\n for (const task of tasks) {\n const enrichedTask = await this.enrichTaskRecord(task, allRecords);\n enrichedTasks.push(enrichedTask);\n }\n\n // 4. Build IndexData structure\n const indexData: IndexData = {\n metadata: {\n generatedAt: new Date().toISOString(),\n lastCommitHash: await this.getGitCommitHash(),\n integrityStatus: \"valid\", // TODO: Implement integrity check\n recordCounts: {\n tasks: tasks.length,\n cycles: cycles.length,\n actors: actors.length,\n feedback: allRecords.feedback.length,\n executions: allRecords.executions.length,\n changelogs: allRecords.changelogs.length\n },\n cacheStrategy: this.cacheStrategy,\n generationTime: 0 // Will be set below\n },\n metrics: { ...systemStatus, ...productivityMetrics, ...collaborationMetrics },\n activityHistory, // NUEVO\n tasks: tasks.map(t => t.payload), // Extract payloads for IndexData\n enrichedTasks, // NUEVO - Tasks with activity metadata\n cycles: cycles.map(c => c.payload), // Extract payloads for IndexData\n actors: actors.map(a => a.payload) // Extract payloads for IndexData\n };\n\n // 4. Write cache (Phase 1: JSON file)\n const writeStart = performance.now();\n await this.writeCacheFile(indexData);\n performance_metrics.writeTime = performance.now() - writeStart;\n\n const totalTime = performance.now() - startTime;\n indexData.metadata.generationTime = totalTime;\n\n // 5. Get cache size\n const cacheSize = await this.getCacheFileSize();\n\n return {\n success: true,\n recordsProcessed: tasks.length + cycles.length + actors.length,\n metricsCalculated: 3, // systemStatus + productivity + collaboration\n generationTime: totalTime,\n cacheSize,\n cacheStrategy: this.cacheStrategy,\n errors: [],\n performance: performance_metrics\n };\n\n } catch (error) {\n return {\n success: false,\n recordsProcessed: 0,\n metricsCalculated: 0,\n generationTime: performance.now() - startTime,\n cacheSize: 0,\n cacheStrategy: this.cacheStrategy,\n errors: [error instanceof Error ? error.message : String(error)],\n performance: performance_metrics\n };\n }\n }\n\n /**\n * [EARS-2] Gets data from local cache for fast CLI queries\n */\n async getIndexData(): Promise<IndexData | null> {\n try {\n // Check if cache file exists\n const cacheExists = await this.cacheFileExists();\n if (!cacheExists) {\n return null; // EARS-3: Return null without cache\n }\n\n // Validate freshness\n const isUpToDate = await this.isIndexUpToDate();\n if (!isUpToDate) {\n return null; // Cache is stale\n }\n\n // Read and parse cache file\n const cacheContent = await fs.readFile(this.cachePath, 'utf-8');\n const indexData: IndexData = JSON.parse(cacheContent);\n\n return indexData;\n } catch (error) {\n console.warn(`Cache read error: ${error instanceof Error ? error.message : String(error)}`);\n return null;\n }\n }\n\n /**\n * [EARS-4] Validates integrity of Records without regenerating cache\n */\n async validateIntegrity(): Promise<IntegrityReport> {\n const startTime = performance.now();\n const errors: IntegrityError[] = [];\n const warnings: IntegrityWarning[] = [];\n let recordsScanned = 0;\n\n try {\n // Read all records for validation\n const [tasks, cycles] = await Promise.all([\n this.readAllTasks(),\n this.readAllCycles()\n ]);\n\n recordsScanned = tasks.length + cycles.length;\n\n // Basic validation (schema validation would need ValidatorModule)\n for (const task of tasks) {\n if (!task.payload.id || !task.payload.description) {\n errors.push({\n type: 'schema_violation',\n recordId: task.payload.id || 'unknown',\n message: 'Task missing required fields'\n });\n }\n }\n\n for (const cycle of cycles) {\n if (!cycle.payload.id || !cycle.payload.title) {\n errors.push({\n type: 'schema_violation',\n recordId: cycle.payload.id || 'unknown',\n message: 'Cycle missing required fields'\n });\n }\n }\n\n const status = errors.length > 0 ? \"errors\" : warnings.length > 0 ? \"warnings\" : \"valid\";\n\n return {\n status,\n recordsScanned,\n errorsFound: errors,\n warningsFound: warnings,\n validationTime: performance.now() - startTime,\n checksumFailures: 0, // TODO: Implement checksum validation\n signatureFailures: 0 // TODO: Implement signature validation\n };\n\n } catch (error) {\n return {\n status: \"errors\",\n recordsScanned,\n errorsFound: [{\n type: 'schema_violation',\n recordId: 'system',\n message: error instanceof Error ? error.message : String(error)\n }],\n warningsFound: warnings,\n validationTime: performance.now() - startTime,\n checksumFailures: 0,\n signatureFailures: 0\n };\n }\n }\n\n /**\n * [EARS-5] Checks if index is up to date by comparing timestamps\n */\n async isIndexUpToDate(): Promise<boolean> {\n try {\n // Check if cache exists\n const cacheExists = await this.cacheFileExists();\n if (!cacheExists) {\n return false;\n }\n\n // Get cache timestamp\n const cacheStats = await fs.stat(this.cachePath);\n const cacheTime = cacheStats.mtime.getTime();\n\n // Get last modified time of any record (simplified check)\n const taskIds = await this.taskStore.list();\n const cycleIds = await this.cycleStore.list();\n\n // Check if any records are newer than cache\n for (const id of [...taskIds, ...cycleIds]) {\n const timestamp = this.getTimestampFromId(id);\n if (timestamp * 1000 > cacheTime) { // Convert to milliseconds\n return false; // Found newer record\n }\n }\n\n return true;\n } catch (error) {\n console.warn(`Error checking cache freshness: ${error instanceof Error ? error.message : String(error)}`);\n return false;\n }\n }\n\n /**\n * [EARS-6] Invalidates local cache by removing cache files\n */\n async invalidateCache(): Promise<void> {\n try {\n const cacheExists = await this.cacheFileExists();\n if (cacheExists) {\n await fs.unlink(this.cachePath);\n }\n } catch (error) {\n throw new Error(`Failed to invalidate cache: ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n\n // ===== HELPER METHODS =====\n\n /**\n * Reads all tasks from taskStore with full metadata (headers + payloads).\n * Returns complete GitGovTaskRecord objects including signatures for author/lastModifier extraction.\n */\n private async readAllTasks(): Promise<GitGovTaskRecord[]> {\n const taskIds = await this.taskStore.list();\n const tasks: GitGovTaskRecord[] = [];\n\n for (const id of taskIds) {\n const record = await this.taskStore.read(id);\n if (record) {\n tasks.push(record); // Push full record, not just payload\n }\n }\n\n return tasks;\n }\n\n /**\n * Reads all cycles from cycleStore with full metadata.\n */\n private async readAllCycles(): Promise<GitGovCycleRecord[]> {\n const cycleIds = await this.cycleStore.list();\n const cycles: GitGovCycleRecord[] = [];\n\n for (const id of cycleIds) {\n const record = await this.cycleStore.read(id);\n if (record) {\n cycles.push(record);\n }\n }\n\n return cycles;\n }\n\n /**\n * Reads all actors from actorStore (graceful degradation) with full metadata.\n */\n private async readAllActors(): Promise<GitGovActorRecord[]> {\n if (!this.actorStore) {\n return [];\n }\n\n const actorIds = await this.actorStore.list();\n const actors: GitGovActorRecord[] = [];\n\n for (const id of actorIds) {\n const record = await this.actorStore.read(id);\n if (record) {\n actors.push(record);\n }\n }\n\n return actors;\n }\n\n /**\n * Reads all feedback from feedbackStore (graceful degradation) with full metadata.\n */\n private async readAllFeedback(): Promise<GitGovFeedbackRecord[]> {\n if (!this.feedbackStore) {\n return [];\n }\n\n const feedbackIds = await this.feedbackStore.list();\n const feedback: GitGovFeedbackRecord[] = [];\n\n for (const id of feedbackIds) {\n const record = await this.feedbackStore.read(id);\n if (record) {\n feedback.push(record);\n }\n }\n\n return feedback;\n }\n\n /**\n * Reads all executions from executionStore (graceful degradation) with full metadata.\n */\n private async readAllExecutions(): Promise<GitGovExecutionRecord[]> {\n if (!this.executionStore) {\n return [];\n }\n\n const executionIds = await this.executionStore.list();\n const executions: GitGovExecutionRecord[] = [];\n\n for (const id of executionIds) {\n const record = await this.executionStore.read(id);\n if (record) {\n executions.push(record);\n }\n }\n\n return executions;\n }\n\n /**\n * Reads all changelogs from changelogStore (graceful degradation) with full metadata.\n */\n private async readAllChangelogs(): Promise<GitGovChangelogRecord[]> {\n if (!this.changelogStore) {\n return [];\n }\n\n const changelogIds = await this.changelogStore.list();\n const changelogs: GitGovChangelogRecord[] = [];\n\n for (const id of changelogIds) {\n const record = await this.changelogStore.read(id);\n if (record) {\n changelogs.push(record);\n }\n }\n\n return changelogs;\n }\n\n /**\n * Writes cache data to file (Phase 1: JSON)\n */\n private async writeCacheFile(indexData: IndexData): Promise<void> {\n // Ensure .gitgov directory exists\n const cacheDir = path.dirname(this.cachePath);\n await fs.mkdir(cacheDir, { recursive: true });\n\n // Write JSON cache file\n const jsonContent = JSON.stringify(indexData, null, 2);\n await fs.writeFile(this.cachePath, jsonContent, 'utf-8');\n }\n\n /**\n * Checks if cache file exists\n */\n private async cacheFileExists(): Promise<boolean> {\n try {\n await fs.access(this.cachePath);\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * Gets cache file size in bytes\n */\n private async getCacheFileSize(): Promise<number> {\n try {\n const stats = await fs.stat(this.cachePath);\n return stats.size;\n } catch {\n return 0;\n }\n }\n\n /**\n * Gets current git commit hash (simplified)\n */\n private async getGitCommitHash(): Promise<string> {\n try {\n // Simplified implementation - would use git commands in real implementation\n return \"mock-commit-hash\";\n } catch {\n return \"unknown\";\n }\n }\n\n /**\n * [EARS-19] Calculates activity history from Record timestamps for dashboard activity streams\n */\n async calculateActivityHistory(allRecords: AllRecords): Promise<ActivityEvent[]> {\n const events: ActivityEvent[] = [];\n\n try {\n // Tasks creadas (basado en ID timestamp)\n allRecords.tasks.forEach(task => {\n const timestampPart = task.payload.id.split('-')[0];\n if (timestampPart) {\n events.push({\n timestamp: parseInt(timestampPart),\n type: 'task_created',\n entityId: task.payload.id,\n entityTitle: task.payload.title,\n actorId: task.header.signatures[0]?.keyId || 'unknown', // Extract from first signature\n metadata: { priority: task.payload.priority, status: task.payload.status }\n });\n }\n });\n\n // Cycles creados (basado en ID timestamp)\n allRecords.cycles.forEach(cycle => {\n const timestampPart = cycle.payload.id.split('-')[0];\n if (timestampPart) {\n events.push({\n timestamp: parseInt(timestampPart),\n type: 'cycle_created',\n entityId: cycle.payload.id,\n entityTitle: cycle.payload.title,\n actorId: cycle.header.signatures[0]?.keyId || 'unknown', // Extract from first signature\n metadata: { status: cycle.payload.status }\n });\n }\n });\n\n // Feedback creado (basado en ID timestamp)\n allRecords.feedback.forEach(feedback => {\n const timestampPart = feedback.payload.id.split('-')[0];\n if (timestampPart) {\n const metadata: { type: string; assignee?: string; resolution: string } = {\n type: feedback.payload.type,\n resolution: feedback.payload.status\n };\n if (feedback.payload.assignee) {\n metadata.assignee = feedback.payload.assignee;\n }\n\n const event: ActivityEvent = {\n timestamp: parseInt(timestampPart),\n type: 'feedback_created',\n entityId: feedback.payload.id,\n entityTitle: `${feedback.payload.type}: ${feedback.payload.content.slice(0, 40)}...`,\n actorId: feedback.header.signatures[0]?.keyId || feedback.payload.assignee || 'unknown',\n metadata\n };\n\n events.push(event);\n }\n });\n\n // Changelogs creados (basado en ID timestamp) \n allRecords.changelogs.forEach(changelog => {\n const timestampPart = changelog.payload.id.split('-')[0];\n if (timestampPart) {\n const event: ActivityEvent = {\n timestamp: parseInt(timestampPart),\n type: 'changelog_created',\n entityId: changelog.payload.id,\n entityTitle: changelog.payload.title || 'Release notes',\n actorId: changelog.header.signatures[0]?.keyId || 'unknown'\n };\n if (changelog.payload.version) {\n event.metadata = { version: changelog.payload.version };\n }\n events.push(event);\n }\n });\n\n // Executions creadas (basado en ID timestamp)\n allRecords.executions.forEach(execution => {\n const timestampPart = execution.payload.id.split('-')[0];\n if (timestampPart) {\n events.push({\n timestamp: parseInt(timestampPart),\n type: 'execution_created',\n entityId: execution.payload.id,\n entityTitle: execution.payload.title || `Working on ${execution.payload.taskId.slice(-8)}`,\n actorId: execution.header.signatures[0]?.keyId || 'unknown', // Extract from first signature\n metadata: {\n executionType: execution.payload.type || 'development',\n taskId: execution.payload.taskId\n }\n });\n }\n });\n\n // Actors creados (basado en ID timestamp)\n allRecords.actors.forEach(actor => {\n const timestampPart = actor.payload.id.split('-')[0];\n if (timestampPart) {\n events.push({\n timestamp: parseInt(timestampPart),\n type: 'actor_created',\n entityId: actor.payload.id,\n entityTitle: `${actor.payload.displayName} joined (${actor.payload.type})`,\n metadata: { type: actor.payload.type }\n });\n }\n });\n\n // [EARS-20] Ordenar cronológicamente y limitar a Ćŗltimos 15 eventos\n return events\n .sort((a, b) => b.timestamp - a.timestamp) // MĆ”s recientes primero\n .slice(0, 15); // Ćltimos 15 eventos para performance\n\n } catch (error) {\n // Graceful degradation si hay errores\n console.warn('Error calculating activity history:', error);\n return [];\n }\n }\n\n /**\n * [EARS-21] Calculate lastUpdated timestamp and activity type for a task\n * Considers task file modification time and related records timestamps\n */\n async calculateLastUpdated(\n task: TaskRecord,\n relatedRecords: AllRecords\n ): Promise<{ lastUpdated: number; lastActivityType: EnrichedTaskRecord['lastActivityType']; recentActivity: string }> {\n try {\n let lastUpdated = this.getTimestampFromId(task.id) * 1000; // Convert to milliseconds for consistency\n let lastActivityType: EnrichedTaskRecord['lastActivityType'] = 'task_created';\n let recentActivity = 'Task created';\n\n\n // 1. Check task file modification time (only if significantly newer than creation)\n try {\n // Find the project root by looking for .gitgov directory\n let projectRoot = process.cwd();\n while (!fsSync.existsSync(path.join(projectRoot, '.gitgov')) && projectRoot !== '/') {\n projectRoot = path.dirname(projectRoot);\n }\n const taskFilePath = path.join(projectRoot, '.gitgov', 'tasks', `${task.id}.json`);\n const stats = await fs.stat(taskFilePath);\n const fileModTime = stats.mtime.getTime();\n\n // Only consider file modification if it's more than 60 seconds after creation\n // This avoids counting initial file creation as \"modification\"\n const creationTime = this.getTimestampFromId(task.id) * 1000;\n const timeDifference = fileModTime - creationTime;\n\n if (timeDifference > 60000 && fileModTime > lastUpdated) { // 60 seconds threshold\n lastUpdated = fileModTime;\n lastActivityType = 'task_modified';\n recentActivity = `Task modified ${this.formatTimeAgo(fileModTime)}`;\n\n }\n } catch (error) {\n // File not accessible, continue with other checks\n }\n\n // 2. Check related feedback records\n const relatedFeedback = relatedRecords.feedback.filter(f =>\n f.payload.entityId === task.id || f.payload.content.includes(task.id)\n );\n\n for (const feedback of relatedFeedback) {\n const feedbackTime = this.getTimestampFromId(feedback.payload.id) * 1000; // Convert to milliseconds\n if (feedbackTime > lastUpdated) {\n lastUpdated = feedbackTime;\n lastActivityType = 'feedback_received';\n recentActivity = `${feedback.payload.type} feedback: ${feedback.payload.content.slice(0, 30)}...`;\n }\n }\n\n // 3. Check related execution records\n const relatedExecutions = relatedRecords.executions.filter(e => e.payload.taskId === task.id);\n\n for (const execution of relatedExecutions) {\n const executionTime = this.getTimestampFromId(execution.payload.id) * 1000; // Convert to milliseconds\n if (executionTime > lastUpdated) {\n lastUpdated = executionTime;\n lastActivityType = 'execution_added';\n recentActivity = `Execution: ${execution.payload.title || 'Work logged'}`;\n }\n }\n\n // 4. Check related changelog records\n const relatedChangelogs = relatedRecords.changelogs.filter(c =>\n c.payload.relatedTasks.includes(task.id) ||\n c.payload.description?.includes(task.id)\n );\n\n for (const changelog of relatedChangelogs) {\n const changelogTime = this.getTimestampFromId(changelog.payload.id) * 1000; // Convert to milliseconds\n if (changelogTime > lastUpdated) {\n lastUpdated = changelogTime;\n lastActivityType = 'changelog_created';\n recentActivity = `Changelog: ${changelog.payload.title}`;\n }\n }\n\n return { lastUpdated, lastActivityType, recentActivity };\n\n } catch (error) {\n // Graceful fallback\n const fallbackTime = this.getTimestampFromId(task.id) * 1000; // Convert to milliseconds\n return {\n lastUpdated: fallbackTime,\n lastActivityType: 'task_created',\n recentActivity: 'Task created'\n };\n }\n }\n\n /**\n * [EARS-22] Enrich a TaskRecord with activity metadata\n * @param task - Full GitGovTaskRecord with header.signatures for author/lastModifier extraction\n * @param relatedRecords - All related records with full metadata\n */\n async enrichTaskRecord(task: GitGovTaskRecord, relatedRecords: AllRecords): Promise<EnrichedTaskRecord> {\n const { lastUpdated, lastActivityType, recentActivity } = await this.calculateLastUpdated(task.payload, relatedRecords);\n\n return {\n ...task.payload,\n lastUpdated,\n lastActivityType,\n recentActivity\n };\n }\n\n /**\n * Format timestamp as human-readable time ago\n */\n private formatTimeAgo(timestamp: number): string {\n const now = Date.now();\n const diff = now - timestamp;\n const minutes = Math.floor(diff / (1000 * 60));\n const hours = Math.floor(diff / (1000 * 60 * 60));\n const days = Math.floor(diff / (1000 * 60 * 60 * 24));\n\n if (minutes < 60) return `${minutes}m ago`;\n if (hours < 24) return `${hours}h ago`;\n return `${days}d ago`;\n }\n\n /**\n * Extracts timestamp from ID (format: {timestamp}-{type}-{slug})\n */\n private getTimestampFromId(id: string): number {\n try {\n const parts = id.split('-');\n const timestamp = parseInt(parts[0] || '0', 10);\n\n if (isNaN(timestamp) || timestamp <= 0) {\n throw new Error(`Invalid timestamp in ID: ${id}`);\n }\n\n return timestamp;\n } catch (error) {\n throw new Error(`Cannot extract timestamp from ID: ${id}`);\n }\n }\n}\n","import { promises as fs, existsSync } from 'fs';\nimport * as pathUtils from 'path';\nimport { fileURLToPath } from 'url';\nimport { RecordStore } from '../../store';\nimport type { TaskRecord } from '../../types';\nimport type { CycleRecord } from '../../types';\nimport type { GitGovConfig } from '../../config_manager';\nimport { ConfigManager } from '../../config_manager';\nimport { DetailedValidationError } from '../../validation/common';\nimport type { IdentityAdapter } from '../identity_adapter';\nimport type { BacklogAdapter } from '../backlog_adapter';\nimport type { WorkflowMethodologyAdapter } from '../workflow_methodology_adapter';\nimport type { IEventStream } from '../../event_bus';\nimport { createTaskRecord } from '../../factories/task_factory';\nimport { createCycleRecord } from '../../factories/cycle_factory';\n\n// ESM compatibility: __dirname equivalent\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = pathUtils.dirname(__filename);\n\n/**\n * ProjectAdapter Dependencies - Facade + Dependency Injection Pattern\n */\nexport interface ProjectAdapterDependencies {\n // Core Adapters (REQUIRED - Fase 1)\n identityAdapter: IdentityAdapter;\n backlogAdapter: BacklogAdapter;\n workflowMethodologyAdapter: WorkflowMethodologyAdapter;\n\n // Infrastructure Layer (REQUIRED)\n configManager: ConfigManager;\n taskStore: RecordStore<TaskRecord>;\n cycleStore: RecordStore<CycleRecord>;\n\n // Optional: Graceful degradation (Fase 2)\n eventBus?: IEventStream;\n platformApi?: IPlatformApi;\n userManagement?: IUserManagement;\n}\n\n// Platform API interface (Fase 2 - Future)\ninterface IPlatformApi {\n getProjectInfo(projectId: string): Promise<ProjectInfo>;\n}\n\ninterface IUserManagement {\n addUserToProject(projectId: string, userId: string, role: string): Promise<void>;\n}\n\n// Return types specific to the adapter\nexport type ProjectInitOptions = {\n name: string;\n template?: string; // Path to JSON template file\n actorName?: string;\n actorEmail?: string;\n methodology?: \"default\" | \"scrum\" | \"kanban\";\n skipValidation?: boolean;\n verbose?: boolean;\n};\n\nexport type ProjectInitResult = {\n success: boolean;\n projectId: string;\n projectName: string;\n rootCycle: string;\n actor: {\n id: string;\n displayName: string;\n publicKeyPath: string;\n };\n template?: {\n processed: boolean;\n cyclesCreated: number;\n tasksCreated: number;\n } | undefined;\n initializationTime: number;\n nextSteps: string[];\n};\n\nexport type EnvironmentValidation = {\n isValid: boolean;\n isGitRepo: boolean;\n hasWritePermissions: boolean;\n isAlreadyInitialized: boolean;\n gitgovPath?: string | undefined;\n warnings: string[];\n suggestions: string[];\n};\n\nexport type ProjectContext = {\n projectId: string;\n projectName: string;\n actorId: string;\n rootCycle: string;\n};\n\nexport type TemplateProcessingResult = {\n success: boolean;\n cyclesCreated: number;\n tasksCreated: number;\n processingTime: number;\n createdIds: {\n cycles: string[];\n tasks: string[];\n };\n};\n\n// Fase 2: Future types\nexport type ProjectInfo = {\n id: string;\n name: string;\n rootCycle: string;\n protocolVersion: string;\n createdAt?: string;\n lastModified?: string;\n};\n\nexport type ProjectReport = {\n project: ProjectInfo;\n statistics: {\n totalTasks: number;\n totalCycles: number;\n completedTasks: number;\n };\n health: {\n overallScore: number;\n recommendations: string[];\n };\n};\n\n/**\n * ProjectAdapter Interface - The Project Initialization Engine\n */\nexport interface IProjectAdapter {\n // FASE 1: Bootstrap Core (CrĆtico para CLI init)\n initializeProject(options: ProjectInitOptions): Promise<ProjectInitResult>;\n validateEnvironment(path?: string): Promise<EnvironmentValidation>;\n processBlueprintTemplate(\n templatePath: string,\n projectContext: ProjectContext\n ): Promise<TemplateProcessingResult>;\n rollbackPartialSetup(setupId: string): Promise<void>;\n\n // FASE 2: Future capabilities (Platform Integration)\n getProjectInfo(): Promise<ProjectInfo | null>;\n updateProjectConfig(updates: Partial<GitGovConfig>): Promise<void>;\n generateProjectReport(): Promise<ProjectReport>;\n}\n\n/**\n * ProjectAdapter - The Project Initialization Engine\n * \n * Implements Facade + Dependency Injection Pattern for testeable and configurable orchestration.\n * Acts as Mediator between project initialization and the ecosystem of adapters.\n */\nexport class ProjectAdapter implements IProjectAdapter {\n private identityAdapter: IdentityAdapter;\n private backlogAdapter: BacklogAdapter;\n private configManager: ConfigManager;\n\n constructor(dependencies: ProjectAdapterDependencies) {\n this.identityAdapter = dependencies.identityAdapter;\n this.backlogAdapter = dependencies.backlogAdapter;\n this.configManager = dependencies.configManager;\n }\n\n // ===== FASE 1: BOOTSTRAP CORE METHODS =====\n\n /**\n * [EARS-1] Initializes complete GitGovernance project with 3-adapter orchestration and trust root Ed25519\n */\n async initializeProject(options: ProjectInitOptions): Promise<ProjectInitResult> {\n const startTime = Date.now();\n let setupId = `setup-${Date.now()}`;\n\n try {\n // 1. Environment Validation\n const envValidation = await this.validateEnvironment();\n if (!envValidation.isValid) {\n throw new Error(`Environment validation failed: ${envValidation.warnings.join(', ')}`);\n }\n\n // 2. Directory Structure Creation\n const projectRoot = process.env['GITGOV_ORIGINAL_DIR'] || process.cwd();\n const gitgovPath = pathUtils.join(projectRoot, '.gitgov');\n\n await this.createDirectoryStructure(gitgovPath);\n\n // 2.5. Copy Agent Prompt (@gitgov instructions for AI assistants)\n await this.copyAgentPrompt(gitgovPath);\n\n // 3. Trust Root Creation via IdentityAdapter\n const actor = await this.identityAdapter.createActor(\n {\n type: \"human\" as const,\n displayName: options.actorName || \"Project Owner\",\n roles: [\n \"admin\", // Platform admin (future use)\n \"author\", // Create & submit tasks\n \"approver:product\", // Approve tasks (product decisions)\n \"approver:quality\", // Complete tasks (quality validation)\n \"developer\" // General development work\n ] as const,\n },\n \"bootstrap\"\n );\n\n // 4. Root Cycle Setup via BacklogAdapter\n const rootCycleData = await createCycleRecord({\n title: \"root\", // Will generate ID: {timestamp}-root\n status: \"planning\" as const,\n taskIds: [],\n });\n\n const rootCycle = await this.backlogAdapter.createCycle(rootCycleData, actor.id);\n\n // 5. Template Processing (if specified)\n let templateResult: TemplateProcessingResult | undefined;\n if (options.template) {\n const projectContext: ProjectContext = {\n projectId: this.generateProjectId(options.name),\n projectName: options.name,\n actorId: actor.id,\n rootCycle: rootCycle.id,\n };\n templateResult = await this.processBlueprintTemplate(options.template, projectContext);\n }\n\n // 6. Configuration Persistence via ConfigManager\n const projectId = this.generateProjectId(options.name);\n const config: GitGovConfig = {\n protocolVersion: \"1.0.0\",\n projectId,\n projectName: options.name,\n rootCycle: rootCycle.id,\n blueprints: {\n root: \"./packages/blueprints\"\n },\n state: {\n branch: \"gitgov-state\"\n }\n };\n\n await this.persistConfiguration(config, gitgovPath);\n\n // 7. Session Initialization\n await this.initializeSession(actor.id, gitgovPath);\n\n // 8. Git Integration\n await this.setupGitIntegration(projectRoot);\n\n const initializationTime = Date.now() - startTime;\n\n return {\n success: true,\n projectId,\n projectName: options.name,\n rootCycle: rootCycle.id,\n actor: {\n id: actor.id,\n displayName: actor.displayName,\n publicKeyPath: pathUtils.join(gitgovPath, 'actors', `${actor.id}.json`),\n },\n template: templateResult ? {\n processed: true,\n cyclesCreated: templateResult.cyclesCreated,\n tasksCreated: templateResult.tasksCreated,\n } : undefined,\n initializationTime,\n nextSteps: [\n \"Run 'gitgov status' to see your project overview\",\n \"Use 'gitgov task create' to add your first task\",\n \"Ask '@gitgov' for help, guidance, or project planning\"\n ],\n };\n\n } catch (error) {\n // Error Recovery - Automatic rollback\n await this.rollbackPartialSetup(setupId);\n throw error;\n }\n }\n\n /**\n * [EARS-2] Validates environment for GitGovernance initialization\n */\n async validateEnvironment(path?: string): Promise<EnvironmentValidation> {\n // For init: validate user's original directory, handling development scenarios\n const targetPath = path || process.env['GITGOV_ORIGINAL_DIR'] || process.cwd();\n const warnings: string[] = [];\n const suggestions: string[] = [];\n\n try {\n // Check if it's a Git repository by looking for .git directory\n const gitPath = pathUtils.join(targetPath, '.git');\n const isGitRepo = existsSync(gitPath);\n\n if (!isGitRepo) {\n warnings.push(`Not a Git repository in directory: ${targetPath}`);\n suggestions.push(\"Run 'git init' to initialize a Git repository first\");\n }\n\n // Check write permissions\n let hasWritePermissions = false;\n try {\n const testFile = pathUtils.join(targetPath, '.gitgov-test');\n await fs.writeFile(testFile, 'test');\n await fs.unlink(testFile);\n hasWritePermissions = true;\n } catch {\n warnings.push(\"No write permissions in target directory\");\n suggestions.push(\"Ensure you have write permissions in the target directory\");\n }\n\n // Check if already initialized\n const gitgovPath = pathUtils.join(targetPath, '.gitgov');\n let isAlreadyInitialized = false;\n try {\n await fs.access(gitgovPath);\n isAlreadyInitialized = true;\n warnings.push(`GitGovernance already initialized in directory: ${targetPath}`);\n suggestions.push(\"Use 'gitgov status' to check current state or choose a different directory\");\n } catch {\n // Directory doesn't exist, which is good\n }\n\n const isValid = isGitRepo && hasWritePermissions && !isAlreadyInitialized;\n\n return {\n isValid,\n isGitRepo,\n hasWritePermissions,\n isAlreadyInitialized,\n gitgovPath: isAlreadyInitialized ? gitgovPath : undefined,\n warnings,\n suggestions,\n };\n\n } catch (error) {\n warnings.push(`Environment validation error: ${error instanceof Error ? error.message : 'Unknown error'}`);\n suggestions.push(\"Check file system permissions and try again\");\n\n return {\n isValid: false,\n isGitRepo: false,\n hasWritePermissions: false,\n isAlreadyInitialized: false,\n warnings,\n suggestions,\n };\n }\n }\n\n /**\n * [EARS-3] Processes blueprint template JSON with schema validation creating cycles and tasks\n */\n async processBlueprintTemplate(\n templatePath: string,\n projectContext: ProjectContext\n ): Promise<TemplateProcessingResult> {\n const startTime = Date.now();\n const createdIds = { cycles: [] as string[], tasks: [] as string[] };\n\n try {\n // Load and validate template JSON\n const templateContent = await fs.readFile(templatePath, 'utf-8');\n const template = JSON.parse(templateContent);\n\n if (!template.cycles || !Array.isArray(template.cycles)) {\n throw new DetailedValidationError('Invalid template format', [\n { field: 'cycles', message: 'must be an array', value: template.cycles }\n ]);\n }\n\n let cyclesCreated = 0;\n let tasksCreated = 0;\n\n // Process cycles\n for (const cycleTemplate of template.cycles) {\n const cycleData = await createCycleRecord({\n title: cycleTemplate.title || 'Untitled Cycle',\n status: cycleTemplate.status || 'planning',\n taskIds: [],\n });\n\n const cycle = await this.backlogAdapter.createCycle(cycleData, projectContext.actorId);\n createdIds.cycles.push(cycle.id);\n cyclesCreated++;\n\n // Process tasks for this cycle\n if (cycleTemplate.tasks && Array.isArray(cycleTemplate.tasks)) {\n for (const taskTemplate of cycleTemplate.tasks) {\n const taskData = await createTaskRecord({\n title: taskTemplate.title || 'Untitled Task',\n priority: taskTemplate.priority || 'medium',\n description: taskTemplate.description || '',\n tags: taskTemplate.tags || [],\n cycleIds: [cycle.id],\n });\n\n const task = await this.backlogAdapter.createTask(taskData, projectContext.actorId);\n createdIds.tasks.push(task.id);\n tasksCreated++;\n }\n }\n }\n\n const processingTime = Date.now() - startTime;\n\n return {\n success: true,\n cyclesCreated,\n tasksCreated,\n processingTime,\n createdIds,\n };\n\n } catch (error) {\n if (error instanceof DetailedValidationError) {\n throw error;\n }\n\n throw new DetailedValidationError('Template processing failed', [\n { field: 'template', message: error instanceof Error ? error.message : 'Unknown error', value: templatePath }\n ]);\n }\n }\n\n /**\n * [EARS-4] Cleans up partial setup artifacts if initialization fails\n */\n async rollbackPartialSetup(setupId: string): Promise<void> {\n try {\n const projectRoot = process.env['GITGOV_ORIGINAL_DIR'] || process.cwd();\n const gitgovPath = pathUtils.join(projectRoot, '.gitgov');\n\n // Check if .gitgov directory exists\n try {\n await fs.access(gitgovPath);\n // Remove .gitgov directory recursively\n await fs.rm(gitgovPath, { recursive: true, force: true });\n } catch {\n // Directory doesn't exist, nothing to clean up\n }\n\n // TODO: Cleanup any other artifacts created during initialization\n // - Remove Git config changes\n // - Delete created actor keys\n // - Restore previous state if needed\n\n } catch (error) {\n // Log error but don't throw to avoid masking original error\n console.warn(`Rollback failed for setup ${setupId}:`, error);\n }\n }\n\n // ===== FASE 2: FUTURE PLATFORM METHODS =====\n\n /**\n * [EARS-19] Gets project information from config.json via ConfigManager (Fase 2)\n */\n async getProjectInfo(): Promise<ProjectInfo | null> {\n try {\n const config = await this.configManager.loadConfig();\n if (!config) {\n return null;\n }\n\n return {\n id: config.projectId,\n name: config.projectName,\n rootCycle: config.rootCycle,\n protocolVersion: config.protocolVersion,\n // TODO: Add createdAt and lastModified from file stats\n };\n\n } catch (error) {\n return null;\n }\n }\n\n /**\n * [EARS-20] Updates project configuration with validation (Fase 2)\n */\n async updateProjectConfig(updates: Partial<GitGovConfig>): Promise<void> {\n try {\n const currentConfig = await this.configManager.loadConfig();\n if (!currentConfig) {\n throw new Error('No existing configuration found');\n }\n\n } catch (error) {\n throw new DetailedValidationError('Configuration update failed', [\n { field: 'config', message: error instanceof Error ? error.message : 'Unknown error', value: updates }\n ]);\n }\n }\n\n /**\n * Generates project report (Fase 2)\n */\n async generateProjectReport(): Promise<ProjectReport> {\n // TODO: Implement project report generation\n throw new Error('NotImplementedError: generateProjectReport not implemented yet');\n }\n\n // ===== PRIVATE HELPER METHODS =====\n\n private async createDirectoryStructure(gitgovPath: string): Promise<void> {\n const directories = [\n 'actors',\n 'cycles',\n 'tasks',\n 'executions',\n 'feedback',\n 'changelogs',\n ];\n\n await fs.mkdir(gitgovPath, { recursive: true });\n\n for (const dir of directories) {\n await fs.mkdir(pathUtils.join(gitgovPath, dir), { recursive: true });\n }\n }\n\n private async copyAgentPrompt(gitgovPath: string): Promise<void> {\n // Copy the official @gitgov agent prompt to the project\n // Try multiple source locations for robustness:\n // 1. From monorepo root (development scenario)\n // 2. From installed package location (npm scenario)\n\n const targetPrompt = pathUtils.join(gitgovPath, 'gitgov');\n\n const potentialSources = [\n pathUtils.join(ConfigManager.findProjectRoot() || process.cwd(), 'docs/gitgov_agent_prompt.md'),\n pathUtils.join(__dirname, '../../prompts/gitgov_agent_prompt.md'),\n ];\n\n for (const sourcePrompt of potentialSources) {\n try {\n await fs.access(sourcePrompt);\n await fs.copyFile(sourcePrompt, targetPrompt);\n console.log(`š @gitgov agent prompt copied to .gitgov/gitgov`);\n return;\n } catch {\n // Try next source location\n continue;\n }\n }\n\n // Graceful degradation: if prompt file doesn't exist in any location\n console.warn('Warning: Could not copy @gitgov agent prompt. Project will work but AI assistant may not have local instructions.');\n }\n\n private generateProjectId(name: string): string {\n return name.toLowerCase().replace(/[^a-z0-9]/g, '-').replace(/-+/g, '-');\n }\n\n private async persistConfiguration(config: GitGovConfig, gitgovPath: string): Promise<void> {\n // TODO: ARCHITECTURAL IMPROVEMENT - Use ConfigManager.saveConfig() instead of direct file write\n // Currently ProjectAdapter writes config.json directly for initialization\n // Future: await this.configManager.saveConfig(config) for better separation of concerns\n // Risk: ConfigManager is used by 40+ files, requires careful backward compatibility\n const configPath = pathUtils.join(gitgovPath, 'config.json');\n await fs.writeFile(configPath, JSON.stringify(config, null, 2), 'utf-8');\n }\n\n private async initializeSession(actorId: string, gitgovPath: string): Promise<void> {\n // TODO: ARCHITECTURAL IMPROVEMENT - Use ConfigManager.initializeSession() instead of direct file write\n // Currently ProjectAdapter creates .session.json directly for initialization\n // Future: await this.configManager.initializeSession(actorId) for better separation of concerns\n // Risk: ConfigManager is used by 40+ files, requires careful backward compatibility\n const sessionPath = pathUtils.join(gitgovPath, '.session.json');\n const session = {\n lastSession: {\n actorId,\n timestamp: new Date().toISOString(),\n },\n actorState: {\n [actorId]: {\n lastSync: new Date().toISOString(),\n },\n },\n };\n\n await fs.writeFile(sessionPath, JSON.stringify(session, null, 2), 'utf-8');\n }\n\n private async setupGitIntegration(projectRoot: string): Promise<void> {\n const gitignorePath = pathUtils.join(projectRoot, '.gitignore');\n const gitignoreContent = `\n# GitGovernance\n.gitgov/.session.json\n.gitgov/actors/*.key\n`;\n\n try {\n // Check if .gitignore exists\n let existingContent = '';\n try {\n existingContent = await fs.readFile(gitignorePath, 'utf-8');\n } catch {\n // File doesn't exist, will create new\n }\n\n // Only add if not already present\n if (existingContent && !existingContent.includes('.gitgov/.session.json')) {\n await fs.appendFile(gitignorePath, gitignoreContent);\n } else if (!existingContent) {\n await fs.writeFile(gitignorePath, gitignoreContent);\n }\n } catch (error) {\n // Non-critical error, continue\n console.warn('Failed to setup Git integration:', error);\n }\n }\n}\n","import type { WorkflowMethodologyRecord } from '../../types';\nimport type { TaskRecord } from '../../types';\nimport type { ActorRecord } from '../../types';\nimport type { FeedbackRecord } from '../../types';\nimport type { CycleRecord } from '../../types';\nimport type { Signature } from '../../types/embedded.types';\nimport { Schemas } from '../../schemas';\nimport { SchemaValidationCache } from '../../schemas/schema_cache';\nimport type { IFeedbackAdapter } from '../feedback_adapter';\nimport defaultConfig from './workflow_methodology_default.json';\nimport scrumConfig from './workflow_methodology_scrum.json';\n\ntype TaskStatus = TaskRecord['status'];\n\nexport type ValidationContext = {\n task: TaskRecord;\n actor?: ActorRecord;\n signatures?: Signature[];\n // Related records for complex rule validation\n feedbacks?: FeedbackRecord[];\n cycles?: CycleRecord[];\n // The target state for a transition, required for signature validation\n transitionTo?: TaskStatus;\n}\n\ntype TransitionRule = {\n to: TaskStatus;\n conditions: NonNullable<NonNullable<WorkflowMethodologyRecord['state_transitions']>[string]>['requires'] | undefined;\n}\n\ntype ViewConfig = NonNullable<WorkflowMethodologyRecord['view_configs']>[string];\n\nexport interface IWorkflowMethodology {\n getTransitionRule(from: TaskStatus, to: TaskStatus, context: ValidationContext): Promise<TransitionRule | null>;\n validateSignature(signature: Signature, context: ValidationContext): Promise<boolean>;\n validateCustomRules(rules: string[], context: ValidationContext): Promise<boolean>;\n getViewConfig(viewName: string): Promise<ViewConfig | null>;\n getAvailableTransitions(from: TaskStatus): Promise<TransitionRule[]>;\n}\n\n/**\n * WorkflowMethodologyAdapter Dependencies - Facade + Dependency Injection Pattern\n */\nexport interface WorkflowMethodologyAdapterDependencies {\n // Configuration Layer\n config: WorkflowMethodologyRecord; // ā
Direct config object (validated)\n\n // Required: Cross-adapter dependencies (critical for custom rules)\n feedbackAdapter: IFeedbackAdapter; // Para assignment_required validation\n}\n\n/**\n * WorkflowMethodologyAdapter - The Configurable Rules Engine\n * \n * Implements Facade + Dependency Injection Pattern for testeable and configurable orchestration.\n * Acts as Mediator between business rules and workflow validation.\n */\nexport class WorkflowMethodologyAdapter implements IWorkflowMethodology {\n private config: WorkflowMethodologyRecord;\n\n constructor(dependencies: WorkflowMethodologyAdapterDependencies) {\n this.validateConfig(dependencies.config, dependencies.config.name || 'custom');\n this.config = dependencies.config;\n }\n\n // Factory methods para configuraciones predefinidas\n static createDefault(feedbackAdapter: IFeedbackAdapter): WorkflowMethodologyAdapter {\n return new WorkflowMethodologyAdapter({\n config: defaultConfig as unknown as WorkflowMethodologyRecord,\n feedbackAdapter\n });\n }\n\n static createScrum(feedbackAdapter: IFeedbackAdapter): WorkflowMethodologyAdapter {\n return new WorkflowMethodologyAdapter({\n config: scrumConfig as unknown as WorkflowMethodologyRecord,\n feedbackAdapter\n });\n }\n\n private validateConfig(config: WorkflowMethodologyRecord, configName: string): void {\n const validator = SchemaValidationCache.getValidatorFromSchema(Schemas.WorkflowMethodologyRecord);\n const isValid = validator(config);\n\n if (!isValid) {\n const errors = validator.errors?.map(err => `${err.instancePath}: ${err.message}`).join(', ') || 'Unknown validation error';\n throw new Error(`Invalid ${configName} configuration: ${errors}`);\n }\n }\n\n /**\n * Gets the current configuration (already loaded and validated)\n */\n private getConfig(): WorkflowMethodologyRecord {\n return this.config;\n }\n\n /**\n * Determines which signature group to use for validation.\n * Checks all available signature groups and returns the first one where\n * the actor has matching capability roles.\n */\n private getApplicableSignatureGroup(signatureRules: Record<string, any>, actor: ActorRecord): string {\n // Try to find a signature group where the actor has matching roles\n for (const [groupName, ruleSet] of Object.entries(signatureRules)) {\n if (groupName === '__default__') continue; // Check __default__ last\n\n const hasMatchingRole = actor.roles?.some(role => ruleSet.capability_roles?.includes(role));\n if (hasMatchingRole) {\n return groupName;\n }\n }\n\n // Fallback to __default__\n return '__default__';\n }\n\n /**\n * Determines if a state transition is legal according to the methodology\n */\n async getTransitionRule(from: TaskStatus, to: TaskStatus, _context: ValidationContext): Promise<TransitionRule | null> {\n const config = this.getConfig();\n\n // Look for transition rule in configuration\n const transitionConfig = config.state_transitions?.[to];\n\n if (!transitionConfig) {\n return null;\n }\n\n // Check if 'from' state is valid for this transition\n if (!transitionConfig.from.includes(from)) {\n return null;\n }\n\n return {\n to,\n conditions: transitionConfig.requires\n };\n }\n\n /**\n * Validates if an actor's signature meets the requirements for a transition\n */\n async validateSignature(signature: Signature, context: ValidationContext): Promise<boolean> {\n const config = this.getConfig();\n\n if (!context.transitionTo) {\n throw new Error('ValidationContext must include \"transitionTo\" for signature validation.');\n }\n const targetState = context.transitionTo;\n\n const actor = context.actor;\n if (!actor) {\n return false;\n }\n\n const transitionConfig = config.state_transitions?.[targetState];\n if (!transitionConfig) return false;\n\n // A transition must be possible from the current task state\n if (!transitionConfig.from.includes(context.task.status)) {\n return false;\n }\n\n const signatureRules = transitionConfig.requires.signatures;\n if (!signatureRules) return true; // No signature required for this transition\n\n // Determine which signature group applies based on actor's roles\n const signatureGroup = this.getApplicableSignatureGroup(signatureRules, actor);\n const ruleSet = signatureRules[signatureGroup];\n if (!ruleSet) return false;\n\n // 1. Check if the signature role matches the required role\n if (signature.role !== ruleSet.role) {\n return false;\n }\n\n // 2. Check if the actor has at least one of the required capability roles\n const hasRequiredCapability = actor.roles?.some(role => ruleSet.capability_roles.includes(role));\n if (!hasRequiredCapability) {\n return false;\n }\n\n // 3. Check for min_approvals (requires context.signatures)\n const allSignaturesForGate = context.signatures || [signature];\n const relevantSignatures = allSignaturesForGate.filter(s => {\n // This is a simplified check for actor capability. A real implementation\n // would need to fetch each signing actor's record. Here we assume\n // the provided actor in the context is the one signing.\n return s.role === ruleSet.role && hasRequiredCapability;\n });\n\n\n if (relevantSignatures.length < ruleSet.min_approvals) {\n return false;\n }\n\n return true;\n }\n\n /**\n * Gets view configuration for mapping states to visual columns\n */\n async getViewConfig(viewName: string): Promise<ViewConfig | null> {\n const config = this.getConfig();\n return config.view_configs?.[viewName] || null;\n }\n\n /**\n * Validates custom rules for a given context\n */\n async validateCustomRules(rules: string[], context: ValidationContext): Promise<boolean> {\n const config = this.getConfig();\n\n for (const ruleId of rules) {\n const customRule = config.custom_rules?.[ruleId];\n\n if (!customRule) {\n console.warn(`Unknown custom rule: ${ruleId}`);\n return false;\n }\n\n let isRuleValid = false;\n\n // Validate based on rule type\n switch (customRule.validation) {\n case 'assignment_required':\n // Validate that task has a resolved assignment feedback record\n const assignment = context.feedbacks?.find(f =>\n f.type === 'assignment' && f.status === 'resolved'\n );\n isRuleValid = !!assignment;\n break;\n\n case 'sprint_capacity':\n // Validate that task is in an active sprint (cycle)\n if (!context.task.cycleIds || context.task.cycleIds.length === 0) {\n isRuleValid = false;\n break;\n }\n const activeCycles = context.cycles?.filter(c => c.status === 'active');\n if (!activeCycles || activeCycles.length === 0) {\n isRuleValid = false;\n break;\n }\n // Check if the task's cycles overlap with any active cycles\n isRuleValid = context.task.cycleIds.some(tcId => activeCycles.some(ac => ac.id === tcId));\n break;\n\n case 'epic_complexity':\n // Validate epic promotion requirements\n const isEpic = context.task.tags?.some(tag => tag.startsWith('epic:'));\n if (!isEpic) {\n isRuleValid = true; // Rule doesn't apply to non-epics\n break;\n }\n // Decomposed epics are paused and have child cycles.\n isRuleValid = context.task.status === 'paused' && (context.task.cycleIds?.length || 0) > 0;\n break;\n\n case 'custom':\n // For now, custom rules just log and return true\n // Future: could be extended for specific use cases\n console.log(`Custom rule '${ruleId}' executed`);\n isRuleValid = true;\n break;\n\n default:\n console.warn(`Unknown validation type: ${customRule.validation}`);\n isRuleValid = false;\n break;\n }\n\n // If any rule fails, the entire validation fails\n if (!isRuleValid) {\n return false;\n }\n }\n\n return true; // All rules passed\n }\n\n\n async getAvailableTransitions(from: TaskStatus): Promise<TransitionRule[]> {\n const config = this.getConfig();\n if (!config.state_transitions) {\n return [];\n }\n\n const available: TransitionRule[] = [];\n for (const toState in config.state_transitions) {\n const transitionConfig = config.state_transitions[toState];\n if (transitionConfig && transitionConfig.from.includes(from)) {\n available.push({\n to: toState as TaskStatus,\n conditions: transitionConfig.requires,\n });\n }\n }\n return available;\n }\n}\n\n\n","{\n \"version\": \"1.0.0\",\n \"name\": \"GitGovernance Default Methodology\",\n \"description\": \"Standard GitGovernance workflow with quality gates and agent collaboration\",\n \"state_transitions\": {\n \"review\": {\n \"from\": [\n \"draft\"\n ],\n \"requires\": {\n \"command\": \"gitgov task submit\",\n \"signatures\": {\n \"__default__\": {\n \"role\": \"submitter\",\n \"capability_roles\": [\n \"author\"\n ],\n \"min_approvals\": 1\n }\n }\n }\n },\n \"ready\": {\n \"from\": [\n \"review\"\n ],\n \"requires\": {\n \"command\": \"gitgov task approve\",\n \"signatures\": {\n \"__default__\": {\n \"role\": \"approver\",\n \"capability_roles\": [\n \"approver:product\"\n ],\n \"min_approvals\": 1\n },\n \"design\": {\n \"role\": \"approver\",\n \"capability_roles\": [\n \"approver:design\"\n ],\n \"min_approvals\": 1\n },\n \"quality\": {\n \"role\": \"approver\",\n \"capability_roles\": [\n \"approver:quality\"\n ],\n \"min_approvals\": 1\n }\n }\n }\n },\n \"active\": {\n \"from\": [\n \"ready\",\n \"paused\"\n ],\n \"requires\": {\n \"event\": \"first_execution_record_created\",\n \"custom_rules\": [\n \"task_must_have_valid_assignment_for_executor\"\n ]\n }\n },\n \"done\": {\n \"from\": [\n \"active\"\n ],\n \"requires\": {\n \"command\": \"gitgov task complete\",\n \"signatures\": {\n \"__default__\": {\n \"role\": \"approver\",\n \"capability_roles\": [\n \"approver:quality\"\n ],\n \"min_approvals\": 1\n }\n }\n }\n },\n \"archived\": {\n \"from\": [\n \"done\"\n ],\n \"requires\": {\n \"event\": \"changelog_record_created\"\n }\n },\n \"paused\": {\n \"from\": [\n \"active\",\n \"review\"\n ],\n \"requires\": {\n \"event\": \"feedback_blocking_created\"\n }\n },\n \"discarded\": {\n \"from\": [\n \"ready\",\n \"active\"\n ],\n \"requires\": {\n \"command\": \"gitgov task cancel\",\n \"signatures\": {\n \"__default__\": {\n \"role\": \"canceller\",\n \"capability_roles\": [\n \"approver:product\",\n \"approver:quality\"\n ],\n \"min_approvals\": 1\n }\n }\n }\n }\n },\n \"custom_rules\": {\n \"task_must_have_valid_assignment_for_executor\": {\n \"description\": \"Task must have a valid assignment before execution can begin\",\n \"validation\": \"assignment_required\"\n },\n \"task_must_be_in_active_sprint\": {\n \"description\": \"Task must belong to an active sprint cycle\",\n \"validation\": \"sprint_capacity\"\n },\n \"epic_promotion_required\": {\n \"description\": \"Complex tasks must be promoted to epic with child cycles\",\n \"validation\": \"epic_complexity\"\n }\n },\n \"view_configs\": {\n \"kanban-4col\": {\n \"columns\": {\n \"Draft\": [\n \"draft\"\n ],\n \"In Progress\": [\n \"review\",\n \"ready\",\n \"active\"\n ],\n \"Review\": [\n \"done\"\n ],\n \"Done\": [\n \"archived\"\n ],\n \"Cancelled\": [\n \"discarded\"\n ]\n },\n \"theme\": \"minimal\",\n \"layout\": \"horizontal\"\n },\n \"kanban-7col\": {\n \"columns\": {\n \"Draft\": [\n \"draft\"\n ],\n \"Review\": [\n \"review\"\n ],\n \"Ready\": [\n \"ready\"\n ],\n \"Active\": [\n \"active\"\n ],\n \"Done\": [\n \"done\"\n ],\n \"Archived\": [\n \"archived\"\n ],\n \"Blocked\": [\n \"paused\"\n ],\n \"Cancelled\": [\n \"discarded\"\n ]\n },\n \"theme\": \"corporate\",\n \"layout\": \"vertical\"\n }\n }\n}","{\n \"version\": \"1.0.0\",\n \"name\": \"Scrum Framework\",\n \"description\": \"Agile Scrum methodology with sprint-based workflow and defined roles\",\n \"state_transitions\": {\n \"review\": {\n \"from\": [\n \"draft\"\n ],\n \"requires\": {\n \"command\": \"gitgov task submit\",\n \"signatures\": {\n \"__default__\": {\n \"role\": \"product_owner\",\n \"capability_roles\": [\n \"product:owner\"\n ],\n \"min_approvals\": 1\n }\n }\n }\n },\n \"ready\": {\n \"from\": [\n \"review\"\n ],\n \"requires\": {\n \"command\": \"gitgov task approve\",\n \"custom_rules\": [\n \"task_fits_in_sprint_capacity\"\n ]\n }\n },\n \"active\": {\n \"from\": [\n \"ready\",\n \"paused\"\n ],\n \"requires\": {\n \"event\": \"sprint_started\",\n \"custom_rules\": [\n \"task_assigned_to_team_member\"\n ]\n }\n },\n \"done\": {\n \"from\": [\n \"active\"\n ],\n \"requires\": {\n \"command\": \"gitgov task complete\",\n \"signatures\": {\n \"__default__\": {\n \"role\": \"scrum_master\",\n \"capability_roles\": [\n \"scrum:master\"\n ],\n \"min_approvals\": 1\n }\n }\n }\n },\n \"archived\": {\n \"from\": [\n \"done\"\n ],\n \"requires\": {\n \"event\": \"changelog_record_created\"\n }\n },\n \"paused\": {\n \"from\": [\n \"active\",\n \"review\"\n ],\n \"requires\": {\n \"event\": \"feedback_blocking_created\"\n }\n }\n },\n \"custom_rules\": {\n \"task_fits_in_sprint_capacity\": {\n \"description\": \"Task story points must fit within remaining sprint capacity\",\n \"validation\": \"sprint_capacity\"\n },\n \"task_assigned_to_team_member\": {\n \"description\": \"Task must be assigned to an active team member\",\n \"validation\": \"assignment_required\"\n }\n },\n \"view_configs\": {\n \"scrum-board\": {\n \"columns\": {\n \"Product Backlog\": [\n \"draft\"\n ],\n \"Sprint Backlog\": [\n \"review\",\n \"ready\"\n ],\n \"In Progress\": [\n \"active\"\n ],\n \"Done\": [\n \"done\"\n ],\n \"Retrospective\": [\n \"archived\"\n ]\n },\n \"theme\": \"default\",\n \"layout\": \"horizontal\"\n },\n \"scrum-detailed\": {\n \"columns\": {\n \"Product Backlog\": [\n \"draft\"\n ],\n \"Groomed\": [\n \"review\"\n ],\n \"Sprint Ready\": [\n \"ready\"\n ],\n \"In Development\": [\n \"active\"\n ],\n \"Demo Ready\": [\n \"done\"\n ],\n \"Sprint Closed\": [\n \"archived\"\n ],\n \"Blocked\": [\n \"paused\"\n ]\n },\n \"theme\": \"corporate\",\n \"layout\": \"vertical\"\n },\n \"scrum-product-owner\": {\n \"columns\": {\n \"Backlog Items\": [\n \"draft\"\n ],\n \"Ready for Sprint\": [\n \"review\"\n ],\n \"Sprint Committed\": [\n \"ready\"\n ],\n \"In Development\": [\n \"active\"\n ],\n \"Ready for Review\": [\n \"done\"\n ],\n \"Released\": [\n \"archived\"\n ],\n \"Issues\": [\n \"paused\",\n \"discarded\"\n ]\n },\n \"theme\": \"minimal\",\n \"layout\": \"grid\"\n },\n \"scrum-developer\": {\n \"columns\": {\n \"To Do\": [\n \"ready\"\n ],\n \"In Progress\": [\n \"active\"\n ],\n \"Code Review\": [\n \"done\"\n ],\n \"Done\": [\n \"archived\"\n ],\n \"Blocked\": [\n \"paused\"\n ]\n },\n \"theme\": \"dark\",\n \"layout\": \"horizontal\"\n },\n \"scrum-master-dashboard\": {\n \"columns\": {\n \"Sprint Planning\": [\n \"draft\",\n \"review\"\n ],\n \"Active Sprint\": [\n \"ready\",\n \"active\"\n ],\n \"Sprint Review\": [\n \"done\"\n ],\n \"Retrospective\": [\n \"archived\"\n ],\n \"Impediments\": [\n \"paused\",\n \"discarded\"\n ]\n },\n \"theme\": \"corporate\",\n \"layout\": \"grid\"\n }\n },\n \"agent_integration\": {\n \"description\": \"Agent integration proposal for Scrum methodology automation\",\n \"required_agents\": [\n {\n \"id\": \"agent:scrum-master\",\n \"engine\": {\n \"type\": \"local\",\n \"entrypoint\": \"@gitgov/agent-scrum-master\"\n },\n \"triggers\": [\n {\n \"event\": \"sprint_end_approaching\",\n \"action\": \"create_sprint_review_tasks\"\n },\n {\n \"event\": \"daily_standup_time\",\n \"action\": \"generate_standup_report\"\n },\n {\n \"event\": \"impediment_detected\",\n \"action\": \"escalate_to_product_owner\"\n }\n ],\n \"knowledge_dependencies\": [\n \"blueprints/scrum_ceremonies.md\",\n \"blueprints/impediment_resolution.md\"\n ]\n },\n {\n \"id\": \"agent:product-owner-assistant\",\n \"engine\": {\n \"type\": \"mcp\",\n \"url\": \"http://localhost:8080/product-owner-mcp\"\n },\n \"triggers\": [\n {\n \"event\": \"backlog_grooming_needed\",\n \"action\": \"prioritize_product_backlog\"\n },\n {\n \"event\": \"sprint_planning_started\",\n \"action\": \"assist_sprint_planning\"\n }\n ],\n \"knowledge_dependencies\": [\n \"blueprints/product_vision.md\",\n \"blueprints/user_stories_template.md\"\n ]\n }\n ],\n \"automation_rules\": [\n {\n \"trigger\": \"sprint_started\",\n \"agent\": \"agent:scrum-master\",\n \"action\": \"create_daily_standup_tasks\"\n },\n {\n \"trigger\": \"task_blocked_for_24h\",\n \"agent\": \"agent:scrum-master\",\n \"action\": \"escalate_impediment\"\n },\n {\n \"trigger\": \"sprint_capacity_exceeded\",\n \"agent\": \"agent:product-owner-assistant\",\n \"action\": \"suggest_scope_reduction\"\n }\n ]\n }\n}","export * from \"./checksum\";\nexport * from \"./signatures\";\n","export * from \"./actor_factory\";\nexport * from \"./agent_factory\";\nexport * from \"./task_factory\";\nexport * from \"./cycle_factory\";\nexport * from \"./execution_factory\";\nexport * from \"./changelog_factory\";\nexport * from \"./feedback_factory\";\nexport * from \"./workflow_methodology_factory\";\nexport * from \"./embedded_metadata_factory\";\n","import type { ValidateFunction } from \"ajv\";\nimport type { WorkflowMethodologyRecord } from \"../types\";\nimport { SchemaValidationCache } from \"../schemas/schema_cache\";\nimport { Schemas } from '../schemas';\n\n// --- Schema Validation ---\nexport function validateWorkflowMethodologyConfigSchema(\n data: unknown\n): [boolean, ValidateFunction[\"errors\"]] {\n const validateSchema = SchemaValidationCache.getValidatorFromSchema(Schemas.WorkflowMethodologyRecord);\n const isValid = validateSchema(data) as boolean;\n return [isValid, validateSchema.errors];\n}\n\n/**\n * Type guard to check if data is a valid WorkflowMethodologyConfig.\n */\nexport function isWorkflowMethodologyConfig(data: unknown): data is WorkflowMethodologyRecord {\n const validateSchema = SchemaValidationCache.getValidatorFromSchema(Schemas.WorkflowMethodologyRecord);\n return validateSchema(data) as boolean;\n}\n\n/**\n * Validates a WorkflowMethodologyConfig and returns detailed validation result.\n * Use this in factories and adapters for comprehensive error reporting.\n */\nexport function validateWorkflowMethodologyConfigDetailed(data: unknown): {\n isValid: boolean;\n errors: Array<{\n field: string;\n message: string;\n value: unknown;\n }>;\n} {\n const [isValid, ajvErrors] = validateWorkflowMethodologyConfigSchema(data);\n\n const formattedErrors = ajvErrors ? ajvErrors.map(error => ({\n field: error.instancePath || error.schemaPath || 'root',\n message: error.message || 'Validation failed',\n value: error.data\n })) : [];\n\n return {\n isValid,\n errors: formattedErrors\n };\n}\n\n/**\n * Validates configuration structure and business rules\n * @param config The workflow methodology configuration to validate\n */\nexport function validateWorkflowMethodologyConfigBusinessRules(\n config: WorkflowMethodologyRecord\n): {\n isValid: boolean;\n errors: Array<{\n field: string;\n message: string;\n value: unknown;\n }>;\n} {\n const errors: Array<{ field: string; message: string; value: unknown }> = [];\n\n // Validate state_transitions have valid structure\n const validStates = ['draft', 'review', 'ready', 'active', 'done', 'archived', 'paused', 'discarded'];\n\n for (const [targetState, transition] of Object.entries(config.state_transitions)) {\n if (!validStates.includes(targetState)) {\n errors.push({\n field: `state_transitions.${targetState}`,\n message: `Invalid target state: ${targetState}`,\n value: targetState\n });\n }\n\n // Validate 'from' states are valid\n if (transition?.from) {\n for (const fromState of transition.from) {\n if (!validStates.includes(fromState)) {\n errors.push({\n field: `state_transitions.${targetState}.from`,\n message: `Invalid source state: ${fromState}`,\n value: fromState\n });\n }\n }\n }\n\n // Validate custom_rules reference existing rules\n if (transition?.requires?.custom_rules && config.custom_rules) {\n for (const ruleId of transition.requires.custom_rules) {\n if (!config.custom_rules[ruleId]) {\n errors.push({\n field: `state_transitions.${targetState}.requires.custom_rules`,\n message: `Custom rule '${ruleId}' not defined in custom_rules section`,\n value: ruleId\n });\n }\n }\n }\n }\n\n // Validate custom_rules have valid validation types\n if (config.custom_rules) {\n const validValidationTypes = ['assignment_required', 'sprint_capacity', 'epic_complexity', 'custom'];\n\n for (const [ruleId, rule] of Object.entries(config.custom_rules)) {\n if (rule && !validValidationTypes.includes(rule.validation)) {\n errors.push({\n field: `custom_rules.${ruleId}.validation`,\n message: `Invalid validation type: ${rule.validation}`,\n value: rule.validation\n });\n }\n }\n }\n\n return {\n isValid: errors.length === 0,\n errors\n };\n}\n","import type { WorkflowMethodologyRecord } from \"../types\";\nimport {\n validateWorkflowMethodologyConfigDetailed,\n validateWorkflowMethodologyConfigBusinessRules\n} from \"../validation/workflow_methodology_validator\";\nimport { DetailedValidationError } from \"../validation/common\";\n\n/**\n * Creates a new, fully-formed WorkflowMethodologyConfig with validation.\n * Follows the same pattern as createTaskRecord, createActorRecord, etc.\n */\nexport async function createWorkflowMethodologyConfig(\n payload: Partial<WorkflowMethodologyRecord>\n): Promise<WorkflowMethodologyRecord> {\n\n // Build config with defaults for optional fields\n const config: WorkflowMethodologyRecord = {\n version: payload.version || '1.0.0',\n name: payload.name || 'Custom Methodology',\n description: payload.description,\n state_transitions: payload.state_transitions || {\n review: {\n from: ['draft'],\n requires: {\n command: 'gitgov task submit',\n signatures: {\n '__default__': {\n role: 'submitter',\n capability_roles: ['author'],\n min_approvals: 1\n }\n }\n }\n }\n },\n custom_rules: payload.custom_rules,\n view_configs: payload.view_configs || {\n 'kanban-4col': {\n columns: {\n 'Draft': ['draft'],\n 'In Progress': ['review', 'ready', 'active'],\n 'Done': ['done', 'archived']\n },\n theme: 'minimal',\n layout: 'horizontal'\n }\n },\n ...payload,\n } as WorkflowMethodologyRecord;\n\n // Use validator to check schema compliance with detailed errors\n const schemaValidation = validateWorkflowMethodologyConfigDetailed(config);\n if (!schemaValidation.isValid) {\n throw new DetailedValidationError('WorkflowMethodologyConfig', schemaValidation.errors);\n }\n\n // Use business rules validator for additional validation\n const businessRulesValidation = validateWorkflowMethodologyConfigBusinessRules(config);\n if (!businessRulesValidation.isValid) {\n throw new DetailedValidationError('WorkflowMethodologyConfig (Business Rules)', businessRulesValidation.errors);\n }\n\n return config;\n}\n\n/**\n * Creates a default GitGovernance workflow methodology configuration\n */\nexport async function createDefaultWorkflowMethodologyConfig(): Promise<WorkflowMethodologyRecord> {\n return createWorkflowMethodologyConfig({\n version: '1.0.0',\n name: 'GitGovernance Default Methodology',\n description: 'Standard GitGovernance workflow with quality gates and agent collaboration',\n state_transitions: {\n review: {\n from: ['draft'],\n requires: {\n command: 'gitgov task submit',\n signatures: {\n '__default__': {\n role: 'submitter',\n capability_roles: ['author'],\n min_approvals: 1\n }\n }\n }\n },\n ready: {\n from: ['review'],\n requires: {\n command: 'gitgov task approve',\n signatures: {\n '__default__': {\n role: 'approver',\n capability_roles: ['approver:product'],\n min_approvals: 1\n },\n 'design': {\n role: 'approver',\n capability_roles: ['approver:design'],\n min_approvals: 1\n },\n 'quality': {\n role: 'approver',\n capability_roles: ['approver:quality'],\n min_approvals: 1\n }\n }\n }\n },\n active: {\n from: ['ready'],\n requires: {\n event: 'first_execution_record_created',\n custom_rules: ['task_must_have_valid_assignment_for_executor']\n }\n },\n done: {\n from: ['active'],\n requires: {\n command: 'gitgov task complete',\n signatures: {\n '__default__': {\n role: 'approver',\n capability_roles: ['approver:quality'],\n min_approvals: 1\n }\n }\n }\n },\n archived: {\n from: ['done'],\n requires: {\n event: 'changelog_record_created'\n }\n },\n paused: {\n from: ['active', 'review'],\n requires: {\n event: 'feedback_blocking_created'\n }\n }\n },\n custom_rules: {\n 'task_must_have_valid_assignment_for_executor': {\n description: 'Task must have a valid assignment before execution can begin',\n validation: 'assignment_required'\n },\n 'task_must_be_in_active_sprint': {\n description: 'Task must belong to an active sprint cycle',\n validation: 'sprint_capacity'\n },\n 'epic_promotion_required': {\n description: 'Complex tasks must be promoted to epic with child cycles',\n validation: 'epic_complexity'\n }\n },\n view_configs: {\n 'kanban-4col': {\n columns: {\n 'Draft': ['draft'],\n 'In Progress': ['review', 'ready', 'active'],\n 'Review': ['done'],\n 'Done': ['archived']\n },\n theme: 'minimal',\n layout: 'horizontal'\n },\n 'kanban-7col': {\n columns: {\n 'Draft': ['draft'],\n 'Review': ['review'],\n 'Ready': ['ready'],\n 'Active': ['active'],\n 'Done': ['done'],\n 'Archived': ['archived'],\n 'Blocked': ['paused']\n },\n theme: 'corporate',\n layout: 'vertical'\n }\n }\n });\n}\n","import type { EmbeddedMetadataRecord, GitGovRecordPayload } from '../types';\nimport type { Signature, EmbeddedMetadataHeader } from '../types/embedded.types';\nimport { validateEmbeddedMetadataDetailed } from '../validation/embedded_metadata_validator';\nimport { DetailedValidationError } from '../validation/common';\nimport { calculatePayloadChecksum } from '../crypto/checksum';\nimport { signPayload } from '../crypto/signatures';\n\n/**\n * Configuration for signature generation\n * Extends Signature with privateKey for signing\n */\nexport type SignatureConfig = Partial<Pick<Signature, 'keyId' | 'role' | 'notes'>> & {\n /** Private key for signing (if not provided, creates unsigned test signature) */\n privateKey?: string;\n};\n\n/**\n * Options for creating an EmbeddedMetadataRecord\n */\nexport type CreateEmbeddedMetadataOptions = {\n /** Header configuration (partial override, excludes auto-generated fields) */\n header?: Partial<Pick<EmbeddedMetadataHeader, 'version' | 'type' | 'schemaUrl' | 'schemaChecksum'>>;\n /** Signature configuration (if not provided, uses default test signature) */\n signature?: SignatureConfig;\n /** Custom signatures array (if provided, overrides signature config) */\n signatures?: Signature[];\n};\n\n/**\n * Creates a test signature for development/testing purposes (unsigned)\n * Use this only for testing when you don't have a real private key\n * \n * @param keyId - The key ID for the signature (default: 'human:test-user')\n * @param role - The role for the signature (default: 'author')\n * @param notes - Notes for the signature (default: 'Test signature - unsigned')\n * @returns Signature object (with dummy signature value)\n */\nexport function createTestSignature(\n keyId: string = 'human:test-user',\n role: string = 'author',\n notes: string = 'Test signature - unsigned'\n): Signature {\n const timestamp = Math.floor(Date.now() / 1000);\n return {\n keyId,\n role,\n notes,\n signature: 'dGVzdHNpZ25hdHVyZWJhc2U2NGVuY29kZWRkdW1teWZvcnRlc3RpbmdwdXJwb3Nlc29ubHlub3RyZWFsY3J5cHRvZ3JhcGh5PT0=', // Dummy 88-char base64 for testing (matches Ed25519 signature length)\n timestamp\n };\n}\n\n/**\n * Infers the header type from the payload structure\n * \n * @param payload - The record payload\n * @returns The inferred type string\n */\nfunction inferTypeFromPayload(payload: GitGovRecordPayload): string {\n // Check for distinctive properties of each record type\n if ('engine' in payload) return 'agent';\n if ('taskId' in payload && 'result' in payload) return 'execution';\n if ('relatedTasks' in payload && 'completedAt' in payload) return 'changelog';\n if ('entityType' in payload && 'entityId' in payload) return 'feedback';\n if ('status' in payload && 'taskIds' in payload) return 'cycle';\n if ('priority' in payload && 'description' in payload) return 'task';\n if ('displayName' in payload && 'publicKey' in payload) return 'actor';\n\n return 'custom';\n}\n\n\n/**\n * Creates a complete EmbeddedMetadataRecord with validation\n * \n * @param payload - The record payload (ActorRecord, TaskRecord, etc.)\n * @param options - Optional configuration for the embedded metadata\n * @returns Promise<EmbeddedMetadataRecord<T>> - The validated embedded metadata record\n * \n * @example\n * ```typescript\n * const actorPayload: ActorRecord = {\n * id: 'human:john-doe',\n * type: 'human',\n * displayName: 'John Doe',\n * publicKey: 'abc123...',\n * roles: ['developer']\n * };\n * \n * const embedded = await createEmbeddedMetadataRecord(actorPayload);\n * ```\n */\nexport async function createEmbeddedMetadataRecord<T extends GitGovRecordPayload>(\n payload: T,\n options: CreateEmbeddedMetadataOptions = {}\n): Promise<EmbeddedMetadataRecord<T>> {\n const inferredType = inferTypeFromPayload(payload);\n const type = options.header?.type || inferredType;\n\n // Calculate real payload checksum using crypto module\n const payloadChecksum = calculatePayloadChecksum(payload);\n\n // Generate signature(s)\n let signatures: Signature[];\n if (options.signatures) {\n // Use provided signatures array\n signatures = options.signatures;\n } else if (options.signature?.privateKey) {\n // Sign with provided private key\n const keyId = options.signature.keyId || 'human:test-user';\n const role = options.signature.role || 'author';\n const notes = options.signature.notes || 'Created via factory';\n signatures = [signPayload(payload, options.signature.privateKey, keyId, role, notes)];\n } else {\n // Create unsigned test signature\n const keyId = options.signature?.keyId || 'human:test-user';\n const role = options.signature?.role || 'author';\n const notes = options.signature?.notes || 'Test signature - unsigned';\n signatures = [createTestSignature(keyId, role, notes)];\n }\n\n // Build header (using Record for flexibility, will be validated)\n const header: Record<string, unknown> = {\n version: '1.0', // Always 1.0 (schema enforces this)\n type: type,\n payloadChecksum,\n signatures,\n ...(type === 'custom' && {\n schemaUrl: options.header?.schemaUrl,\n schemaChecksum: options.header?.schemaChecksum\n })\n };\n\n const embeddedRecord = {\n header,\n payload\n } as EmbeddedMetadataRecord<T>;\n\n // Validate the complete embedded metadata record\n const validation = validateEmbeddedMetadataDetailed(embeddedRecord);\n if (!validation.isValid) {\n throw new DetailedValidationError('EmbeddedMetadataRecord', validation.errors);\n }\n\n return embeddedRecord;\n}\n\n","export * from './actor_validator';\nexport * from './agent_validator';\nexport * from './task_validator';\nexport * from './cycle_validator';\nexport * from './execution_validator';\nexport * from './changelog_validator';\nexport * from './feedback_validator';\nexport * from './embedded_metadata_validator';\nexport * from './workflow_methodology_validator';\nexport type { ValidationResult } from './errors';\n","export * from \"./generated\";\nexport * from \"./common.types\";\nexport * from \"./embedded.types\";\n","export * from './event_bus';\nexport * from './types';\n","import { EventEmitter } from 'events';\n\nimport type {\n BaseEvent,\n GitGovEvent,\n EventHandler,\n EventSubscription\n} from './types';\n\n// Generate unique subscription IDs\nfunction generateSubscriptionId(): string {\n return `subscription:${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n}\n\n/**\n * Event Stream interface - Contract for both Local and Global bus implementations\n */\nexport interface IEventStream {\n /**\n * Publish an event to the bus\n */\n publish(event: BaseEvent): void;\n\n /**\n * Subscribe to events of a specific type\n */\n subscribe<T extends BaseEvent = BaseEvent>(\n eventType: string,\n handler: EventHandler<T>\n ): EventSubscription;\n\n /**\n * Unsubscribe from events\n */\n unsubscribe(subscriptionId: string): boolean;\n\n /**\n * Get all active subscriptions\n */\n getSubscriptions(): EventSubscription[];\n\n /**\n * Clear all subscriptions (for testing/cleanup)\n */\n clearSubscriptions(): void;\n\n /**\n * Wait for all pending event handlers to complete (for testing)\n */\n waitForIdle(options?: { timeout?: number }): Promise<void>;\n}\n\n/**\n * Local EventBus implementation using Node.js EventEmitter\n * \n * This is the \"Free Tier\" implementation that operates in-memory\n * and provides synchronous event delivery for local-first usage.\n * \n * Design Principles:\n * - Decoupled Producers: Adapters emit events without knowing consumers\n * - Pluggable Consumers: Event handlers can be added/removed dynamically \n * - Type Safety: Full TypeScript support for all event types\n * - Performance: In-memory delivery with minimal overhead\n */\nexport class EventBus implements IEventStream {\n private emitter: EventEmitter;\n private subscriptions: Map<string, EventSubscription>;\n private pendingHandlers: Set<Promise<void>>;\n\n constructor() {\n this.emitter = new EventEmitter();\n this.subscriptions = new Map();\n this.pendingHandlers = new Set();\n\n // Increase max listeners for high-throughput scenarios\n this.emitter.setMaxListeners(100);\n }\n\n /**\n * Publish an event to all subscribers\n * \n * @param event - The event to publish\n */\n publish(event: BaseEvent): void {\n // Validate event structure\n if (!event.type || typeof event.type !== 'string') {\n throw new Error('Event must have a valid type string');\n }\n\n if (!event.timestamp || typeof event.timestamp !== 'number') {\n throw new Error('Event must have a valid timestamp number');\n }\n\n if (!event.source || typeof event.source !== 'string') {\n throw new Error('Event must have a valid source string');\n }\n\n // Emit the event\n this.emitter.emit(event.type, event);\n\n // Also emit on wildcard for debugging/monitoring\n this.emitter.emit('*', event);\n }\n\n /**\n * Subscribe to events of a specific type\n * \n * @param eventType - The event type to subscribe to\n * @param handler - The handler function to call when event is received\n * @returns EventSubscription object with subscription details\n */\n subscribe<T extends BaseEvent = BaseEvent>(\n eventType: string,\n handler: EventHandler<T>\n ): EventSubscription {\n // Generate unique subscription ID\n const subscriptionId = generateSubscriptionId();\n\n // Wrap handler to catch errors, provide context, AND track pending handlers\n const wrappedHandler = async (event: T) => {\n // Create promise that tracks this handler execution\n const handlerPromise = (async () => {\n try {\n await handler(event);\n } catch (error) {\n console.error(`Error in event handler for ${eventType}:`, error);\n // In production, this could emit an error event or log to monitoring\n }\n })();\n\n // Track this promise\n this.pendingHandlers.add(handlerPromise);\n\n // Remove from tracking when done\n handlerPromise.finally(() => {\n this.pendingHandlers.delete(handlerPromise);\n });\n\n // Don't await - let it run in background (fire-and-forget for publish())\n // But tests can call waitForIdle() to wait for all handlers\n };\n\n // Create subscription object (store wrapped handler for unsubscribing)\n const subscription: EventSubscription = {\n id: subscriptionId,\n eventType,\n handler: wrappedHandler as EventHandler, // Store wrapped handler\n metadata: {\n createdAt: Date.now()\n }\n };\n\n // Register with EventEmitter\n this.emitter.on(eventType, wrappedHandler);\n\n // Store subscription for management\n this.subscriptions.set(subscriptionId, subscription);\n\n return subscription;\n }\n\n /**\n * Unsubscribe from events\n * \n * @param subscriptionId - The subscription ID to remove\n * @returns true if subscription was found and removed, false otherwise\n */\n unsubscribe(subscriptionId: string): boolean {\n const subscription = this.subscriptions.get(subscriptionId);\n if (!subscription) {\n return false;\n }\n\n // Remove from EventEmitter\n this.emitter.removeListener(subscription.eventType, subscription.handler);\n\n // Remove from our tracking\n this.subscriptions.delete(subscriptionId);\n\n return true;\n }\n\n /**\n * Get all active subscriptions\n * \n * @returns Array of all active subscriptions\n */\n getSubscriptions(): EventSubscription[] {\n return Array.from(this.subscriptions.values());\n }\n\n /**\n * Clear all subscriptions (for testing/cleanup)\n */\n clearSubscriptions(): void {\n this.emitter.removeAllListeners();\n this.subscriptions.clear();\n }\n\n /**\n * Get subscription count for a specific event type\n * \n * @param eventType - The event type to count subscribers for\n * @returns Number of active subscriptions for the event type\n */\n getSubscriptionCount(eventType: string): number {\n return this.emitter.listenerCount(eventType);\n }\n\n /**\n * Get all event types that have active subscriptions\n * \n * @returns Array of event types with active subscriptions\n */\n getActiveEventTypes(): string[] {\n return this.emitter.eventNames() as string[];\n }\n\n /**\n * Subscribe to all events (wildcard subscription)\n * Useful for debugging, monitoring, or logging\n * \n * @param handler - Handler that will receive all events\n * @returns EventSubscription object\n */\n subscribeToAll(handler: EventHandler<BaseEvent>): EventSubscription {\n return this.subscribe('*', handler);\n }\n\n /**\n * Wait for all pending event handlers to complete.\n * This is primarily useful for testing to ensure event handlers finish before assertions.\n * \n * In production, events are fire-and-forget for performance.\n * In tests, use this to synchronize and avoid race conditions.\n * \n * @param options - Optional configuration\n * @param options.timeout - Maximum time to wait in ms (default: 5000)\n * @returns Promise that resolves when all handlers complete or timeout occurs\n * \n * @example\n * ```typescript\n * await feedbackAdapter.create(...); // publishes event\n * await eventBus.waitForIdle(); // wait for BacklogAdapter.handleFeedbackCreated()\n * const task = await backlogAdapter.getTask(taskId);\n * expect(task.status).toBe('paused'); // now safe to assert\n * ```\n */\n async waitForIdle(options: { timeout?: number } = {}): Promise<void> {\n const timeout = options.timeout ?? 5000;\n const startTime = Date.now();\n\n while (this.pendingHandlers.size > 0) {\n // Check timeout\n if (Date.now() - startTime > timeout) {\n const pendingCount = this.pendingHandlers.size;\n console.warn(`EventBus.waitForIdle() timeout after ${timeout}ms with ${pendingCount} handlers still pending`);\n break;\n }\n\n // Wait for current batch of handlers\n if (this.pendingHandlers.size > 0) {\n await Promise.race([\n Promise.all(Array.from(this.pendingHandlers)),\n new Promise(resolve => setTimeout(resolve, 10)) // Re-check every 10ms\n ]);\n }\n }\n }\n}\n\n/**\n * Singleton instance for application-wide event bus usage\n */\nexport const eventBus = new EventBus();\n\n/**\n * Type-safe event publisher helper\n * Ensures events conform to GitGovEvent union type\n */\nexport function publishEvent(event: GitGovEvent): void {\n eventBus.publish(event);\n}\n\n/**\n * Type-safe event subscriber helper\n * Provides better TypeScript inference for specific event types\n */\nexport function subscribeToEvent<T extends GitGovEvent>(\n eventType: T['type'],\n handler: EventHandler<T>\n): EventSubscription {\n return eventBus.subscribe(eventType, handler);\n}\n","export { DiagramGenerator, DiagramMetrics } from './diagram_generator';\nexport {\n MermaidRenderer,\n ContentSanitizer,\n MermaidValidator,\n type DiagramOptions,\n RenderingError\n} from './mermaid_renderer';\nexport {\n RelationshipAnalyzer,\n type RelationshipGraph,\n type DiagramNode,\n type DiagramEdge,\n\n CircularDependencyError\n} from './relationship_analyzer';\n","import type { TaskRecord } from '../types';\nimport type { CycleRecord } from '../types';\nimport { DetailedValidationError } from '../validation/common';\n\n/**\n * Specialized module for validating graph input data\n * Follows the Module pattern for technical capabilities\n */\nexport class GraphValidator {\n /**\n * Validates record integrity before processing\n */\n static validateRecordIntegrity(cycles: CycleRecord[], tasks: TaskRecord[]): void {\n if (!Array.isArray(cycles) || !Array.isArray(tasks)) {\n throw new DetailedValidationError('RelationshipAnalyzer', [\n { field: 'cycles', message: 'must be an array', value: cycles },\n { field: 'tasks', message: 'must be an array', value: tasks }\n ]);\n }\n\n this.validateCycles(cycles);\n this.validateTasks(tasks);\n }\n\n private static validateCycles(cycles: CycleRecord[]): void {\n for (let i = 0; i < cycles.length; i++) {\n const cycle = cycles[i];\n if (!cycle) {\n throw new DetailedValidationError('CycleRecord', [\n { field: `index_${i}`, message: 'cycle is undefined', value: cycle }\n ]);\n }\n\n try {\n if (!cycle.id || typeof cycle.id !== 'string') {\n throw new DetailedValidationError('CycleRecord', [\n { field: 'id', message: 'must be a non-empty string', value: cycle.id }\n ]);\n }\n\n if (!cycle.title || typeof cycle.title !== 'string') {\n throw new DetailedValidationError('CycleRecord', [\n { field: 'title', message: 'must be a non-empty string', value: cycle.title }\n ]);\n }\n } catch (error) {\n if (error instanceof DetailedValidationError) {\n throw error;\n }\n throw new DetailedValidationError('CycleRecord', [\n { field: `index_${i}`, message: error instanceof Error ? error.message : String(error), value: cycle }\n ]);\n }\n }\n }\n\n private static validateTasks(tasks: TaskRecord[]): void {\n for (let i = 0; i < tasks.length; i++) {\n const task = tasks[i];\n if (!task) {\n throw new DetailedValidationError('TaskRecord', [\n { field: `index_${i}`, message: 'task is undefined', value: task }\n ]);\n }\n\n const sourceFile = this.getSourceFile(task);\n\n try {\n if (!task.id || typeof task.id !== 'string') {\n throw new DetailedValidationError('TaskRecord', [\n { field: 'id', message: 'must be a non-empty string', value: task.id }\n ]);\n }\n\n if (!task.title || typeof task.title !== 'string') {\n throw new DetailedValidationError('TaskRecord', [\n { field: 'title', message: 'must be a non-empty string', value: task.title }\n ]);\n }\n\n if (!task.description || typeof task.description !== 'string') {\n throw new DetailedValidationError('TaskRecord', [\n { field: 'description', message: 'must be a non-empty string', value: task.description }\n ]);\n }\n } catch (error) {\n if (error instanceof DetailedValidationError) {\n throw error;\n }\n const fileInfo = sourceFile !== 'unknown' ? `\\nš File: .gitgov/tasks/${sourceFile}` : '';\n throw new DetailedValidationError('TaskRecord', [\n { field: `index_${i}`, message: `${error instanceof Error ? error.message : String(error)}${fileInfo}\\nš” Check this file for missing or invalid fields in payload.`, value: task }\n ]);\n }\n }\n }\n\n /**\n * Safely extracts source file information from task record\n */\n private static getSourceFile(task: TaskRecord): string {\n if (task && typeof task === 'object' && '_sourceFile' in task) {\n const sourceFile = (task as TaskRecord & { _sourceFile?: unknown })._sourceFile;\n return typeof sourceFile === 'string' ? sourceFile : 'unknown';\n }\n return 'unknown';\n }\n}","import type { TaskRecord } from '../types';\nimport type { CycleRecord } from '../types';\nimport { GraphValidator } from './graph_validator';\n\nexport interface DiagramNode {\n id: string;\n type: 'cycle' | 'epic-task' | 'task';\n title: string;\n status?: string;\n tags?: string[];\n originalId: string;\n}\n\nexport interface DiagramEdge {\n from: string;\n to: string;\n type: 'hierarchy';\n}\n\nexport interface RelationshipGraph {\n nodes: DiagramNode[];\n edges: DiagramEdge[];\n metadata: {\n nodeCount: number;\n edgeCount: number;\n generatedAt: string;\n duplicatesRemoved?: {\n nodes: number;\n edges: number;\n };\n };\n}\n\nexport class CircularDependencyError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'CircularDependencyError';\n }\n}\n\nexport class RelationshipAnalyzer {\n\n /**\n * Analyzes relationships between cycles and tasks to build a complete graph\n */\n analyzeRelationships(cycles: CycleRecord[], tasks: TaskRecord[]): RelationshipGraph {\n // Validate record integrity using specialized validator\n GraphValidator.validateRecordIntegrity(cycles, tasks);\n\n const rawGraph = this.buildRawGraph(cycles, tasks);\n const cleanGraph = this.processAndValidateGraph(rawGraph);\n\n return this.createRelationshipGraph(rawGraph, cleanGraph);\n }\n\n /**\n * Builds the initial graph with potential duplicates\n */\n private buildRawGraph(cycles: CycleRecord[], tasks: TaskRecord[]): { nodes: DiagramNode[], edges: DiagramEdge[] } {\n const rawNodes = this.buildNodes(cycles, tasks);\n const rawEdges = this.buildEdges(cycles, tasks, rawNodes);\n return { nodes: rawNodes, edges: rawEdges };\n }\n\n /**\n * Processes raw graph to remove duplicates and validate structure\n */\n private processAndValidateGraph(rawGraph: { nodes: DiagramNode[], edges: DiagramEdge[] }): { nodes: DiagramNode[], edges: DiagramEdge[] } {\n // Detect and report duplicates as warnings\n this.reportDuplicateWarnings(rawGraph.nodes, rawGraph.edges);\n\n // Deduplicate nodes and edges\n const nodes = this.deduplicateNodes(rawGraph.nodes);\n const edges = this.deduplicateEdges(rawGraph.edges);\n\n // Detect circular dependencies\n this.detectCircularDependencies(edges);\n\n return { nodes, edges };\n }\n\n /**\n * Creates the final RelationshipGraph with metadata\n */\n private createRelationshipGraph(\n rawGraph: { nodes: DiagramNode[], edges: DiagramEdge[] },\n cleanGraph: { nodes: DiagramNode[], edges: DiagramEdge[] }\n ): RelationshipGraph {\n return {\n nodes: cleanGraph.nodes,\n edges: cleanGraph.edges,\n metadata: {\n nodeCount: cleanGraph.nodes.length,\n edgeCount: cleanGraph.edges.length,\n generatedAt: new Date().toISOString(),\n duplicatesRemoved: {\n nodes: rawGraph.nodes.length - cleanGraph.nodes.length,\n edges: rawGraph.edges.length - cleanGraph.edges.length,\n },\n },\n };\n }\n\n\n\n /**\n * Generates clean node ID for Mermaid syntax (removes timestamp, converts hyphens)\n */\n generateNodeId(record: CycleRecord | TaskRecord): string {\n return record.id\n .replace(/^\\d+-/, '') // Remove timestamp prefix\n .replace(/-/g, '_'); // Convert hyphens to underscores\n }\n\n\n\n /**\n * Builds all nodes from cycles and tasks\n */\n private buildNodes(cycles: CycleRecord[], tasks: TaskRecord[]): DiagramNode[] {\n const nodes: DiagramNode[] = [];\n\n // Add cycle nodes\n for (const cycle of cycles) {\n nodes.push({\n id: this.generateNodeId(cycle),\n type: 'cycle',\n title: cycle.title,\n status: cycle.status,\n tags: cycle.tags || [],\n originalId: cycle.id,\n });\n }\n\n // Add task nodes (both epic and regular)\n for (const task of tasks) {\n const isEpic = this.isEpicTask(task);\n\n // Use title field for task display\n const title = task.title || 'Untitled Task';\n\n const node: DiagramNode = {\n id: this.generateNodeId(task),\n type: isEpic ? 'epic-task' : 'task',\n title,\n status: task.status,\n originalId: task.id,\n };\n if (task.tags) {\n node.tags = task.tags;\n }\n nodes.push(node);\n }\n\n return nodes;\n }\n\n /**\n * Builds all hierarchical edges from protocol relationships\n */\n private buildEdges(cycles: CycleRecord[], _tasks: TaskRecord[], nodes: DiagramNode[]): DiagramEdge[] {\n const edges: DiagramEdge[] = [];\n const nodeMap = new Map(nodes.map(n => [n.originalId, n.id]));\n\n // Build cycle -> child cycle relationships\n for (const cycle of cycles) {\n if (cycle.childCycleIds) {\n for (const childId of cycle.childCycleIds) {\n const fromId = nodeMap.get(cycle.id);\n const toId = nodeMap.get(childId);\n\n if (fromId && toId) {\n edges.push({\n from: fromId,\n to: toId,\n type: 'hierarchy',\n });\n }\n }\n }\n\n // Build cycle -> task relationships \n if (cycle.taskIds) {\n for (const taskId of cycle.taskIds) {\n const fromId = nodeMap.get(cycle.id);\n const toId = nodeMap.get(taskId);\n\n if (fromId && toId) {\n edges.push({\n from: fromId,\n to: toId,\n type: 'hierarchy',\n });\n }\n }\n }\n }\n\n return edges;\n }\n\n /**\n * Checks if a task is an epic based on tags\n */\n private isEpicTask(task: TaskRecord): boolean {\n return task.tags?.some(tag => tag.startsWith('epic:')) ?? false;\n }\n\n /**\n * Detects circular dependencies in the graph\n */\n private detectCircularDependencies(edges: DiagramEdge[]): void {\n const graph = new Map<string, string[]>();\n\n // Build adjacency list\n for (const edge of edges) {\n if (!graph.has(edge.from)) {\n graph.set(edge.from, []);\n }\n graph.get(edge.from)!.push(edge.to);\n }\n\n // DFS to detect cycles with path tracking\n const visited = new Set<string>();\n const recursionStack = new Set<string>();\n const path: string[] = [];\n\n for (const node of graph.keys()) {\n if (!visited.has(node)) {\n const cyclePath = this.findCycleDFS(node, graph, visited, recursionStack, path);\n if (cyclePath.length > 0) {\n const cycleDescription = this.formatCycleError(cyclePath);\n throw new CircularDependencyError(cycleDescription);\n }\n }\n }\n }\n\n /**\n * DFS helper for circular dependency detection with path tracking\n */\n private findCycleDFS(\n node: string,\n graph: Map<string, string[]>,\n visited: Set<string>,\n recursionStack: Set<string>,\n path: string[]\n ): string[] {\n visited.add(node);\n recursionStack.add(node);\n path.push(node);\n\n const neighbors = graph.get(node) || [];\n for (const neighbor of neighbors) {\n if (!visited.has(neighbor)) {\n const cyclePath = this.findCycleDFS(neighbor, graph, visited, recursionStack, path);\n if (cyclePath.length > 0) {\n return cyclePath;\n }\n } else if (recursionStack.has(neighbor)) {\n // Found a cycle - extract the cycle path\n const cycleStartIndex = path.indexOf(neighbor);\n return path.slice(cycleStartIndex).concat([neighbor]);\n }\n }\n\n recursionStack.delete(node);\n path.pop();\n return [];\n }\n\n /**\n * Formats a circular dependency error with helpful context\n */\n private formatCycleError(cyclePath: string[]): string {\n const cycleNodes = cyclePath.slice(0, -1); // Remove duplicate at end\n const nodeNames = cycleNodes.map(nodeId => {\n // Try to extract readable name from node ID\n const cleanId = nodeId.replace(/^(cycle_|task_)/, '').replace(/_/g, '-');\n return cleanId;\n });\n\n let message = `Circular dependency detected in GitGovernance entities:\\n\\n`;\n message += `š Dependency Cycle:\\n`;\n\n for (let i = 0; i < cycleNodes.length; i++) {\n const current = nodeNames[i];\n const next = nodeNames[(i + 1) % nodeNames.length];\n message += ` ${current} ā ${next}\\n`;\n }\n\n message += `\\nš” To fix this issue:\\n`;\n message += ` 1. Review the childCycleIds in these cycle files:\\n`;\n cycleNodes.forEach(nodeId => {\n const cleanId = nodeId.replace(/^cycle_/, '').replace(/_/g, '-');\n message += ` - .gitgov/cycles/${cleanId}.json\\n`;\n });\n message += ` 2. Remove one of the circular references to break the cycle\\n`;\n message += ` 3. Consider if the dependency relationship is actually needed\\n`;\n\n return message;\n }\n\n /**\n * Reports duplicate nodes and edges as console warnings\n */\n private reportDuplicateWarnings(nodes: DiagramNode[], edges: DiagramEdge[]): void {\n // Analyze node duplicates\n const nodeCount = new Map<string, { count: number, sources: string[] }>();\n for (const node of nodes) {\n const current = nodeCount.get(node.id) || { count: 0, sources: [] };\n current.count++;\n current.sources.push(node.originalId);\n nodeCount.set(node.id, current);\n }\n\n const duplicateNodes = Array.from(nodeCount.entries())\n .filter(([_, data]) => data.count > 1);\n\n // Analyze edge duplicates\n const edgeCount = new Map<string, number>();\n for (const edge of edges) {\n const edgeKey = `${edge.from}->${edge.to}`;\n edgeCount.set(edgeKey, (edgeCount.get(edgeKey) || 0) + 1);\n }\n\n const duplicateEdges = Array.from(edgeCount.entries())\n .filter(([_, count]) => count > 1);\n\n // Report warnings if duplicates found\n if (duplicateNodes.length > 0 || duplicateEdges.length > 0) {\n console.warn('\\nā ļø GitGovernance Data Quality Warnings:');\n\n if (duplicateNodes.length > 0) {\n console.warn('\\nš¦ Duplicate Nodes Detected:');\n duplicateNodes.forEach(([id, data]) => {\n const cleanSources = [...new Set(data.sources)]; // Remove duplicate sources\n console.warn(` ⢠${id} (appears ${data.count} times)`);\n if (cleanSources.length > 1) {\n console.warn(` Sources: ${cleanSources.join(', ')}`);\n console.warn(` š” Fix: Check for duplicate cycle/task IDs in .gitgov/ files`);\n } else {\n console.warn(` Source: ${cleanSources[0]} (same ID referenced multiple times)`);\n console.warn(` š” Fix: Check for duplicate childCycleIds/taskIds references`);\n }\n });\n }\n\n if (duplicateEdges.length > 0) {\n console.warn('\\nš Duplicate Edges Detected:');\n duplicateEdges.forEach(([edge, count]) => {\n console.warn(` ⢠${edge} (appears ${count} times)`);\n });\n console.warn(' š” Fix: Check for duplicate references in childCycleIds/taskIds arrays');\n }\n\n console.warn('\\nāļø Auto-deduplication: Duplicates will be removed from the generated diagram');\n console.warn('š Recommendation: Run `gitgov lint` to identify and fix data quality issues\\n');\n }\n }\n\n /**\n * Removes duplicate nodes based on their ID (O(n) performance)\n */\n private deduplicateNodes(nodes: DiagramNode[]): DiagramNode[] {\n const nodeMap = new Map<string, DiagramNode>();\n\n // Use Map to automatically handle deduplication while preserving first occurrence\n for (const node of nodes) {\n if (!nodeMap.has(node.id)) {\n nodeMap.set(node.id, node);\n }\n }\n\n return Array.from(nodeMap.values());\n }\n\n /**\n * Removes duplicate edges based on from-to combination (O(n) performance)\n */\n private deduplicateEdges(edges: DiagramEdge[]): DiagramEdge[] {\n const edgeMap = new Map<string, DiagramEdge>();\n\n for (const edge of edges) {\n const edgeKey = `${edge.from}->${edge.to}`;\n if (!edgeMap.has(edgeKey)) {\n edgeMap.set(edgeKey, edge);\n }\n }\n\n return Array.from(edgeMap.values());\n }\n\n /**\n * Detects and reports duplicate nodes/edges for diagnostic purposes\n * Useful for testing and debugging data quality issues\n */\n detectDuplicates(cycles: CycleRecord[], tasks: TaskRecord[]): {\n duplicateNodes: Array<{ id: string, count: number, sources: string[] }>;\n duplicateEdges: Array<{ edge: string, count: number }>;\n } {\n const rawNodes = this.buildNodes(cycles, tasks);\n const rawEdges = this.buildEdges(cycles, tasks, rawNodes);\n\n // Analyze node duplicates\n const nodeCount = new Map<string, { count: number, sources: string[] }>();\n for (const node of rawNodes) {\n const current = nodeCount.get(node.id) || { count: 0, sources: [] };\n current.count++;\n current.sources.push(node.originalId);\n nodeCount.set(node.id, current);\n }\n\n const duplicateNodes = Array.from(nodeCount.entries())\n .filter(([_, data]) => data.count > 1)\n .map(([id, data]) => ({ id, count: data.count, sources: data.sources }));\n\n // Analyze edge duplicates\n const edgeCount = new Map<string, number>();\n for (const edge of rawEdges) {\n const edgeKey = `${edge.from}->${edge.to}`;\n edgeCount.set(edgeKey, (edgeCount.get(edgeKey) || 0) + 1);\n }\n\n const duplicateEdges = Array.from(edgeCount.entries())\n .filter(([_, count]) => count > 1)\n .map(([edge, count]) => ({ edge, count }));\n\n return { duplicateNodes, duplicateEdges };\n }\n\n /**\n * Filters cycles and tasks based on specified criteria\n */\n filterEntities(\n cycles: CycleRecord[],\n tasks: TaskRecord[],\n filters: {\n cycleId?: string;\n taskId?: string;\n packageName?: string;\n }\n ): { filteredCycles: CycleRecord[], filteredTasks: TaskRecord[] } {\n let filteredCycles = [...cycles];\n let filteredTasks = [...tasks];\n\n // Filter by specific cycle ID\n if (filters.cycleId) {\n const targetCycle = cycles.find(c => c.id === filters.cycleId);\n if (targetCycle) {\n // Include the target cycle and its related entities\n const relatedCycleIds = new Set([filters.cycleId]);\n const relatedTaskIds = new Set<string>();\n\n // Recursively add all descendant cycles\n const addDescendantCycles = (cycleId: string) => {\n const cycle = cycles.find(c => c.id === cycleId);\n if (cycle?.childCycleIds) {\n cycle.childCycleIds.forEach(childId => {\n if (!relatedCycleIds.has(childId)) {\n relatedCycleIds.add(childId);\n addDescendantCycles(childId); // Recursive call\n }\n });\n }\n };\n\n // Start recursive traversal from target cycle\n addDescendantCycles(filters.cycleId);\n\n // Add tasks from all related cycles\n cycles.forEach(cycle => {\n if (relatedCycleIds.has(cycle.id) && cycle.taskIds) {\n cycle.taskIds.forEach(taskId => relatedTaskIds.add(taskId));\n }\n });\n\n filteredCycles = cycles.filter(c => relatedCycleIds.has(c.id));\n filteredTasks = tasks.filter(t => relatedTaskIds.has(t.id));\n }\n }\n\n // Filter by specific task ID\n if (filters.taskId) {\n const targetTask = tasks.find(t => t.id === filters.taskId);\n if (targetTask) {\n filteredTasks = [targetTask];\n\n // Find cycles that contain this task\n filteredCycles = cycles.filter(c =>\n c.taskIds && c.taskIds.includes(filters.taskId!)\n );\n }\n }\n\n // Filter by package name (using tags)\n if (filters.packageName) {\n const packageTag = `package:${filters.packageName}`;\n\n filteredCycles = filteredCycles.filter(c =>\n c.tags && c.tags.includes(packageTag)\n );\n\n filteredTasks = filteredTasks.filter(t =>\n t.tags && t.tags.includes(packageTag)\n );\n }\n\n return { filteredCycles, filteredTasks };\n }\n}\n","import type { RelationshipGraph, DiagramNode, DiagramEdge } from './relationship_analyzer';\n\nexport interface DiagramOptions {\n layout: 'LR' | 'TD' | 'RL' | 'BT';\n includeEpicTasks: boolean;\n maxDepth: number;\n colorScheme: 'default' | 'dark' | 'minimal' | 'corporate';\n showAssignments: boolean;\n filterByStatus?: string[];\n}\n\nexport class RenderingError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'RenderingError';\n }\n}\n\nexport class ContentSanitizer {\n sanitizeNodeTitle(title: string): string {\n // Remove potentially dangerous characters for Mermaid, but preserve <br/> tags\n return title\n .replace(/<(?!br\\/?>)[^>]*>/g, '') // Remove HTML tags except <br/> and <br>\n .replace(/[\"']/g, '') // Remove quotes that could break syntax\n .substring(0, 150); // Increased limit to accommodate line breaks\n }\n\n sanitizeNodeId(id: string): string {\n // Ensure valid Mermaid node ID\n return id.replace(/[^a-zA-Z0-9_-]/g, '_');\n }\n\n sanitizeStatus(status: string): string {\n const allowedStatuses = [\n 'pending', 'in-progress', 'done', 'blocked',\n 'cancelled', 'draft', 'planning', 'active',\n 'completed', 'archived', 'paused', 'discarded',\n 'validated', 'audit_oracle_create', 'audit_oracle_close',\n 'ready', 'review', 'in_progress'\n ];\n return allowedStatuses.includes(status) ? status : 'unknown';\n }\n\n sanitizeGraph(graph: RelationshipGraph): RelationshipGraph {\n return {\n nodes: graph.nodes.map(node => {\n const sanitizedNode: DiagramNode = {\n id: this.sanitizeNodeId(node.id),\n type: node.type,\n title: this.sanitizeNodeTitle(node.title),\n originalId: node.originalId,\n };\n\n if (node.status) {\n sanitizedNode.status = this.sanitizeStatus(node.status);\n }\n\n if (node.tags) {\n sanitizedNode.tags = node.tags;\n }\n\n return sanitizedNode;\n }),\n edges: graph.edges.filter(edge => edge.from && edge.to),\n metadata: graph.metadata,\n };\n }\n}\n\nexport class MermaidValidator {\n isValidMermaidSyntax(content: string): boolean {\n // Basic Mermaid syntax validation\n const lines = content.split('\\n');\n\n // Must start with flowchart declaration\n const flowchartLine = lines.find(line => line.trim().startsWith('flowchart'));\n if (!flowchartLine) {\n return false;\n }\n\n // Check for balanced brackets in node definitions\n const nodeLines = lines.filter(line => line.includes('[\"') && line.includes('\"]'));\n for (const line of nodeLines) {\n const openBrackets = (line.match(/\\[\"/g) || []).length;\n const closeBrackets = (line.match(/\"\\]/g) || []).length;\n if (openBrackets !== closeBrackets) {\n return false;\n }\n }\n\n return true;\n }\n}\n\nexport class MermaidRenderer {\n private readonly sanitizer: ContentSanitizer;\n private readonly validator: MermaidValidator;\n\n constructor() {\n this.sanitizer = new ContentSanitizer();\n this.validator = new MermaidValidator();\n }\n\n /**\n * Main rendering method with input sanitization and output validation\n */\n renderGraph(graph: RelationshipGraph, options: DiagramOptions): string {\n if (!graph || !graph.nodes || !graph.edges) {\n throw new RenderingError('Invalid graph structure');\n }\n\n const sanitizedGraph = this.sanitizer.sanitizeGraph(graph);\n const content = this.generateMermaidContent(sanitizedGraph, options);\n\n // Validate generated Mermaid syntax\n if (!this.validator.isValidMermaidSyntax(content)) {\n throw new RenderingError('Generated invalid Mermaid syntax');\n }\n\n return content;\n }\n\n /**\n * Generates the complete Mermaid diagram content\n */\n private generateMermaidContent(graph: RelationshipGraph, options: DiagramOptions): string {\n const header = this.generateHeader(options);\n const nodes = this.generateNodes(graph.nodes);\n const edges = this.generateEdges(graph.edges);\n const styling = this.generateStyling();\n const statusClasses = this.generateStatusClasses(graph.nodes);\n\n return [\n '```mermaid',\n header,\n '',\n nodes,\n '',\n edges,\n '',\n styling,\n '',\n statusClasses,\n '```'\n ].join('\\n');\n }\n\n /**\n * Generates the diagram header with metadata\n */\n private generateHeader(options: DiagramOptions): string {\n const timestamp = new Date().toISOString();\n return [\n `flowchart ${options.layout}`,\n ` %% Auto-generated on ${timestamp}`,\n ` %% Source: .gitgov/ entities`,\n ].join('\\n');\n }\n\n /**\n * Generates node syntax for all nodes\n */\n private generateNodes(nodes: DiagramNode[]): string {\n const nodeLines = nodes.map(node => this.generateNodeSyntax(node));\n return nodeLines.join('\\n');\n }\n\n /**\n * Generates edge syntax for all relationships\n */\n private generateEdges(edges: DiagramEdge[]): string {\n if (edges.length === 0) {\n return ' %% No relationships found';\n }\n\n const edgeLines = [\n ' %% ONLY hierarchical relationships from protocol',\n ' %% Source: CycleRecord.childCycleIds and CycleRecord.taskIds',\n ...edges.map(edge => this.generateEdgeSyntax(edge))\n ];\n\n return edgeLines.join('\\n');\n }\n\n /**\n * Wraps a title string to a specified max width, using <br/> for line breaks.\n * Also sanitizes the title.\n * @param title The title to wrap.\n * @param maxWidth The maximum width of a line.\n * @returns The wrapped and sanitized title string.\n */\n private wrapTitle(title: string, maxWidth: number = 30): string {\n // The sanitizer already limits total length, so this is for readability.\n const sanitizedTitle = this.sanitizer.sanitizeNodeTitle(title);\n if (sanitizedTitle.length <= maxWidth) {\n return sanitizedTitle;\n }\n\n const words = sanitizedTitle.split(' ');\n const lines = [];\n let currentLine = words.shift() || '';\n\n for (const word of words) {\n if ((currentLine + ' ' + word).length > maxWidth) {\n lines.push(currentLine);\n currentLine = word;\n } else {\n currentLine += ` ${word}`;\n }\n }\n lines.push(currentLine);\n\n return lines.join('<br/>');\n }\n\n /**\n * Node generation with word wrapping for better readability.\n * Uses different shapes for different node types:\n * - Cycles: Hexagonal shape {{text}} for strategic importance\n * - Tasks: Rectangular shape [text] for implementation details\n */\n generateNodeSyntax(node: DiagramNode): string {\n const wrappedTitle = this.wrapTitle(node.title);\n const sanitizedId = this.sanitizer.sanitizeNodeId(node.id);\n\n const icon = this.getNodeIcon(node.type);\n\n // Use hexagonal shape for cycles (strategic level)\n if (node.type === 'cycle') {\n return ` ${sanitizedId}{{\"${icon}<br/>${wrappedTitle}\"}}`;\n }\n\n // Use rectangular shape for tasks (implementation level)\n if (node.type === 'epic-task' && node.status === 'paused') {\n return ` ${sanitizedId}[\"${icon}<br/>${wrappedTitle}<br/>(PAUSED)\"]`;\n }\n\n return ` ${sanitizedId}[\"${icon}<br/>${wrappedTitle}\"]`;\n }\n\n /**\n * Edge generation with relationship validation\n */\n generateEdgeSyntax(edge: DiagramEdge): string {\n if (!edge.from || !edge.to) {\n throw new RenderingError('Edge must have valid from and to nodes');\n }\n\n const sanitizedFrom = this.sanitizer.sanitizeNodeId(edge.from);\n const sanitizedTo = this.sanitizer.sanitizeNodeId(edge.to);\n\n return ` ${sanitizedFrom} --> ${sanitizedTo}`;\n }\n\n /**\n * Gets the appropriate icon for each node type\n */\n private getNodeIcon(type: string): string {\n const icons = {\n 'cycle': 'šÆ',\n 'epic-task': 'š¦',\n 'task': 'š',\n };\n return icons[type as keyof typeof icons] || 'š';\n }\n\n /**\n * Generates the mandatory color scheme CSS\n */\n private generateStyling(): string {\n return [\n ' %% Status styling (mandatory color scheme)',\n ' classDef statusDraft fill:#ffffff,stroke:#cccccc,stroke-width:2px,color:#666666',\n ' classDef statusReady fill:#ffffeb,stroke:#cccc00,stroke-width:2px,color:#666600',\n ' classDef statusInProgress fill:#ebf5ff,stroke:#0066cc,stroke-width:2px,color:#003366',\n ' classDef statusDone fill:#ebffeb,stroke:#00cc00,stroke-width:2px,color:#006600',\n ' classDef statusBlocked fill:#ffebeb,stroke:#cc0000,stroke-width:2px,color:#660000',\n ' classDef statusEpicPaused fill:#f3e5f5,stroke:#9c27b0,stroke-width:2px,color:#4a148c',\n ' classDef statusArchived fill:#f5f5f5,stroke:#666666,stroke-width:2px,color:#333333',\n ].join('\\n');\n }\n\n /**\n * Applies status-based CSS classes to nodes\n */\n private generateStatusClasses(nodes: DiagramNode[]): string {\n const statusGroups = new Map<string, string[]>();\n\n // Group nodes by status\n for (const node of nodes) {\n const statusClass = this.getStatusClass(node.status || 'draft', node);\n\n\n if (!statusGroups.has(statusClass)) {\n statusGroups.set(statusClass, []);\n }\n statusGroups.get(statusClass)!.push(node.id);\n }\n\n // Generate class applications\n const classLines: string[] = [];\n for (const [statusClass, nodeIds] of statusGroups.entries()) {\n if (nodeIds.length > 0) {\n const sanitizedIds = nodeIds.map(id => this.sanitizer.sanitizeNodeId(id));\n classLines.push(` class ${sanitizedIds.join(',')} ${statusClass}`);\n }\n }\n\n return [\n ' %% Apply styles based on entity status',\n ...classLines\n ].join('\\n');\n }\n\n /**\n * Maps entity status to CSS class name with cycle and epic task special handling\n */\n private getStatusClass(status: string, node?: DiagramNode): string {\n // Special case: Epic task paused (waiting for parent cycle)\n if (status === 'paused' && node?.type === 'epic-task') {\n return 'statusEpicPaused'; // Purple - not a real blockage\n }\n\n // Handle cycle statuses\n if (node?.type === 'cycle') {\n const cycleStatusMap: Record<string, string> = {\n 'planning': 'statusDraft', // White - being planned\n 'active': 'statusInProgress', // Blue - sprint/milestone running\n 'completed': 'statusDone', // Green - all tasks finished\n 'archived': 'statusArchived', // Gray - historical record\n };\n return cycleStatusMap[status] || 'statusDraft';\n }\n\n // Handle task statuses\n const taskStatusMap: Record<string, string> = {\n // Completed states - Green\n 'done': 'statusDone',\n 'validated': 'statusDone',\n\n // Active states - Blue \n 'active': 'statusInProgress',\n 'in_progress': 'statusInProgress',\n\n // Ready states - Yellow (only for tasks)\n 'ready': 'statusReady',\n 'pending': 'statusReady',\n\n // Preparation states - White\n 'draft': 'statusDraft',\n 'review': 'statusDraft',\n\n // Real blockages - Red (only for NON-epic tasks)\n 'blocked': 'statusBlocked',\n 'paused': 'statusBlocked',\n 'cancelled': 'statusBlocked',\n 'discarded': 'statusBlocked',\n\n // Archived states - Gray\n 'archived': 'statusArchived',\n\n // Legacy oracle states - White (preparation)\n 'audit_oracle_create': 'statusDraft',\n 'audit_oracle_close': 'statusDraft',\n };\n\n return taskStatusMap[status] || 'statusDraft';\n }\n}\n","import { RelationshipAnalyzer, type RelationshipGraph } from './relationship_analyzer';\nimport { MermaidRenderer, type DiagramOptions } from './mermaid_renderer';\nimport type { TaskRecord } from '../types';\nimport type { CycleRecord } from '../types';\nimport { promises as fs } from \"fs\";\nimport * as path from \"path\";\n\nconst MAX_GENERATION_TIME_HISTORY = 100;\n\nexport class DiagramMetrics {\n private cacheHits: number = 0;\n private cacheMisses: number = 0;\n private generationTimes: number[] = [];\n\n incrementCacheHits(): void {\n this.cacheHits++;\n }\n\n incrementCacheMisses(): void {\n this.cacheMisses++;\n }\n\n recordGenerationTime(timeMs: number): void {\n this.generationTimes.push(timeMs);\n\n // Keep only last N measurements to prevent memory leak\n if (this.generationTimes.length > MAX_GENERATION_TIME_HISTORY) {\n this.generationTimes.shift();\n }\n }\n\n getCacheHitRatio(): number {\n const total = this.cacheHits + this.cacheMisses;\n return total === 0 ? 0 : this.cacheHits / total;\n }\n\n getAverageGenerationTime(): number {\n if (this.generationTimes.length === 0) return 0;\n\n const sum = this.generationTimes.reduce((a, b) => a + b, 0);\n return sum / this.generationTimes.length;\n }\n\n getStats() {\n return {\n cacheHitRatio: this.getCacheHitRatio(),\n averageGenerationTime: this.getAverageGenerationTime(),\n totalGenerations: this.generationTimes.length,\n };\n }\n}\n\nexport class DiagramGenerator {\n private readonly options: DiagramOptions;\n private readonly cache: Map<string, RelationshipGraph>;\n private readonly metrics: DiagramMetrics;\n public readonly analyzer: RelationshipAnalyzer;\n private readonly renderer: MermaidRenderer;\n\n constructor(options: Partial<DiagramOptions> = {}) {\n this.options = Object.freeze({\n layout: 'LR',\n includeEpicTasks: true,\n maxDepth: 4,\n colorScheme: 'default',\n showAssignments: false,\n ...options\n } as DiagramOptions);\n\n this.cache = new Map();\n this.metrics = new DiagramMetrics();\n this.analyzer = new RelationshipAnalyzer();\n this.renderer = new MermaidRenderer();\n }\n\n /**\n * Primary API - Performance optimized with caching\n */\n async generateFromRecords(\n cycles: CycleRecord[],\n tasks: TaskRecord[],\n filters?: {\n cycleId?: string;\n taskId?: string;\n packageName?: string;\n },\n showArchived: boolean = false\n ): Promise<string> {\n const cacheKey = this.generateCacheKey(cycles, tasks, showArchived);\n\n if (this.cache.has(cacheKey)) {\n this.metrics.incrementCacheHits();\n return this.renderFromCache(cacheKey);\n }\n\n const startTime = performance.now();\n\n try {\n // Apply filters if provided\n let finalCycles = cycles;\n let finalTasks = tasks;\n\n // Filter out archived entities by default (EARS-18)\n if (!showArchived) {\n finalCycles = cycles.filter(cycle => cycle.status !== 'archived');\n finalTasks = tasks.filter(task => task.status !== 'archived');\n }\n\n if (filters && (filters.cycleId || filters.taskId || filters.packageName)) {\n const filtered = this.analyzer.filterEntities(finalCycles, finalTasks, filters);\n finalCycles = filtered.filteredCycles;\n finalTasks = filtered.filteredTasks;\n }\n\n const graph = this.analyzer.analyzeRelationships(finalCycles, finalTasks);\n const result = this.renderer.renderGraph(graph, this.options);\n\n this.cache.set(cacheKey, graph);\n this.metrics.recordGenerationTime(performance.now() - startTime);\n this.metrics.incrementCacheMisses();\n\n return result;\n } catch (error) {\n this.metrics.recordGenerationTime(performance.now() - startTime);\n throw error;\n }\n }\n\n /**\n * Convenience method to generate from .gitgov/ directory\n */\n async generateFromFiles(\n gitgovPath: string = '.gitgov',\n filters?: {\n cycleId?: string;\n taskId?: string;\n packageName?: string;\n },\n showArchived: boolean = false\n ): Promise<string> {\n const cycles = await this.loadCycleRecords(gitgovPath);\n const tasks = await this.loadTaskRecords(gitgovPath);\n\n return this.generateFromRecords(cycles, tasks, filters, showArchived);\n }\n\n /**\n * Loads all cycle records from the filesystem\n */\n public async loadCycleRecords(gitgovPath: string): Promise<CycleRecord[]> {\n const cyclesDir = path.join(gitgovPath, 'cycles');\n\n try {\n const files = await fs.readdir(cyclesDir);\n const jsonFiles = files.filter(file => file.endsWith('.json'));\n\n const cycles: CycleRecord[] = [];\n\n for (const file of jsonFiles) {\n try {\n const filePath = path.join(cyclesDir, file);\n const content = await fs.readFile(filePath, 'utf-8');\n const record = JSON.parse(content);\n\n // Extract payload from EmbeddedMetadata structure\n if (record.payload && record.payload.id) {\n const cycleRecord = record.payload as CycleRecord;\n // Add file source info for better error reporting\n (cycleRecord as any)._sourceFile = file;\n cycles.push(cycleRecord);\n } else {\n console.warn(`ā ļø Cycle file ${file} missing payload or payload.id`);\n }\n } catch (error) {\n console.warn(`ā Could not parse cycle file ${file}:`, error instanceof Error ? error.message : String(error));\n }\n }\n\n return cycles;\n } catch (error) {\n if (error instanceof Error && error.message.includes('ENOENT')) {\n console.warn(`ā ļø Cycles directory not found: ${cyclesDir}`);\n console.warn(`š” Run 'gitgov init' to create the .gitgov directory structure`);\n } else {\n console.warn(`ā Could not read cycles directory:`, error instanceof Error ? error.message : String(error));\n }\n return [];\n }\n }\n\n /**\n * Loads all task records from the filesystem\n */\n public async loadTaskRecords(gitgovPath: string): Promise<TaskRecord[]> {\n const tasksDir = path.join(gitgovPath, 'tasks');\n\n try {\n const files = await fs.readdir(tasksDir);\n const jsonFiles = files.filter(file => file.endsWith('.json'));\n\n const tasks: TaskRecord[] = [];\n\n for (const file of jsonFiles) {\n try {\n const filePath = path.join(tasksDir, file);\n const content = await fs.readFile(filePath, 'utf-8');\n const record = JSON.parse(content);\n\n // Extract payload from EmbeddedMetadata structure\n if (record.payload && record.payload.id) {\n const taskRecord = record.payload as TaskRecord;\n // Add file source info for better error reporting\n (taskRecord as any)._sourceFile = file;\n\n\n tasks.push(taskRecord);\n } else {\n console.warn(`ā ļø Task file ${file} missing payload or payload.id`);\n }\n } catch (error) {\n console.warn(`ā Could not parse task file ${file}:`, error instanceof Error ? error.message : String(error));\n }\n }\n\n return tasks;\n } catch (error) {\n if (error instanceof Error && error.message.includes('ENOENT')) {\n console.warn(`ā ļø Tasks directory not found: ${tasksDir}`);\n console.warn(`š” Run 'gitgov init' to create the .gitgov directory structure`);\n } else {\n console.warn(`ā Could not read tasks directory:`, error instanceof Error ? error.message : String(error));\n }\n return [];\n }\n }\n\n /**\n * Renders diagram from cached graph\n */\n private renderFromCache(cacheKey: string): string {\n const graph = this.cache.get(cacheKey)!;\n return this.renderer.renderGraph(graph, this.options);\n }\n\n /**\n * Generates cache key for efficient lookups\n */\n private generateCacheKey(cycles: CycleRecord[], tasks: TaskRecord[], showArchived: boolean = false): string {\n // Use Set for O(1) deduplication and consistent ordering\n const cycleIds = [...new Set(cycles.map(c => c.id))].sort();\n const taskIds = [...new Set(tasks.map(t => t.id))].sort();\n\n const cycleHash = this.hashArray(cycleIds);\n const taskHash = this.hashArray(taskIds);\n const optionsHash = this.hashString(JSON.stringify(this.options));\n const archivedFlag = showArchived ? 'with-archived' : 'no-archived';\n\n return `diagram:${cycleHash}-${taskHash}-${optionsHash}-${archivedFlag}`;\n }\n\n /**\n * Efficient hash function for arrays\n */\n private hashArray(items: string[]): string {\n let hash = 0;\n for (const item of items) {\n hash = ((hash << 5) - hash) + this.hashString(item);\n hash = hash & hash; // Convert to 32bit integer\n }\n return hash.toString(36);\n }\n\n /**\n * Simple hash function for strings\n */\n private hashString(str: string): number {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash = hash & hash; // Convert to 32bit integer\n }\n return hash;\n }\n\n\n\n /**\n * Get performance metrics\n */\n getMetrics() {\n return this.metrics.getStats();\n }\n}\n"]}
|