@gitgov/core 1.7.0 → 1.8.0

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.
@@ -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/utils/signature_utils.ts","../../src/crypto/index.ts","../../src/adapters/project_adapter/index.ts","../../src/utils/esm_helper.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/factories/index.ts","../../src/validation/workflow_methodology_validator.ts","../../src/factories/workflow_methodology_factory.ts","../../src/factories/embedded_metadata_factory.ts","../../src/lint/index.ts","../../src/lint/lint.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","path","fs","projectRoot","path2","path3","path4","fsSync","existsSync","require","isTaskRecord","isCycleRecord","isExecutionRecord","join","safeId","dirname","resolve","path5"],"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 = 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 = 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 = 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 = 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 // Use debug level instead of warn to reduce noise during indexer validation\n // The indexer already captures these errors in its integrity report\n logger.debug(`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","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, GitGovTaskRecord } from \"../types\";\nimport { validateTaskRecordDetailed } from \"../validation/task_validator\";\nimport { validateEmbeddedMetadataDetailed } from \"../validation/embedded_metadata_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 function createTaskRecord(\n payload: Partial<TaskRecord>\n): 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/**\n * Loads and validates an existing TaskRecord from untrusted data.\n * Used by RecordStore to validate records when reading from disk.\n * Validates both header (embedded metadata) and payload (TaskRecord).\n * \n * @param data - Unknown data to validate as GitGovTaskRecord\n * @returns GitGovTaskRecord - The validated complete record\n * @throws DetailedValidationError if validation fails\n */\nexport function loadTaskRecord(data: unknown): GitGovTaskRecord {\n // First validate complete record structure (header + payload)\n const embeddedValidation = validateEmbeddedMetadataDetailed(data);\n if (!embeddedValidation.isValid) {\n throw new DetailedValidationError('GitGovRecord (TaskRecord)', embeddedValidation.errors);\n }\n\n // Then validate specific TaskRecord payload\n const record = data as GitGovTaskRecord;\n const payloadValidation = validateTaskRecordDetailed(record.payload);\n if (!payloadValidation.isValid) {\n throw new DetailedValidationError('TaskRecord payload', payloadValidation.errors);\n }\n\n return record;\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, GitGovCycleRecord } from \"../types\";\nimport { validateCycleRecordDetailed } from \"../validation/cycle_validator\";\nimport { validateEmbeddedMetadataDetailed } from \"../validation/embedded_metadata_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 function createCycleRecord(\n payload: Partial<CycleRecord>\n): 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/**\n * Loads and validates an existing CycleRecord from untrusted data.\n * Used by RecordStore to validate records when reading from disk.\n * Validates both header (embedded metadata) and payload (CycleRecord).\n * \n * @param data - Unknown data to validate as GitGovCycleRecord\n * @returns GitGovCycleRecord - The validated complete record\n * @throws DetailedValidationError if validation fails\n */\nexport function loadCycleRecord(data: unknown): GitGovCycleRecord {\n // First validate complete record structure (header + payload)\n const embeddedValidation = validateEmbeddedMetadataDetailed(data);\n if (!embeddedValidation.isValid) {\n throw new DetailedValidationError('GitGovRecord (CycleRecord)', embeddedValidation.errors);\n }\n\n // Then validate specific CycleRecord payload\n const record = data as GitGovCycleRecord;\n const payloadValidation = validateCycleRecordDetailed(record.payload);\n if (!payloadValidation.isValid) {\n throw new DetailedValidationError('CycleRecord payload', payloadValidation.errors);\n }\n\n return record;\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';\nimport { DetailedValidationError } from '../validation/common';\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 private loader: (data: unknown) => GitGovRecord & { payload: T };\n\n constructor(\n recordType: string,\n loader: (data: unknown) => GitGovRecord & { payload: T },\n rootPath?: string,\n fsDeps: FsDependencies = fs\n ) {\n this.loader = loader;\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 raw = JSON.parse(content);\n\n // Validate complete record (header + payload) using loader\n const validatedRecord = this.loader(raw);\n\n return validatedRecord;\n } catch (e: unknown) {\n // Handle validation errors gracefully\n if (e instanceof DetailedValidationError) {\n console.warn(`āš ļø Invalid ${this.recordType} record ${recordId}:`, e.message);\n return null; // Skip invalid records, don't crash\n }\n\n // Handle file not found\n const error = e as NodeJS.ErrnoException;\n if (error.code === 'ENOENT') {\n return null;\n }\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, GitGovActorRecord, GitGovAgentRecord } 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\";\nimport { promises as fs } from \"fs\";\nimport * as path from \"path\";\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 = createActorRecord(completePayload);\n\n // Calculate checksum for the payload\n const payloadChecksum = calculatePayloadChecksum(validatedPayload);\n\n // Create signature for the record\n const signature = signPayload(validatedPayload, privateKey, actorId, 'author', 'Actor registration');\n\n // Create the complete GitGovRecord structure\n const record: GitGovActorRecord = {\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 // Persist private key to .gitgov/actors/{actorId}.key\n try {\n const projectRoot = ConfigManager.findProjectRoot();\n if (projectRoot) {\n const actorsDir = path.join(projectRoot, '.gitgov', 'actors');\n await fs.mkdir(actorsDir, { recursive: true });\n\n const keyPath = path.join(actorsDir, `${actorId}.key`);\n await fs.writeFile(keyPath, privateKey, 'utf-8');\n // Set secure file permissions (0600 = owner read/write only)\n await fs.chmod(keyPath, 0o600);\n }\n } catch (error) {\n // Log warning but don't fail actor creation if key persistence fails\n // This allows graceful degradation in environments where file permissions might be restricted\n console.warn(`āš ļø Could not persist private key for ${actorId}: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\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 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 // 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 // Try to load private key from .gitgov/actors/{actorId}.key for real signing\n let privateKey: string | null = null;\n try {\n const projectRoot = ConfigManager.findProjectRoot();\n if (projectRoot) {\n const keyPath = path.join(projectRoot, '.gitgov', 'actors', `${actorId}.key`);\n const keyContent = await fs.readFile(keyPath, 'utf-8');\n privateKey = keyContent.trim();\n }\n } catch (error) {\n // Private key not found - fallback to mock signature for backward compatibility\n console.warn(`āš ļø Private key not found for ${actorId}, using mock signature`);\n }\n\n // Create signature (real if private key available, mock otherwise)\n let signature: Signature;\n if (privateKey) {\n // Real cryptographic signing\n signature = signPayload(record.payload, privateKey, actorId, role, 'Record signed');\n } else {\n // Fallback to mock signature for backward compatibility\n 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\n // Replace placeholder signatures or add new signature if no placeholders exist\n const existingSignatures = record.header.signatures || [];\n const hasPlaceholder = existingSignatures.some(sig => sig.signature === 'placeholder');\n \n let finalSignatures: [Signature, ...Signature[]];\n if (hasPlaceholder) {\n // Replace placeholder signatures with the real signature\n const replaced = existingSignatures.map(sig => \n sig.signature === 'placeholder' ? signature : sig\n );\n // Ensure at least one signature (should always be true after replacement)\n finalSignatures = replaced.length > 0 \n ? replaced as [Signature, ...Signature[]]\n : [signature];\n } else {\n // No placeholders: append new signature (multi-signature scenario)\n finalSignatures = [...existingSignatures, signature] as [Signature, ...Signature[]];\n }\n\n // Create signed record with real checksum + signature\n const signedRecord: GitGovRecord = {\n ...record,\n header: {\n ...record.header,\n payloadChecksum,\n signatures: finalSignatures\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 // Read existing actor\n const oldActor = await this.getActor(actorId);\n if (!oldActor) {\n throw new Error(`ActorRecord with id ${actorId} not found`);\n }\n\n if (oldActor.status === 'revoked') {\n throw new Error(`Cannot rotate key for revoked actor: ${actorId}`);\n }\n\n // Generate new keys for the new actor\n const { publicKey: newPublicKey, privateKey: newPrivateKey } = await generateKeys();\n\n // Generate new actor ID following the pattern from actor_protocol_faq.md\n // Pattern: {baseId}-v{N} where N is the version number (using hyphens to match schema pattern)\n // Schema pattern: ^(human|agent)(:[a-z0-9-]+)+$ (only allows hyphens, not underscores)\n const baseId = generateActorId(oldActor.type, oldActor.displayName);\n let newActorId: string;\n\n // Check if baseId already has a version suffix (e.g., human:camilo-v2)\n const versionMatch = baseId.match(/^(.+)-v(\\d+)$/);\n if (versionMatch && versionMatch[1] && versionMatch[2]) {\n const baseWithoutVersion = versionMatch[1];\n const currentVersion = parseInt(versionMatch[2], 10);\n newActorId = `${baseWithoutVersion}-v${currentVersion + 1}`;\n } else {\n // First rotation: add -v2\n newActorId = `${baseId}-v2`;\n }\n\n // Create new actor with same metadata but new keys\n const newActorPayload: ActorRecord = {\n id: newActorId,\n type: oldActor.type,\n displayName: oldActor.displayName,\n publicKey: newPublicKey,\n roles: oldActor.roles,\n status: 'active'\n };\n\n // Validate the new payload\n const validatedNewPayload = createActorRecord(newActorPayload);\n\n // Calculate checksum for the new payload\n const payloadChecksum = calculatePayloadChecksum(validatedNewPayload);\n\n // Create signature for the new record (self-signed for bootstrap)\n const signature = signPayload(validatedNewPayload, newPrivateKey, newActorId, 'author', 'Key rotation');\n\n // Create the complete GitGovRecord structure for new actor\n const newRecord: GitGovActorRecord = {\n header: {\n version: '1.0',\n type: 'actor',\n payloadChecksum,\n signatures: [signature]\n },\n payload: validatedNewPayload\n };\n\n // Validate the complete new record\n await validateFullActorRecord(newRecord, async (keyId) => {\n if (keyId === newActorId) {\n return newPublicKey; // Self-referential for bootstrap\n }\n const signerActor = await this.getActor(keyId);\n return signerActor?.publicKey || null;\n });\n\n // Store the new actor record\n await this.actorStore.write(newRecord);\n\n // Revoke old actor and mark succession\n const revokedOldActor = await this.revokeActor(\n actorId,\n 'system',\n 'rotation',\n newActorId // Mark succession\n );\n\n // Update session to point to the new actor\n try {\n const configManager = new ConfigManager();\n const session = await configManager.loadSession();\n\n if (session) {\n // Update lastSession to point to new actor\n session.lastSession = {\n actorId: newActorId,\n timestamp: new Date().toISOString()\n };\n\n // Migrate actorState from old actor to new actor if it exists\n if (session.actorState && session.actorState[actorId]) {\n const oldState = session.actorState[actorId];\n session.actorState[newActorId] = {\n ...oldState,\n lastSync: new Date().toISOString()\n };\n // Keep old actor state for history (don't delete it)\n } else if (!session.actorState) {\n session.actorState = {};\n }\n\n // Write updated session using ConfigManager's sessionPath\n // Access private sessionPath via reflection or use the same pattern as updateActorState\n const projectRoot = ConfigManager.findProjectRoot() || process.cwd();\n const sessionPath = path.join(projectRoot, '.gitgov', '.session.json');\n await fs.writeFile(sessionPath, JSON.stringify(session, null, 2), 'utf-8');\n }\n } catch (error) {\n // Graceful degradation: session update is not critical\n console.warn(`āš ļø Could not update session for ${newActorId}: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n\n // Persist new private key to .gitgov/actors/{newActorId}.key\n try {\n const projectRoot = ConfigManager.findProjectRoot();\n if (projectRoot) {\n const actorsDir = path.join(projectRoot, '.gitgov', 'actors');\n await fs.mkdir(actorsDir, { recursive: true });\n\n const keyPath = path.join(actorsDir, `${newActorId}.key`);\n await fs.writeFile(keyPath, newPrivateKey, 'utf-8');\n // Set secure file permissions (0600 = owner read/write only)\n await fs.chmod(keyPath, 0o600);\n }\n } catch (error) {\n console.warn(`āš ļø Could not persist private key for ${newActorId}: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n\n return {\n oldActor: revokedOldActor,\n newActor: validatedNewPayload\n };\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: GitGovActorRecord = {\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 = createAgentRecord(completePayload);\n\n // Calculate checksum for the payload\n const payloadChecksum = calculatePayloadChecksum(validatedPayload);\n\n // Load private key from .gitgov/actors/{actorId}.key for real signing\n // Since createActor() always persists the private key, it should be available\n // If not found, this indicates a problem (legacy actor, key deleted, or I/O error)\n let privateKey: string;\n try {\n const projectRoot = ConfigManager.findProjectRoot();\n if (!projectRoot) {\n throw new Error('Project root not found. Cannot locate private key.');\n }\n const keyPath = path.join(projectRoot, '.gitgov', 'actors', `${payload.id}.key`);\n const keyContent = await fs.readFile(keyPath, 'utf-8');\n privateKey = keyContent.trim();\n if (!privateKey) {\n throw new Error(`Private key file is empty for ${payload.id}`);\n }\n } catch (error) {\n throw new Error(\n `Private key not found for actor ${payload.id}. ` +\n `AgentRecord requires a valid private key for cryptographic signing. ` +\n `If this is a legacy actor, you may need to regenerate the actor with 'gitgov actor new'. ` +\n `Original error: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n\n // Create real cryptographic signature\n const signature = signPayload(validatedPayload, privateKey, payload.id, 'author', 'Agent registration');\n\n // Create the complete GitGovRecord structure\n const record: GitGovAgentRecord = {\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, GitGovActorRecord } from \"../types\";\nimport { validateActorRecordDetailed } from \"../validation/actor_validator\";\nimport { validateEmbeddedMetadataDetailed } from \"../validation/embedded_metadata_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 function createActorRecord(\n payload: Partial<ActorRecord>\n): 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\n/**\n * Loads and validates an existing ActorRecord from untrusted data.\n * Used by RecordStore to validate records when reading from disk.\n * Validates both header (embedded metadata) and payload (ActorRecord).\n * \n * @param data - Unknown data to validate as GitGovActorRecord\n * @returns GitGovActorRecord - The validated complete record\n * @throws DetailedValidationError if validation fails\n */\nexport function loadActorRecord(data: unknown): GitGovActorRecord {\n // First validate complete record structure (header + payload)\n const embeddedValidation = validateEmbeddedMetadataDetailed(data);\n if (!embeddedValidation.isValid) {\n throw new DetailedValidationError('GitGovRecord (ActorRecord)', embeddedValidation.errors);\n }\n \n // Then validate specific ActorRecord payload\n const record = data as GitGovActorRecord;\n const payloadValidation = validateActorRecordDetailed(record.payload);\n if (!payloadValidation.isValid) {\n throw new DetailedValidationError('ActorRecord payload', payloadValidation.errors);\n }\n \n return record;\n}\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, GitGovAgentRecord } from \"../types\";\nimport { validateAgentRecordDetailed } from \"../validation/agent_validator\";\nimport { validateEmbeddedMetadataDetailed } from \"../validation/embedded_metadata_validator\";\nimport { DetailedValidationError } from \"../validation/common\";\n\n/**\n * Creates a new, fully-formed AgentRecord with validation.\n */\nexport function createAgentRecord(\n payload: Partial<AgentRecord>\n): 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\n/**\n * Loads and validates an existing AgentRecord from untrusted data.\n * Used by RecordStore to validate records when reading from disk.\n * Validates both header (embedded metadata) and payload (AgentRecord).\n * \n * @param data - Unknown data to validate as GitGovAgentRecord\n * @returns GitGovAgentRecord - The validated complete record\n * @throws DetailedValidationError if validation fails\n */\nexport function loadAgentRecord(data: unknown): GitGovAgentRecord {\n // First validate complete record structure (header + payload)\n const embeddedValidation = validateEmbeddedMetadataDetailed(data);\n if (!embeddedValidation.isValid) {\n throw new DetailedValidationError('GitGovRecord (AgentRecord)', embeddedValidation.errors);\n }\n \n // Then validate specific AgentRecord payload\n const record = data as GitGovAgentRecord;\n const payloadValidation = validateAgentRecordDetailed(record.payload);\n if (!payloadValidation.isValid) {\n throw new DetailedValidationError('AgentRecord payload', payloadValidation.errors);\n }\n \n return record;\n}\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 = 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, GitGovFeedbackRecord } from '../types';\nimport { generateFeedbackId } from '../utils/id_generator';\nimport { validateFeedbackRecordDetailed } from '../validation/feedback_validator';\nimport { validateEmbeddedMetadataDetailed } from '../validation/embedded_metadata_validator';\nimport { DetailedValidationError } from '../validation/common';\n\n/**\n * Creates a complete FeedbackRecord with validation\n * \n * @param payload - Partial FeedbackRecord payload\n * @returns FeedbackRecord - The validated FeedbackRecord\n */\nexport function createFeedbackRecord(payload: Partial<FeedbackRecord>): 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/**\n * Loads and validates an existing FeedbackRecord from untrusted data.\n * Used by RecordStore to validate records when reading from disk.\n * Validates both header (embedded metadata) and payload (FeedbackRecord).\n * \n * @param data - Unknown data to validate as GitGovFeedbackRecord\n * @returns GitGovFeedbackRecord - The validated complete record\n * @throws DetailedValidationError if validation fails\n */\nexport function loadFeedbackRecord(data: unknown): GitGovFeedbackRecord {\n // First validate complete record structure (header + payload)\n const embeddedValidation = validateEmbeddedMetadataDetailed(data);\n if (!embeddedValidation.isValid) {\n throw new DetailedValidationError('GitGovRecord (FeedbackRecord)', embeddedValidation.errors);\n }\n \n // Then validate specific FeedbackRecord payload\n const record = data as GitGovFeedbackRecord;\n const payloadValidation = validateFeedbackRecordDetailed(record.payload);\n if (!payloadValidation.isValid) {\n throw new DetailedValidationError('FeedbackRecord payload', payloadValidation.errors);\n }\n \n return record;\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 = 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, GitGovExecutionRecord } from '../types';\nimport { generateExecutionId } from '../utils/id_generator';\nimport { validateExecutionRecordDetailed } from '../validation/execution_validator';\nimport { validateEmbeddedMetadataDetailed } from '../validation/embedded_metadata_validator';\nimport { DetailedValidationError } from '../validation/common';\n\n/**\n * Creates a complete ExecutionRecord with validation\n * \n * @param payload - Partial ExecutionRecord payload\n * @returns ExecutionRecord - The validated ExecutionRecord\n */\nexport function createExecutionRecord(payload: Partial<ExecutionRecord>): 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/**\n * Loads and validates an existing ExecutionRecord from untrusted data.\n * Used by RecordStore to validate records when reading from disk.\n * Validates both header (embedded metadata) and payload (ExecutionRecord).\n * \n * @param data - Unknown data to validate as GitGovExecutionRecord\n * @returns GitGovExecutionRecord - The validated complete record\n * @throws DetailedValidationError if validation fails\n */\nexport function loadExecutionRecord(data: unknown): GitGovExecutionRecord {\n // First validate complete record structure (header + payload)\n const embeddedValidation = validateEmbeddedMetadataDetailed(data);\n if (!embeddedValidation.isValid) {\n throw new DetailedValidationError('GitGovRecord (ExecutionRecord)', embeddedValidation.errors);\n }\n \n // Then validate specific ExecutionRecord payload\n const record = data as GitGovExecutionRecord;\n const payloadValidation = validateExecutionRecordDetailed(record.payload);\n if (!payloadValidation.isValid) {\n throw new DetailedValidationError('ExecutionRecord payload', payloadValidation.errors);\n }\n \n return record;\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 = 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, GitGovChangelogRecord } from '../types';\nimport { validateChangelogRecordDetailed } from '../validation/changelog_validator';\nimport { validateEmbeddedMetadataDetailed } from '../validation/embedded_metadata_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 ChangelogRecord - The validated ChangelogRecord\n */\nexport function createChangelogRecord(payload: Partial<ChangelogRecord>): 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/**\n * Loads and validates an existing ChangelogRecord from untrusted data.\n * Used by RecordStore to validate records when reading from disk.\n * Validates both header (embedded metadata) and payload (ChangelogRecord).\n * \n * @param data - Unknown data to validate as GitGovChangelogRecord\n * @returns GitGovChangelogRecord - The validated complete record\n * @throws DetailedValidationError if validation fails\n */\nexport function loadChangelogRecord(data: unknown): GitGovChangelogRecord {\n // First validate complete record structure (header + payload)\n const embeddedValidation = validateEmbeddedMetadataDetailed(data);\n if (!embeddedValidation.isValid) {\n throw new DetailedValidationError('GitGovRecord (ChangelogRecord)', embeddedValidation.errors);\n }\n\n // Then validate specific ChangelogRecord payload\n const record = data as GitGovChangelogRecord;\n const payloadValidation = validateChangelogRecordDetailed(record.payload);\n if (!payloadValidation.isValid) {\n throw new DetailedValidationError('ChangelogRecord payload', payloadValidation.errors);\n }\n\n return record;\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 { extractAuthor, extractLastModifier } from '../../utils/signature_utils';\nimport { calculatePayloadChecksum, verifySignatures } from '../../crypto';\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 complete intelligence layer\n * Calculated by enrichTaskRecord() with relationships, metrics, and derived states\n * \n * @see indexer_adapter.md Section 3.6 - EnrichedTaskRecord Specification (EARS 25-48)\n */\nexport type EnrichedTaskRecord = TaskRecord & {\n derivedState: {\n isStalled: boolean;\n isAtRisk: boolean;\n needsClarification: boolean;\n isBlockedByDependency: boolean;\n healthScore: number; // 0-100\n timeInCurrentStage: number; // dĆ­as\n };\n relationships: {\n author?: { actorId: string; timestamp: number };\n lastModifier?: { actorId: string; timestamp: number };\n assignedTo: Array<{ actorId: string; assignedAt?: number }>;\n dependsOn: string[]; // Typed references: task:, pr:, issue:, file:, url:\n blockedBy: string[]; // Reverse dependencies (not completed)\n cycles: Array<{ id: string; title: string }>;\n };\n metrics: {\n executionCount: number;\n blockingFeedbackCount: number;\n openQuestionCount: number;\n timeToResolution?: number; // horas (solo para done tasks)\n };\n release: {\n isReleased: boolean;\n lastReleaseVersion?: string;\n };\n lastUpdated: number; // Unix timestamp ms\n lastActivityType: 'task_modified' | 'feedback_received' | 'execution_added' | 'changelog_created' | 'task_created';\n recentActivity?: string;\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 derivedStates: DerivedStates; // Global derived states for system-wide queries\n activityHistory: ActivityEvent[]; // Para dashboard activity streams\n\n /**\n * Raw task records with FULL headers (source of truth for signatures/checksums).\n * Mantener por backward compatibility - deprecar gradualmente en favor de enrichedTasks.\n */\n tasks: GitGovTaskRecord[]; // Full records with headers\n\n /**\n * Enriched tasks with intelligence layer (NEW - Phase 1A).\n * Payload + campos calculados (relationships, metrics, derivedState, release).\n * NO incluye headers (author/lastModifier ya extraĆ­dos en relationships).\n */\n enrichedTasks: EnrichedTaskRecord[]; // Tasks with activity metadata for Dashboard\n\n /** Raw cycle records with FULL headers */\n cycles: GitGovCycleRecord[]; // Full records with headers\n\n /** Raw actor records with FULL headers */\n actors: GitGovActorRecord[]; // Full records with headers\n\n /** Raw feedback records with FULL headers (optional - Phase 1B+) */\n feedback: GitGovFeedbackRecord[]; // Full records with headers\n};\n\n/**\n * System-wide derived states for dashboard analytics and filtering.\n * Calculated by calculateDerivedStates() during index generation.\n * \n * @see derived_data_protocol.md for calculation algorithms\n */\nexport type DerivedStates = {\n stalledTasks: string[]; // Task IDs con >7 dĆ­as sin activity en estado 'active'\n atRiskTasks: string[]; // Task IDs con prioridad 'critical' + 'paused' O 2+ blocking feedbacks\n needsClarificationTasks: string[]; // Task IDs con feedback tipo 'question' abierto\n blockedByDependencyTasks: string[]; // Task IDs con dependencias a tasks no completadas\n};\n\n/**\n * Optimized version of DerivedStates using Sets for O(1) lookup performance.\n * Used internally by enrichTaskRecord() to efficiently check task membership.\n * \n * Conversion from DerivedStates (arrays) to DerivedStateSets (Sets) happens once\n * in generateIndex() before processing multiple tasks, avoiding repeated O(n) lookups.\n */\nexport type DerivedStateSets = {\n stalledTasks: Set<string>;\n atRiskTasks: Set<string>;\n needsClarificationTasks: Set<string>;\n blockedByDependencyTasks: Set<string>;\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 derivedStatesApplied: number; // Number of tasks with derived states calculated\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 calculateDerivedStates(allRecords: AllRecords): Promise<DerivedStates>; // NUEVO - System-wide derived states\n calculateActivityHistory(allRecords: AllRecords): Promise<ActivityEvent[]>; // NUEVO\n calculateLastUpdated(taskPayload: TaskRecord, relatedRecords: AllRecords): Promise<{ lastUpdated: number; lastActivityType: EnrichedTaskRecord['lastActivityType']; recentActivity: string }>; // NUEVO\n enrichTaskRecord(task: GitGovTaskRecord, relatedRecords: AllRecords, derivedStateSets: DerivedStateSets): Promise<EnrichedTaskRecord>; // UPDATED: Uses DerivedStateSets (Sets) for O(1) lookup (EARS-43)\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. Calculate system-wide derived states (EARS 7-10)\n const derivedStates = await this.calculateDerivedStates(allRecords);\n\n // 3.6. Convert DerivedStates arrays to DerivedStateSets for O(1) lookup performance\n const derivedStateSets: DerivedStateSets = {\n stalledTasks: new Set(derivedStates.stalledTasks),\n atRiskTasks: new Set(derivedStates.atRiskTasks),\n needsClarificationTasks: new Set(derivedStates.needsClarificationTasks),\n blockedByDependencyTasks: new Set(derivedStates.blockedByDependencyTasks)\n };\n\n // 3.7. Enrich tasks with complete intelligence layer (EARS-43: pass pre-calculated derivedStates)\n const enrichedTasks = await Promise.all(\n tasks.map(task => this.enrichTaskRecord(task, allRecords, derivedStateSets))\n );\n\n // 3.8. Validate integrity to populate integrityStatus (EARS-4 integration)\n const integrityReport = await this.validateIntegrity();\n\n // 4. Build IndexData structure\n const indexData: IndexData = {\n metadata: {\n generatedAt: new Date().toISOString(),\n lastCommitHash: await this.getGitCommitHash(),\n integrityStatus: integrityReport.status, // Populated from validateIntegrity() (EARS-4)\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 derivedStates, // System-wide derived states for analytics\n activityHistory, // Activity stream for dashboard\n tasks, // Keep full records with headers (source of truth)\n enrichedTasks, // Tasks with intelligence layer\n cycles, // Keep full records with headers\n actors, // Keep full records with headers\n feedback: allRecords.feedback // Optional - Phase 1B+ raw feedback records\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 derivedStatesApplied: Object.values(derivedStates).reduce((sum, arr) => sum + arr.length, 0), // Total tasks with derived states\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 derivedStatesApplied: 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 * [EARS-13] Returns null and logs warning if cache is corrupted\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 // [EARS-13] Cache is corrupted or invalid - log warning and suggest regeneration\n console.warn(`Warning: Cache is corrupted or invalid. Please regenerate with 'gitgov index'.`);\n console.warn(`Details: ${error instanceof Error ? error.message : String(error)}`);\n return null;\n }\n }\n\n /**\n * [EARS-4, EARS-70 to EARS-76] Validates integrity of Records without regenerating cache\n * \n * PHASE 1A (IMPLEMENTED): Basic schema validation (required fields)\n * PHASE 1B (IMPLEMENTED): Cryptographic validation (checksums + signatures)\n * TODO FUTURE:\n * - Integrate ValidatorModule for comprehensive schema validation\n * - Compare cache consistency with Records\n * - Detect broken references between records\n * - Validate timestamp consistency\n */\n async validateIntegrity(): Promise<IntegrityReport> {\n const startTime = performance.now();\n const errors: IntegrityError[] = [];\n const warnings: IntegrityWarning[] = [];\n let recordsScanned = 0;\n let checksumFailures = 0;\n let signatureFailures = 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 // PHASE 1A: Schema validation - verify required fields\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 // PHASE 1B: Checksum verification (EARS-70 to EARS-72)\n for (const task of tasks) {\n const calculatedChecksum = calculatePayloadChecksum(task.payload);\n if (calculatedChecksum !== task.header.payloadChecksum) {\n checksumFailures++;\n errors.push({\n type: 'checksum_failure',\n recordId: task.payload.id,\n message: `Checksum mismatch: expected ${task.header.payloadChecksum}, got ${calculatedChecksum}`\n });\n }\n }\n\n for (const cycle of cycles) {\n const calculatedChecksum = calculatePayloadChecksum(cycle.payload);\n if (calculatedChecksum !== cycle.header.payloadChecksum) {\n checksumFailures++;\n errors.push({\n type: 'checksum_failure',\n recordId: cycle.payload.id,\n message: `Checksum mismatch: expected ${cycle.header.payloadChecksum}, got ${calculatedChecksum}`\n });\n }\n }\n\n // PHASE 1B: Signature verification (EARS-73 to EARS-76)\n // Create actor public key lookup function for signature verification\n const getActorPublicKey = async (keyId: string): Promise<string | null> => {\n // EARS-76: Graceful degradation if actorStore not available\n if (!this.actorStore) {\n return null;\n }\n const actor = await this.actorStore.read(keyId);\n return actor?.payload.publicKey || null;\n };\n\n // Verify signatures for all tasks\n for (const task of tasks) {\n const isValid = await verifySignatures(task, getActorPublicKey);\n if (!isValid) {\n signatureFailures++;\n errors.push({\n type: 'signature_invalid',\n recordId: task.payload.id,\n message: 'One or more signatures failed verification'\n });\n }\n }\n\n // Verify signatures for all cycles\n for (const cycle of cycles) {\n const isValid = await verifySignatures(cycle, getActorPublicKey);\n if (!isValid) {\n signatureFailures++;\n errors.push({\n type: 'signature_invalid',\n recordId: cycle.payload.id,\n message: 'One or more signatures failed verification'\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,\n signatureFailures\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,\n signatureFailures\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 * Validates schema and filters out invalid records with warnings.\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 // Loader validates automatically - invalid records return null\n changelogs.push(record);\n }\n }\n\n return changelogs;\n }\n\n /**\n * Writes cache data to file (Phase 1: JSON)\n * \n * [EARS-14] Creates automatic backup of existing cache before writing.\n * If write fails, backup can be restored to preserve previous cache state.\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 // [EARS-14] Create backup of existing cache before writing new one\n await this.createCacheBackup();\n\n try {\n // Write JSON cache file\n const jsonContent = JSON.stringify(indexData, null, 2);\n await fs.writeFile(this.cachePath, jsonContent, 'utf-8');\n\n // [EARS-14] Successfully written - delete backup\n await this.deleteCacheBackup();\n } catch (error) {\n // [EARS-14] Write failed - restore backup\n await this.restoreCacheFromBackup();\n throw error; // Re-throw to propagate error to caller\n }\n }\n\n /**\n * [EARS-14] Creates a backup of the current cache file.\n * If cache doesn't exist, this is a no-op (nothing to backup).\n */\n private async createCacheBackup(): Promise<void> {\n const backupPath = `${this.cachePath}.backup`;\n\n try {\n const cacheExists = await this.cacheFileExists();\n if (cacheExists) {\n await fs.copyFile(this.cachePath, backupPath);\n }\n } catch (error) {\n // If backup creation fails, log warning but don't block write\n console.warn(`Warning: Could not create cache backup: ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n\n /**\n * [EARS-14] Restores cache from backup file.\n * Used when cache write operation fails to preserve previous state.\n */\n private async restoreCacheFromBackup(): Promise<void> {\n const backupPath = `${this.cachePath}.backup`;\n\n try {\n // Check if backup exists\n await fs.access(backupPath);\n\n // Restore backup to original cache location\n await fs.copyFile(backupPath, this.cachePath);\n\n // Clean up backup after restoration\n await fs.unlink(backupPath);\n } catch (error) {\n // If no backup exists or restoration fails, log but don't throw\n // (original cache is already gone at this point)\n console.warn(`Warning: Could not restore cache from backup: ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n\n /**\n * [EARS-14] Deletes backup file after successful cache write.\n */\n private async deleteCacheBackup(): Promise<void> {\n const backupPath = `${this.cachePath}.backup`;\n\n try {\n await fs.unlink(backupPath);\n } catch {\n // Backup might not exist or already deleted - this is fine\n }\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-7 to EARS-10] Calculates system-wide derived states for analytics and filtering.\n * \n * Applies DerivedDataProtocol algorithms to categorize tasks:\n * - isStalled: Tasks en 'active' sin executions >7 dĆ­as O en 'review' sin approval >3 dĆ­as\n * - isAtRisk: Tasks con prioridad 'critical' + 'paused' O 2+ blocking feedbacks\n * - needsClarification: Tasks con feedback tipo 'question' abierto\n * - isBlockedByDependency: Tasks con referencias a tasks no completadas\n * \n * @see derived_data_protocol.md for detailed algorithms\n * @see EARS-7, EARS-8, EARS-9, EARS-10 for requirements\n */\n async calculateDerivedStates(allRecords: AllRecords): Promise<DerivedStates> {\n const derivedStates: DerivedStates = {\n stalledTasks: [],\n atRiskTasks: [],\n needsClarificationTasks: [],\n blockedByDependencyTasks: []\n };\n\n const now = Date.now();\n const SEVEN_DAYS_MS = 7 * 24 * 60 * 60 * 1000;\n\n try {\n for (const task of allRecords.tasks) {\n const taskId = task.payload.id;\n const taskPayload = task.payload;\n\n // [EARS-8] Calculate isStalled\n // Tasks en 'active' sin executions por >7 dĆ­as O en 'review' sin approval por >3 dĆ­as\n if (taskPayload.status === 'active' || taskPayload.status === 'review') {\n const taskTimestamp = this.getTimestampFromId(taskId) * 1000; // Convert to milliseconds\n const daysSinceCreation = (now - taskTimestamp) / (24 * 60 * 60 * 1000);\n\n // Check executions para tasks activas\n const hasRecentExecution = allRecords.executions.some(exec => {\n if (exec.payload.taskId === taskId) {\n const execTimestamp = this.getTimestampFromId(exec.payload.id) * 1000; // Convert to milliseconds\n return (now - execTimestamp) < SEVEN_DAYS_MS;\n }\n return false;\n });\n\n const isStalled =\n (taskPayload.status === 'active' && daysSinceCreation > 7 && !hasRecentExecution) ||\n (taskPayload.status === 'review' && daysSinceCreation > 3);\n\n if (isStalled) {\n derivedStates.stalledTasks.push(taskId);\n }\n }\n\n // [EARS-9] Calculate isAtRisk\n // Tasks con prioridad 'critical' + 'paused' O 2+ blocking feedbacks abiertos\n const isCriticalPaused = taskPayload.priority === 'critical' && taskPayload.status === 'paused';\n const blockingFeedbackCount = allRecords.feedback.filter(feedback => {\n return feedback.payload.type === 'blocking' &&\n feedback.payload.status === 'open' &&\n feedback.payload.entityId === taskId;\n }).length;\n\n if (isCriticalPaused || blockingFeedbackCount >= 2) {\n derivedStates.atRiskTasks.push(taskId);\n }\n\n // [EARS-9] Calculate needsClarification\n // Tasks con feedback tipo 'question' abierto\n const hasOpenQuestion = allRecords.feedback.some(feedback => {\n return feedback.payload.type === 'question' &&\n feedback.payload.status === 'open' &&\n feedback.payload.entityId === taskId;\n });\n\n if (hasOpenQuestion) {\n derivedStates.needsClarificationTasks.push(taskId);\n }\n\n // [EARS-10] Calculate isBlockedByDependency\n // Tasks con referencias a otras tasks no completadas\n if (taskPayload.references && taskPayload.references.length > 0) {\n const hasBlockingDependency = taskPayload.references.some(ref => {\n if (ref.startsWith('task:')) {\n const dependencyId = ref.replace('task:', '');\n const dependencyTask = allRecords.tasks.find(t => t.payload.id === dependencyId);\n return dependencyTask &&\n dependencyTask.payload.status !== 'done' &&\n dependencyTask.payload.status !== 'archived';\n }\n return false;\n });\n\n if (hasBlockingDependency) {\n derivedStates.blockedByDependencyTasks.push(taskId);\n }\n }\n }\n\n return derivedStates;\n } catch (error) {\n console.warn(`calculateDerivedStates error: ${error instanceof Error ? error.message : String(error)}`);\n // Return empty derived states on error (graceful degradation)\n return derivedStates;\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 * @param taskPayload - Task payload (not full record with headers)\n */\n async calculateLastUpdated(\n taskPayload: TaskRecord,\n relatedRecords: AllRecords\n ): Promise<{ lastUpdated: number; lastActivityType: EnrichedTaskRecord['lastActivityType']; recentActivity: string }> {\n try {\n let lastUpdated = this.getTimestampFromId(taskPayload.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', `${taskPayload.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(taskPayload.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 === taskPayload.id || (f.payload.content && f.payload.content.includes(taskPayload.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 === taskPayload.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 && c.payload.relatedTasks.includes(taskPayload.id)) ||\n c.payload.description?.includes(taskPayload.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(taskPayload.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 /**\n * Enriches a task with complete intelligence layer (EARS 25-48)\n * \n * 11-step algorithm:\n * 1. Activity metadata (lastUpdated, lastActivityType, recentActivity)\n * 2. Signatures (author, lastModifier with timestamps)\n * 3. Assignments (assignedTo from feedback)\n * 4. Dependencies (dependsOn, blockedBy with typed references)\n * 5. Cycles (all cycles as array with id+title)\n * 6. Metrics (executionCount, blockingFeedbackCount, openQuestionCount)\n * 7. Time to resolution (for done tasks)\n * 8. Release info (isReleased, lastReleaseVersion from changelogs)\n * 9. Derived states (EARS-43: REUTILIZA pre-calculated derivedStates con O(1) lookup)\n * 10. Health score (0-100 using multi-factor algorithm)\n * 11. Time in current stage (days)\n * \n * @param task - Full GitGovTaskRecord with header.signatures\n * @param relatedRecords - All records for cross-referencing\n * @param derivedStateSets - Pre-calculated system-wide derived states as Sets for O(1) lookup (EARS-43)\n * @returns Promise<EnrichedTaskRecord> - Task with complete intelligence layer\n */\n async enrichTaskRecord(\n task: GitGovTaskRecord,\n relatedRecords: AllRecords,\n derivedStateSets: DerivedStateSets\n ): Promise<EnrichedTaskRecord> {\n // Step 1: Activity metadata\n const { lastUpdated, lastActivityType, recentActivity } = await this.calculateLastUpdated(task.payload, relatedRecords);\n\n // Step 2: Signatures (author, lastModifier) using signature_utils helpers\n const author = extractAuthor(task);\n const lastModifier = extractLastModifier(task);\n\n // Step 3: Assignments (assignedTo from feedback)\n const assignments = relatedRecords.feedback\n .filter(f => f.payload.entityId === task.payload.id && f.payload.type === 'assignment')\n .map(f => ({\n actorId: f.payload.assignee || 'unknown',\n assignedAt: this.getTimestampFromId(f.payload.id) * 1000 // ms\n }));\n\n // Step 4: Dependencies (dependsOn, blockedBy with typed references)\n // [EARS-37] Include ALL typed references (task:, pr:, issue:, file:, url:)\n // Filter out completed tasks, but preserve external references always\n const completedStatuses = ['done', 'archived', 'discarded'];\n const dependsOn = (task.payload.references || [])\n .filter(ref => {\n // Include all typed references (task:, pr:, issue:, file:, url:)\n const hasValidPrefix = ref.startsWith('task:') || ref.startsWith('pr:') ||\n ref.startsWith('issue:') || ref.startsWith('file:') ||\n ref.startsWith('url:');\n\n if (!hasValidPrefix) return false;\n\n // For task: references, filter out completed tasks\n if (ref.startsWith('task:')) {\n const refTaskId = ref.replace('task:', '');\n const refTask = relatedRecords.tasks.find(t => t.payload.id === refTaskId);\n return !refTask || !refTask.payload.status || !completedStatuses.includes(refTask.payload.status);\n }\n\n // For external references (pr:, issue:, file:, url:), always include\n return true;\n });\n\n const blockedBy = relatedRecords.tasks\n .filter(t => !completedStatuses.includes(t.payload.status))\n .filter(t => (t.payload.references || []).includes(`task:${task.payload.id}`))\n .map(t => `task:${t.payload.id}`);\n\n // Step 5: Cycles (all cycles as array with id+title)\n const cycles = (task.payload.cycleIds || [])\n .map(cycleId => {\n const cycle = relatedRecords.cycles.find(c => c.payload.id === cycleId);\n return cycle ? { id: cycleId, title: cycle.payload.title } : null;\n })\n .filter((c): c is { id: string; title: string } => c !== null);\n\n // Step 6: Metrics\n const executionCount = relatedRecords.executions.filter(e => e.payload.taskId === task.payload.id).length;\n const blockingFeedbackCount = relatedRecords.feedback.filter(\n f => f.payload.entityId === task.payload.id && f.payload.type === 'blocking' && f.payload.status === 'open'\n ).length;\n const openQuestionCount = relatedRecords.feedback.filter(\n f => f.payload.entityId === task.payload.id && f.payload.type === 'question' && f.payload.status === 'open'\n ).length;\n\n // Step 7: Time to resolution (for done tasks)\n const timeToResolution: number | undefined = task.payload.status === 'done'\n ? (lastUpdated - this.getTimestampFromId(task.payload.id) * 1000) / (1000 * 60 * 60) // horas\n : undefined;\n\n // Step 8: Release info (from changelogs)\n const releaseChangelogs = relatedRecords.changelogs.filter(cl =>\n cl.payload.relatedTasks.includes(task.payload.id)\n );\n const isReleased = releaseChangelogs.length > 0;\n const lastReleaseVersion: string | undefined = isReleased\n ? (releaseChangelogs[releaseChangelogs.length - 1]?.payload.version || undefined)\n : undefined;\n\n // Step 9: Derived states (EARS-43: Usar pre-calculated derivedStates con O(1) lookup)\n // NO recalcular - buscar en los Sets de derivedStateSets pre-calculados\n const taskId = task.payload.id;\n const isStalled = derivedStateSets.stalledTasks.has(taskId);\n const isAtRisk = derivedStateSets.atRiskTasks.has(taskId);\n const needsClarification = derivedStateSets.needsClarificationTasks.has(taskId);\n const isBlockedByDependency = derivedStateSets.blockedByDependencyTasks.has(taskId);\n\n // Calculate daysSinceLastUpdate for health score and timeInCurrentStage\n const daysSinceLastUpdate = (Date.now() - lastUpdated) / (1000 * 60 * 60 * 24);\n\n // Step 10: Health score (0-100)\n let healthScore = 100;\n\n // Status health (30 points)\n if (task.payload.status === 'done') healthScore -= 0; // Perfect\n else if (task.payload.status === 'active') healthScore -= 5;\n else if (task.payload.status === 'ready') healthScore -= 10;\n else if (task.payload.status === 'review') healthScore -= 15;\n else if (task.payload.status === 'paused') healthScore -= 25;\n else healthScore -= 30; // draft, archived, discarded\n\n // Feedback health (30 points)\n healthScore -= Math.min(blockingFeedbackCount * 10, 30);\n\n // Executions health (20 points)\n if (executionCount === 0 && task.payload.status === 'active') healthScore -= 20;\n else if (executionCount < 2) healthScore -= 10;\n\n // Time health (20 points)\n if (daysSinceLastUpdate > 30) healthScore -= 20;\n else if (daysSinceLastUpdate > 14) healthScore -= 15;\n else if (daysSinceLastUpdate > 7) healthScore -= 10;\n\n healthScore = Math.max(0, Math.min(100, healthScore));\n\n // Step 11: Time in current stage (days)\n const timeInCurrentStage = daysSinceLastUpdate;\n\n // Build enriched record with conditional optional properties\n const enrichedRecord: EnrichedTaskRecord = {\n ...task.payload,\n derivedState: {\n isStalled,\n isAtRisk,\n needsClarification,\n isBlockedByDependency,\n healthScore,\n timeInCurrentStage\n },\n relationships: {\n ...(author && { author }),\n ...(lastModifier && { lastModifier }),\n assignedTo: assignments,\n dependsOn,\n blockedBy,\n cycles\n },\n metrics: {\n executionCount,\n blockingFeedbackCount,\n openQuestionCount,\n ...(timeToResolution !== undefined && { timeToResolution })\n },\n release: {\n isReleased,\n ...(lastReleaseVersion !== undefined && { lastReleaseVersion })\n },\n lastUpdated,\n lastActivityType,\n ...(recentActivity && { recentActivity })\n };\n\n return enrichedRecord;\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","/**\n * Signature Extraction Utilities\n * \n * Generic helpers for extracting metadata from EmbeddedMetadataRecord signatures.\n * These utilities work with any record type and implement graceful degradation\n * for records without signatures.\n * \n * @module signature_utils\n */\n\nimport type { EmbeddedMetadataRecord } from '../types/embedded.types';\nimport type { GitGovRecordPayload } from '../types/common.types';\n\n/**\n * Result type for author/lastModifier extraction with timestamp.\n */\nexport type SignatureInfo = {\n actorId: string;\n timestamp: number;\n};\n\n/**\n * Extracts the author (first signer) from a record with timestamp.\n * \n * The author is defined as the actor who created the first signature in the record.\n * This represents the original creator of the record.\n * \n * @template T - The payload type of the record\n * @param record - The GitGovernance record with embedded metadata\n * @returns SignatureInfo with actorId and timestamp, or undefined if no signatures\n * \n * @example\n * ```typescript\n * const author = extractAuthor(taskRecord);\n * if (author) {\n * console.log(`Created by ${author.actorId} at ${author.timestamp}`);\n * }\n * ```\n */\nexport function extractAuthor<T extends GitGovRecordPayload>(\n record: EmbeddedMetadataRecord<T>\n): SignatureInfo | undefined {\n const signatures = record.header.signatures;\n\n // Graceful degradation: return undefined for missing/empty signatures\n if (!signatures || signatures.length === 0) {\n return undefined;\n }\n\n const firstSignature = signatures[0];\n return {\n actorId: firstSignature.keyId,\n timestamp: firstSignature.timestamp\n };\n}\n\n/**\n * Extracts the last modifier (last signer) from a record with timestamp.\n * \n * The last modifier is the actor who added the most recent signature.\n * For records with only one signature, this will be the same as the author.\n * \n * @template T - The payload type of the record\n * @param record - The GitGovernance record with embedded metadata\n * @returns SignatureInfo with actorId and timestamp, or undefined if no signatures\n * \n * @example\n * ```typescript\n * const lastModifier = extractLastModifier(taskRecord);\n * if (lastModifier) {\n * console.log(`Last modified by ${lastModifier.actorId} at ${lastModifier.timestamp}`);\n * }\n * ```\n */\nexport function extractLastModifier<T extends GitGovRecordPayload>(\n record: EmbeddedMetadataRecord<T>\n): SignatureInfo | undefined {\n const signatures = record.header.signatures;\n\n // Graceful degradation: return undefined for missing/empty signatures\n if (!signatures || signatures.length === 0) {\n return undefined;\n }\n\n const lastSignature = signatures[signatures.length - 1];\n if (!lastSignature) {\n return undefined;\n }\n\n return {\n actorId: lastSignature.keyId,\n timestamp: lastSignature.timestamp\n };\n}\n\n/**\n * Extracts all unique contributors (signers) from a record.\n * \n * Returns an array of unique actor IDs (keyIds) who have signed the record.\n * Useful for collaboration analysis and determining who has worked on a record.\n * \n * @template T - The payload type of the record\n * @param record - The GitGovernance record with embedded metadata\n * @returns Array of unique actor IDs (keyIds), empty array if no signatures\n * \n * @example\n * ```typescript\n * const contributors = extractContributors(taskRecord);\n * console.log(`${contributors.length} people worked on this task`);\n * ```\n * \n * @performance O(n) where n = number of signatures (typically 1-3, max ~10)\n */\nexport function extractContributors<T extends GitGovRecordPayload>(\n record: EmbeddedMetadataRecord<T>\n): string[] {\n const signatures = record.header.signatures;\n\n // Graceful degradation: return empty array for missing/empty signatures\n if (!signatures || signatures.length === 0) {\n return [];\n }\n\n // Use Set for deduplication, then convert to array\n const uniqueKeyIds = new Set<string>();\n for (const sig of signatures) {\n uniqueKeyIds.add(sig.keyId);\n }\n\n return Array.from(uniqueKeyIds);\n}\n\n/**\n * Extracts the timestamp of the last signature in a record.\n * \n * This represents when the record was last modified. Useful for sorting\n * and determining activity recency.\n * \n * @template T - The payload type of the record\n * @param record - The GitGovernance record with embedded metadata\n * @returns Unix timestamp of the last signature, or undefined if no signatures\n * \n * @example\n * ```typescript\n * const lastActivity = extractLastSignatureTimestamp(taskRecord);\n * if (lastActivity) {\n * const daysAgo = (Date.now() - lastActivity) / (1000 * 60 * 60 * 24);\n * console.log(`Last activity ${daysAgo} days ago`);\n * }\n * ```\n */\nexport function extractLastSignatureTimestamp<T extends GitGovRecordPayload>(\n record: EmbeddedMetadataRecord<T>\n): number | undefined {\n const signatures = record.header.signatures;\n\n // Graceful degradation: return undefined for missing/empty signatures\n if (!signatures || signatures.length === 0) {\n return undefined;\n }\n\n const lastSignature = signatures[signatures.length - 1];\n return lastSignature?.timestamp;\n}\n\n/**\n * Gets the total count of signatures in a record.\n * \n * Useful for determining how many times a record has been modified\n * or how many actors have contributed to it.\n * \n * @template T - The payload type of the record\n * @param record - The GitGovernance record with embedded metadata\n * @returns Number of signatures, or 0 if no signatures\n * \n * @example\n * ```typescript\n * const signatureCount = getSignatureCount(taskRecord);\n * console.log(`Record has been signed ${signatureCount} times`);\n * ```\n */\nexport function getSignatureCount<T extends GitGovRecordPayload>(\n record: EmbeddedMetadataRecord<T>\n): number {\n const signatures = record.header.signatures;\n\n // Graceful degradation: return 0 for missing/empty signatures\n if (!signatures || signatures.length === 0) {\n return 0;\n }\n\n return signatures.length;\n}\n\n","export * from \"./checksum\";\nexport * from \"./signatures\";\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';\nimport { getImportMetaUrl } from '../../utils/esm_helper';\nimport { createRequire } from 'module';\nimport { fileURLToPath } from 'url';\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 const targetPrompt = pathUtils.join(gitgovPath, 'gitgov');\n const potentialSources: string[] = [];\n\n // 1ļøāƒ£ Development scenario: search in monorepo prompts/ (package root)\n potentialSources.push(\n pathUtils.join(process.cwd(), 'prompts/gitgov_agent_prompt.md'),\n );\n\n // 2ļøāƒ£ NPM installation: use require.resolve to find @gitgov/core package\n try {\n // Get import.meta.url via helper (separated to avoid Jest parse errors)\n const metaUrl = getImportMetaUrl();\n\n if (metaUrl) {\n const require = createRequire(metaUrl);\n const pkgJsonPath = require.resolve('@gitgov/core/package.json');\n const pkgRoot = pathUtils.dirname(pkgJsonPath);\n const promptPath = pathUtils.join(pkgRoot, 'prompts/gitgov_agent_prompt.md');\n potentialSources.push(promptPath);\n }\n } catch {\n // require.resolve failed - continue with other sources\n }\n\n // 3ļøāƒ£ Build fallback: relative to compiled __dirname\n try {\n // Get import.meta.url via helper (separated to avoid Jest parse errors)\n const metaUrl = getImportMetaUrl();\n\n if (metaUrl) {\n const __filename = fileURLToPath(metaUrl);\n const __dirname = pathUtils.dirname(__filename);\n const promptPath = pathUtils.resolve(__dirname, '../../prompts/gitgov_agent_prompt.md');\n potentialSources.push(promptPath);\n }\n } catch {\n // import.meta not available - continue with other sources\n }\n\n // šŸ” Find and copy the first accessible file\n for (const source of potentialSources) {\n try {\n await fs.access(source);\n await fs.copyFile(source, targetPrompt);\n console.log(`šŸ“‹ @gitgov agent prompt copied to .gitgov/gitgov`);\n return;\n } catch {\n // Source not accessible, try next one\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","/**\n * ESM Helper - Provides access to import.meta for use in ESM contexts\n * \n * This file is separated because import.meta cannot be used in Jest/CommonJS tests.\n * Jest will mock this module when running tests.\n */\n\n/**\n * Get the current module URL (import.meta.url)\n * Returns null in non-ESM contexts (like Jest tests)\n */\nexport function getImportMetaUrl(): string | null {\n try {\n return import.meta.url;\n } catch {\n return null;\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 \"./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 function createWorkflowMethodologyConfig(\n payload: Partial<WorkflowMethodologyRecord>\n): 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: 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==', // Dummy 88-char base64 for testing (86 chars + ==, matches Ed25519 signature format)\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 = createEmbeddedMetadataRecord(actorPayload);\n * ```\n */\nexport function createEmbeddedMetadataRecord<T extends GitGovRecordPayload>(\n payload: T,\n options: CreateEmbeddedMetadataOptions = {}\n): 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","/**\n * Lint Module - Structural Validation for GitGovernance Records\n * \n * This module provides comprehensive validation capabilities for GitGovernance records,\n * implementing Quality Model Layer 1 (Structural + Referential Integrity).\n * \n * Follows the same architectural pattern as all other adapters with public interface\n * (ILintModule) for dependency injection and testability.\n * \n * @module lint\n * @example\n * ```typescript\n * import { LintModule, type ILintModule } from '@gitgov/core/lint';\n * \n * const lintModule: ILintModule = new LintModule({\n * recordStore: taskStore,\n * indexerAdapter: indexerAdapter // optional\n * });\n * \n * // Validate all records\n * const report = await lintModule.lint({ validateReferences: true });\n * console.log(`Errors: ${report.summary.errors}`);\n * \n * // Auto-fix problems\n * if (report.summary.fixable > 0) {\n * const fixReport = await lintModule.fix(report, { createBackups: true });\n * console.log(`Fixed: ${fixReport.summary.fixed}`);\n * }\n * ```\n */\n\nexport { LintModule } from \"./lint\";\nexport type {\n ILintModule,\n LintModuleDependencies,\n LintOptions,\n LintReport,\n LintSummary,\n LintResult,\n ValidatorType,\n ValidationContext,\n FixOptions,\n FixReport,\n FixResult,\n FileSystem\n} from \"./lint.types\";\n","import { promises as fs } from \"fs\";\nimport { join, dirname, basename } from \"path\";\nimport type {\n ILintModule,\n LintModuleDependencies,\n LintOptions,\n LintReport,\n LintResult,\n FixOptions,\n FixReport,\n FixResult,\n ValidatorType,\n FileSystem\n} from \"./lint.types\";\nimport type { RecordStore } from \"../store/record_store\";\nimport type { IIndexerAdapter } from \"../adapters/indexer_adapter\";\nimport type {\n GitGovRecord,\n GitGovRecordPayload,\n CustomRecord,\n TaskRecord,\n CycleRecord,\n ExecutionRecord,\n GitGovRecordType\n} from \"../types\";\nimport type { Signature } from \"../types/embedded.types\";\nimport { DetailedValidationError } from \"../validation/common\";\nimport { createLogger } from \"../logger\";\nimport { calculatePayloadChecksum } from \"../crypto/checksum\";\nimport { signPayload } from \"../crypto/signatures\";\nimport { ConfigManager } from \"../config_manager\";\nimport { readdir } from \"fs/promises\";\nimport {\n loadTaskRecord,\n loadActorRecord,\n loadAgentRecord,\n loadCycleRecord,\n loadExecutionRecord,\n loadChangelogRecord,\n loadFeedbackRecord\n} from \"../factories\";\n\ntype StorablePayload = Exclude<GitGovRecordPayload, CustomRecord>;\n\n/**\n * Type guard to check if a payload is a TaskRecord\n */\nfunction isTaskRecord(payload: GitGovRecordPayload): payload is TaskRecord {\n return 'title' in payload && 'status' in payload && 'priority' in payload && 'description' in payload;\n}\n\n/**\n * Type guard to check if a payload is a CycleRecord\n */\nfunction isCycleRecord(payload: GitGovRecordPayload): payload is CycleRecord {\n return 'title' in payload && 'status' in payload && !('priority' in payload);\n}\n\n/**\n * Type guard to check if a payload is an ExecutionRecord\n */\nfunction isExecutionRecord(payload: GitGovRecordPayload): payload is ExecutionRecord {\n return 'taskId' in payload && 'type' in payload && 'result' in payload;\n}\n\n\nconst logger = createLogger(\"[LintModule]\");\n\n/**\n * Structural validation module for GitGovernance records.\n * \n * Implements Quality Model Layer 1 with delegation to recordStore.read()\n * for base validation and adds additional validations for conventions and references.\n * \n * Implements ILintModule interface following the same pattern as all other adapters\n * (IBacklogAdapter, IFeedbackAdapter, etc.) for consistency and testability.\n * \n * @class LintModule\n * @implements {ILintModule}\n * @example\n * ```typescript\n * const lintModule: ILintModule = new LintModule({\n * recordStore: taskStore,\n * indexerAdapter: indexerAdapter // optional\n * });\n * \n * const report = await lintModule.lint({ validateReferences: true });\n * ```\n */\nexport class LintModule implements ILintModule {\n private readonly recordStore: RecordStore<StorablePayload>;\n private readonly indexerAdapter: IIndexerAdapter | null;\n private readonly fileSystem: FileSystem;\n private lastBackupPath: string | null = null;\n\n /**\n * Constructor for LintModule with graceful degradation.\n * \n * @param dependencies - Module dependencies (some optional)\n * @throws {Error} If recordStore is not present\n * \n * @example\n * ```typescript\n * const lintModule = new LintModule({\n * recordStore: taskStore, // REQUIRED\n * indexerAdapter: indexerAdapter, // optional\n * fileSystem: customFileSystem // optional (default: Node.js fs)\n * });\n * ```\n */\n constructor(dependencies: LintModuleDependencies) {\n // Validate required dependencies\n if (!dependencies.recordStore) {\n throw new Error(\"recordStore is required for file access\");\n }\n\n this.recordStore = dependencies.recordStore;\n\n // Optional dependencies with graceful degradation\n this.indexerAdapter = dependencies.indexerAdapter ?? null;\n if (!this.indexerAdapter) {\n logger.warn(\n \"indexerAdapter not provided, reference validation will be limited\"\n );\n }\n\n // FileSystem with fallback to Node.js fs\n this.fileSystem = dependencies.fileSystem ?? {\n readFile: async (path: string, encoding: string) => {\n return fs.readFile(path, encoding as BufferEncoding);\n },\n writeFile: async (path: string, content: string) => {\n await fs.writeFile(path, content, \"utf-8\");\n },\n exists: async (path: string) => {\n try {\n await fs.access(path);\n return true;\n } catch {\n return false;\n }\n },\n unlink: async (path: string) => {\n await fs.unlink(path);\n }\n };\n }\n\n /**\n * Valida todos los records en el directorio especificado.\n * \n * Usa delegation pattern: llama a recordStore.read() que internamente usa loaders\n * para validar schema + embedded metadata. Luego agrega validaciones adicionales\n * (convenciones, referencias).\n * \n * @param options - Opciones de configuración\n * @returns {Promise<LintReport>} Reporte consolidado con todos los resultados\n * \n * @example\n * ```typescript\n * const report = await lintModule.lint({\n * path: '.gitgov/',\n * validateReferences: true,\n * validateActors: true,\n * concurrent: true\n * });\n * \n * console.log(`Errors: ${report.summary.errors}`);\n * console.log(`Warnings: ${report.summary.warnings}`);\n * ```\n */\n async lint(options?: Partial<LintOptions>): Promise<LintReport> {\n const startTime = Date.now();\n\n // Merge con defaults\n const opts: LintOptions = {\n path: options?.path ?? \".gitgov/\",\n validateReferences: options?.validateReferences ?? false,\n validateActors: options?.validateActors ?? false,\n validateChecksums: options?.validateChecksums ?? true,\n validateSignatures: options?.validateSignatures ?? true,\n validateConventions: options?.validateConventions ?? true,\n failFast: options?.failFast ?? false,\n concurrent: options?.concurrent ?? true,\n concurrencyLimit: options?.concurrencyLimit ?? 10\n };\n\n const results: LintResult[] = [];\n\n // Temporarily suppress console.warn from RecordStore to avoid cluttering output\n // The detailed errors will be captured and shown in the lint report\n const originalWarn = console.warn;\n console.warn = () => { }; // Suppress warnings during lint execution\n\n try {\n // 1. Discovery: Get all record IDs from all stores\n // IMPORTANT: Always scan filesystem directly to find ALL .json files,\n // not just the ones that passed indexer validation.\n // The indexer may skip invalid records, but we want to lint ALL records.\n const recordsWithTypes = await this.discoverAllRecordsWithTypes(opts.path);\n const recordIds = recordsWithTypes.map(r => r.id);\n\n logger.info(`Starting lint validation for ${recordIds.length} records`);\n\n // 2. Validation Loop (concurrent or sequential)\n // Create a map of recordId -> entityType for efficient lookup\n // We already have the types from discoverAllRecordsWithTypes\n const recordTypeMap = new Map<string, Exclude<GitGovRecordType, 'custom'>>();\n for (const { id, type } of recordsWithTypes) {\n recordTypeMap.set(id, type);\n }\n\n if (opts.concurrent) {\n // Process in batches for concurrency control\n const batches = this.chunkArray(recordIds, opts.concurrencyLimit!);\n\n for (const batch of batches) {\n const batchResults = await Promise.all(\n batch.map(recordId => this.lintSingleRecord(recordId, opts, recordTypeMap.get(recordId)))\n );\n\n for (const batchResult of batchResults) {\n results.push(...batchResult);\n\n // Fail-fast: detener si hay errores fatales\n if (opts.failFast && batchResult.some(r => r.level === \"error\")) {\n logger.warn(\"Fail-fast mode: stopping after first error\");\n break;\n }\n }\n\n if (opts.failFast && results.some(r => r.level === \"error\")) {\n break;\n }\n }\n } else {\n // Sequential processing\n for (const recordId of recordIds) {\n const recordResults = await this.lintSingleRecord(recordId, opts, recordTypeMap.get(recordId));\n results.push(...recordResults);\n\n if (opts.failFast && recordResults.some(r => r.level === \"error\")) {\n logger.warn(\"Fail-fast mode: stopping after first error\");\n break;\n }\n }\n }\n\n // 3. Aggregate results\n const executionTime = Date.now() - startTime;\n const errors = results.filter(r => r.level === \"error\").length;\n const warnings = results.filter(r => r.level === \"warning\").length;\n const fixable = results.filter(r => r.fixable).length;\n\n logger.info(\n `Lint completed in ${executionTime}ms: ${recordIds.length} files, ${errors} errors, ${warnings} warnings`\n );\n\n return {\n summary: {\n filesChecked: recordIds.length,\n errors,\n warnings,\n fixable,\n executionTime\n },\n results,\n metadata: {\n timestamp: new Date().toISOString(),\n options: opts,\n version: \"1.0.0\"\n }\n };\n } catch (error) {\n logger.error(\"Lint operation failed:\", error);\n throw error;\n } finally {\n // Restore console.warn\n console.warn = originalWarn;\n }\n }\n\n /**\n * Validates a specific file and returns its results.\n * Ultra-fast validation for single records (target: <50ms).\n * \n * @param filePath - Path to the file to validate\n * @param options - Configuration options\n * @returns {Promise<LintReport>} Lint report for this single file\n * \n * @example\n * ```typescript\n * const report = await lintModule.lintFile('.gitgov/tasks/1234567890-task-example.json', {\n * validateReferences: true\n * });\n * ```\n */\n async lintFile(filePath: string, options?: Partial<LintOptions>): Promise<LintReport> {\n const startTime = Date.now();\n\n // Extract recordId from filePath\n const recordId = this.extractRecordId(filePath);\n\n // Determine entity type from file path (more reliable than from recordId)\n // Path format: .gitgov/{type}s/{recordId}.json\n const pathParts = filePath.split('/');\n const typeDirIndex = pathParts.findIndex(part =>\n ['tasks', 'cycles', 'executions', 'changelogs', 'feedback', 'actors', 'agents'].includes(part)\n );\n let entityType: Exclude<GitGovRecordType, 'custom'> = this.getEntityType(recordId);\n if (typeDirIndex >= 0 && pathParts[typeDirIndex]) {\n const typeDir = pathParts[typeDirIndex];\n // Convert directory name to record type (plural -> singular)\n const typeMap: Record<string, Exclude<GitGovRecordType, 'custom'>> = {\n 'tasks': 'task',\n 'cycles': 'cycle',\n 'executions': 'execution',\n 'changelogs': 'changelog',\n 'feedback': 'feedback',\n 'actors': 'actor',\n 'agents': 'agent'\n };\n entityType = typeMap[typeDir] || entityType;\n }\n\n // Merge with defaults\n const opts: LintOptions = {\n path: filePath,\n validateReferences: options?.validateReferences ?? false,\n validateActors: options?.validateActors ?? false,\n validateChecksums: options?.validateChecksums ?? true,\n validateSignatures: options?.validateSignatures ?? true,\n validateConventions: options?.validateConventions ?? true,\n failFast: options?.failFast ?? false,\n concurrent: false, // Single file, no concurrency needed\n concurrencyLimit: 1\n };\n\n // Temporarily suppress console.warn from RecordStore to avoid cluttering output\n const originalWarn = console.warn;\n console.warn = () => { }; // Suppress warnings during lint execution\n\n try {\n // Validate single record (pass entityType to ensure correct loader is used)\n const results = await this.lintSingleRecord(recordId, opts, entityType);\n\n // Build report\n const executionTime = Date.now() - startTime;\n const errors = results.filter(r => r.level === \"error\").length;\n const warnings = results.filter(r => r.level === \"warning\").length;\n const fixable = results.filter(r => r.fixable).length;\n\n return {\n summary: {\n filesChecked: 1,\n errors,\n warnings,\n fixable,\n executionTime\n },\n results,\n metadata: {\n timestamp: new Date().toISOString(),\n options: opts,\n version: \"1.0.0\"\n }\n };\n } finally {\n // Restore console.warn\n console.warn = originalWarn;\n }\n }\n\n /**\n * Valida un record individual y retorna sus resultados.\n * \n * @private\n * @param recordId - ID del record a validar\n * @param options - Opciones de configuración\n * @returns {Promise<LintResult[]>} Array de resultados para este record\n */\n private async lintSingleRecord(\n recordId: string,\n options: LintOptions,\n entityTypeOverride?: Exclude<GitGovRecordType, 'custom'>\n ): Promise<LintResult[]> {\n const results: LintResult[] = [];\n const entityType = entityTypeOverride || this.getEntityType(recordId);\n // Use the path from options if it's a file path, otherwise construct it\n let filePath: string;\n if (options.path && options.path.endsWith('.json')) {\n // Resolve to absolute path if relative\n // Use ConfigManager.findProjectRoot() to ensure we resolve relative to project root, not cwd\n const projectRoot = ConfigManager.findProjectRoot();\n if (options.path.startsWith('/')) {\n filePath = options.path;\n } else if (projectRoot) {\n // If path is relative and we have project root, resolve from project root\n filePath = join(projectRoot, options.path);\n } else {\n // Fallback to process.cwd() if no project root found\n filePath = join(process.cwd(), options.path);\n }\n } else {\n filePath = this.getFilePath(recordId, entityType);\n }\n\n try {\n\n // Try to read the file directly and validate with the appropriate loader\n // This works for all record types, not just the one configured in recordStore\n let record: GitGovRecord | null = null;\n try {\n const content = await this.fileSystem.readFile(filePath, 'utf-8');\n const raw = JSON.parse(content);\n\n // Load with the appropriate loader based on entity type\n // entityType is Exclude<GitGovRecordType, 'custom'>, so no need to check for 'custom'\n switch (entityType) {\n case 'task':\n record = loadTaskRecord(raw);\n break;\n case 'actor':\n record = loadActorRecord(raw);\n break;\n case 'agent':\n record = loadAgentRecord(raw);\n break;\n case 'cycle':\n record = loadCycleRecord(raw);\n break;\n case 'execution':\n record = loadExecutionRecord(raw);\n break;\n case 'changelog':\n record = loadChangelogRecord(raw);\n break;\n case 'feedback':\n record = loadFeedbackRecord(raw);\n break;\n default:\n // Unknown type, try to read with configured recordStore as fallback\n record = await this.recordStore.read(recordId);\n }\n } catch (validationError) {\n // File read or validation failed\n if (validationError instanceof DetailedValidationError) {\n // Filter out redundant oneOf errors when there's an \"additional properties\" error\n // These oneOf errors are side effects of the additional property, not separate issues\n const hasAdditionalProperties = validationError.errors.some(e =>\n e.message.includes(\"must NOT have additional properties\") ||\n e.message.includes(\"must not have additional properties\")\n );\n\n // If there's an additional properties error, filter out oneOf errors\n const filteredErrors = hasAdditionalProperties\n ? validationError.errors.filter(e =>\n !e.message.includes(\"oneOf\") &&\n !e.message.includes(\"must match\") &&\n !e.message.includes(\"boolean schema is false\")\n )\n : validationError.errors;\n\n // Create one LintResult per error to show ALL errors, not just the first one\n for (const err of filteredErrors) {\n // Create temp error with field path in message for better detection\n const tempError = new DetailedValidationError('Record', [err]);\n tempError.message = `${err.field}: ${err.message}`;\n const validatorType = this.detectValidatorType(tempError);\n const isFixable = this.isFixable(tempError);\n\n results.push({\n level: \"error\",\n filePath,\n validator: validatorType,\n message: `${err.field}: ${err.message}`,\n entity: {\n type: entityType,\n id: recordId\n },\n fixable: isFixable,\n ...(err && {\n context: {\n ...(err.field && { field: err.field }),\n ...(err.value !== undefined && { actual: err.value }),\n ...(err.message && { expected: err.message })\n }\n })\n });\n }\n return results;\n }\n\n // If validationError is not DetailedValidationError, it's a file read error\n const fsError = validationError as NodeJS.ErrnoException;\n let errorMessage: string;\n if (fsError.code === 'ENOENT') {\n errorMessage = `Record file not found: ${recordId}`;\n } else if (validationError instanceof SyntaxError) {\n errorMessage = `Invalid JSON in record file: ${recordId}`;\n } else {\n errorMessage = `Failed to read record file: ${validationError instanceof Error ? validationError.message : String(validationError)}`;\n }\n\n results.push({\n level: \"error\",\n filePath,\n validator: \"SCHEMA_VALIDATION\",\n message: errorMessage,\n entity: {\n type: entityType,\n id: recordId\n },\n fixable: false\n });\n return results;\n }\n\n // If record is null, validation failed but no DetailedValidationError was thrown\n if (!record) {\n results.push({\n level: \"error\",\n filePath,\n validator: \"SCHEMA_VALIDATION\",\n message: `Record validation failed: ${recordId}`,\n entity: {\n type: entityType,\n id: recordId\n },\n fixable: false\n });\n return results;\n }\n\n // Record is valid from store's perspective\n // Apply additional validations\n\n if (options.validateConventions) {\n const conventionResults = await this.validateConventions(record, recordId, filePath, entityType);\n results.push(...conventionResults);\n }\n\n if (options.validateReferences && this.indexerAdapter) {\n const refResults = await this.validateReferences(record, recordId, filePath, entityType);\n results.push(...refResults);\n }\n\n if (options.validateActors && this.indexerAdapter) {\n const actorResults = await this.validateActors(record, recordId, filePath, entityType);\n results.push(...actorResults);\n }\n\n } catch (error) {\n // Capture validation errors from recordStore.read()\n if (error instanceof DetailedValidationError) {\n // Filter out redundant oneOf errors when there's an \"additional properties\" error\n // These oneOf errors are side effects of the additional property, not separate issues\n const hasAdditionalProperties = error.errors.some(e =>\n e.message.includes(\"must NOT have additional properties\") ||\n e.message.includes(\"must not have additional properties\")\n );\n\n // If there's an additional properties error, filter out oneOf errors\n const filteredErrors = hasAdditionalProperties\n ? error.errors.filter(e =>\n !e.message.includes(\"oneOf\") &&\n !e.message.includes(\"must match\") &&\n !e.message.includes(\"boolean schema is false\")\n )\n : error.errors;\n\n // Create one LintResult per error (not grouped by validator type)\n // This ensures all errors are visible, avoiding \"surprise\" errors after fixing one\n for (const err of filteredErrors) {\n // Create a temporary error to detect validator type for this specific error\n // Include field path in message for better detection\n const tempError = new DetailedValidationError('Record', [err]);\n tempError.message = `${err.field}: ${err.message}`;\n const validatorType = this.detectValidatorType(tempError);\n const isFixable = this.isFixable(tempError);\n\n results.push({\n level: \"error\",\n filePath,\n validator: validatorType,\n message: `${err.field}: ${err.message}`,\n entity: {\n type: entityType,\n id: recordId\n },\n fixable: isFixable,\n ...(err && {\n context: {\n ...(err.field && { field: err.field }),\n ...(err.value !== undefined && { actual: err.value }),\n ...(err.message && { expected: err.message })\n }\n })\n });\n }\n } else {\n // File system errors, parse errors, etc.\n results.push({\n level: \"error\",\n filePath,\n validator: \"SCHEMA_VALIDATION\",\n message: error instanceof Error ? error.message : String(error),\n entity: {\n type: entityType,\n id: recordId\n },\n fixable: false\n });\n }\n }\n\n return results;\n }\n\n /**\n * Valida un archivo especĆ­fico.\n * \n * Útil para validación en vivo (ej: dashboard, IDE integration).\n * \n * @param filePath - Path del archivo a validar\n * @param options - Opciones de configuración\n * @returns {Promise<LintResult[]>} Resultados de validación para este archivo\n * \n * @example\n * ```typescript\n * const results = await lintModule.lintFile(\n * '.gitgov/tasks/task-123.json',\n * { validateReferences: true }\n * );\n * ```\n */\n /**\n * Applies automatic repairs to problems marked as fixable.\n * \n * @param lintReport - Lint report with detected problems\n * @param fixOptions - Options for the fix operation\n * @returns {Promise<FixReport>} Report of applied repairs\n * \n * @example\n * ```typescript\n * const lintReport = await lintModule.lint();\n * const fixReport = await lintModule.fix(lintReport, {\n * createBackups: true,\n * keyId: 'system:migrator'\n * });\n * \n * console.log(`Fixed: ${fixReport.summary.fixed}`);\n * ```\n */\n async fix(\n lintReport: LintReport,\n fixOptions?: Partial<FixOptions>\n ): Promise<FixReport> {\n const opts: FixOptions = {\n ...(fixOptions?.fixTypes && { fixTypes: fixOptions.fixTypes }),\n createBackups: fixOptions?.createBackups ?? true,\n keyId: fixOptions?.keyId ?? \"system:migrator\",\n dryRun: fixOptions?.dryRun ?? false,\n ...(fixOptions?.privateKey && { privateKey: fixOptions.privateKey })\n };\n\n const fixes: FixResult[] = [];\n\n // Filter fixable problems\n let fixableResults = lintReport.results.filter(r => r.fixable);\n\n // Filter by fix types if specified\n if (opts.fixTypes && opts.fixTypes.length > 0) {\n fixableResults = fixableResults.filter(r =>\n opts.fixTypes!.includes(r.validator)\n );\n }\n\n logger.info(`Starting fix operation for ${fixableResults.length} fixable problems`);\n\n // Group results by filePath and validator to avoid fixing the same file multiple times\n const resultsByFile = new Map<string, Map<ValidatorType, LintResult[]>>();\n for (const result of fixableResults) {\n if (!resultsByFile.has(result.filePath)) {\n resultsByFile.set(result.filePath, new Map());\n }\n const fileResults = resultsByFile.get(result.filePath)!;\n if (!fileResults.has(result.validator)) {\n fileResults.set(result.validator, []);\n }\n fileResults.get(result.validator)!.push(result);\n }\n\n // Process each file once, passing all errors for that file/validator combination\n for (const [, validatorMap] of resultsByFile) {\n for (const [, results] of validatorMap) {\n // Use the first result for file path and entity info, but pass all results for context\n const primaryResult = results[0]!;\n\n // Declare backupPath outside try block so it's available in catch\n let backupPath: string | undefined;\n\n try {\n if (opts.dryRun) {\n // Dry run: report what would be done\n fixes.push({\n filePath: primaryResult.filePath,\n validator: primaryResult.validator,\n action: `Would fix ${primaryResult.validator} (${results.length} error${results.length === 1 ? '' : 's'})`,\n success: true\n });\n continue;\n }\n\n // Create backup if requested (only once per file)\n if (opts.createBackups && !backupPath) {\n backupPath = await this.createBackup(primaryResult.filePath);\n }\n\n // Apply fix based on validator type, passing all errors for context\n await this.applyFix(primaryResult, opts, results);\n\n fixes.push({\n filePath: primaryResult.filePath,\n validator: primaryResult.validator,\n action: `Fixed ${primaryResult.validator} (${results.length} error${results.length === 1 ? '' : 's'})`,\n success: true,\n ...(backupPath && { backupPath })\n });\n\n logger.debug(`Successfully fixed ${primaryResult.filePath} (${primaryResult.validator}, ${results.length} errors)`);\n\n } catch (error) {\n // Restore backup on failure\n if (opts.createBackups && backupPath) {\n try {\n await this.restoreBackup(primaryResult.filePath);\n logger.warn(`Restored backup for ${primaryResult.filePath} after fix failure`);\n } catch (restoreError) {\n logger.error(`Failed to restore backup for ${primaryResult.filePath}:`, restoreError);\n }\n }\n\n fixes.push({\n filePath: primaryResult.filePath,\n validator: primaryResult.validator,\n action: `Failed to fix ${primaryResult.validator}`,\n success: false,\n error: error instanceof Error ? error.message : String(error),\n ...(backupPath && { backupPath }) // Include backup path even if fix failed\n });\n\n logger.error(`Failed to fix ${primaryResult.filePath}:`, error);\n }\n }\n }\n\n const summary = {\n fixed: fixes.filter(f => f.success).length,\n failed: fixes.filter(f => !f.success).length,\n backupsCreated: opts.createBackups ? fixes.filter(f => f.backupPath).length : 0\n };\n\n logger.info(\n `Fix operation completed: ${summary.fixed} fixed, ${summary.failed} failed, ${summary.backupsCreated} backups created`\n );\n\n return {\n summary,\n fixes\n };\n }\n\n // ==================== Helper Methods ====================\n\n /**\n * Splits an array into chunks of the specified size.\n * @private\n */\n private chunkArray<T>(array: T[], chunkSize: number): T[][] {\n const chunks: T[][] = [];\n for (let i = 0; i < array.length; i += chunkSize) {\n chunks.push(array.slice(i, i + chunkSize));\n }\n return chunks;\n }\n\n\n /**\n * Discovers all records with their types by scanning the filesystem.\n * This ensures we know the correct type for each record based on its directory.\n * @private\n */\n private async discoverAllRecordsWithTypes(path?: string): Promise<Array<{ id: string; type: Exclude<GitGovRecordType, 'custom'> }>> {\n const projectRoot = ConfigManager.findProjectRoot() || path || '.gitgov/';\n // Use GitGovRecordType to get all record types (excluding 'custom' which is for testing)\n const recordTypes: Array<Exclude<GitGovRecordType, 'custom'>> = [\n 'actor', 'agent', 'cycle', 'task', 'execution', 'changelog', 'feedback'\n ];\n const allRecords: Array<{ id: string; type: Exclude<GitGovRecordType, 'custom'> }> = [];\n\n for (const recordType of recordTypes) {\n // Convert record type to directory name (pluralize: task -> tasks, cycle -> cycles, etc.)\n // Note: feedback and changelog have special pluralization rules\n const dirNameMap: Record<Exclude<GitGovRecordType, 'custom'>, string> = {\n 'task': 'tasks',\n 'cycle': 'cycles',\n 'execution': 'executions',\n 'changelog': 'changelogs',\n 'feedback': 'feedback', // feedback directory is singular, not plural\n 'actor': 'actors',\n 'agent': 'agents'\n };\n const dirName = dirNameMap[recordType];\n const dirPath = join(projectRoot, '.gitgov', dirName);\n try {\n const files = await readdir(dirPath);\n const jsonFiles = files.filter(f => f.endsWith('.json'));\n // Extract record IDs from filenames (remove .json extension)\n // We know the type from the directory, so store it with the ID\n const records = jsonFiles.map(f => ({\n id: f.replace('.json', ''),\n type: recordType\n }));\n allRecords.push(...records);\n } catch (error) {\n // Directory doesn't exist or can't be read, skip it\n continue;\n }\n }\n\n return allRecords;\n }\n\n /**\n * Gets the file path for a given recordId.\n * Matches the format used by RecordStore.getRecordPath()\n * @private\n */\n private getFilePath(recordId: string, entityTypeOverride?: Exclude<GitGovRecordType, 'custom'>): string {\n const type = entityTypeOverride || this.getEntityType(recordId);\n const projectRoot = ConfigManager.findProjectRoot();\n\n // Use the same directory name mapping as discoverAllRecordsWithTypes\n const dirNameMap: Record<Exclude<GitGovRecordType, 'custom'>, string> = {\n 'task': 'tasks',\n 'cycle': 'cycles',\n 'execution': 'executions',\n 'changelog': 'changelogs',\n 'feedback': 'feedback', // feedback directory is singular, not plural\n 'actor': 'actors',\n 'agent': 'agents'\n };\n const dirName = dirNameMap[type];\n\n if (!projectRoot) {\n // Fallback to relative path if no project root found\n const safeId = recordId.replace(/:/g, '_');\n return join(\".gitgov\", dirName, `${safeId}.json`);\n }\n const safeId = recordId.replace(/:/g, '_');\n return join(projectRoot, \".gitgov\", dirName, `${safeId}.json`);\n }\n\n /**\n * Extracts the recordId from a filePath.\n * @private\n */\n private extractRecordId(filePath: string): string {\n return basename(filePath, \".json\");\n }\n\n /**\n * Detects the entity type from a recordId.\n * @private\n */\n private getEntityType(recordId: string): Exclude<GitGovRecordType, 'custom'> {\n // Use GitGovRecordType for type safety\n // Check in order of specificity (longer/more specific patterns first to avoid false matches)\n // Pattern: {timestamp}-{type}-{slug} or {type}:{id} or {prefix}_{id}\n if (recordId.match(/^\\d+-exec-/)) return \"execution\";\n if (recordId.match(/^\\d+-changelog-/)) return \"changelog\";\n if (recordId.match(/^\\d+-feedback-/)) return \"feedback\";\n if (recordId.match(/^\\d+-cycle-/)) return \"cycle\";\n if (recordId.match(/^\\d+-task-/)) return \"task\";\n if (recordId.startsWith(\"execution:\") || recordId.includes(\"-execution-\")) return \"execution\";\n if (recordId.startsWith(\"changelog:\") || recordId.includes(\"-changelog-\")) return \"changelog\";\n if (recordId.startsWith(\"feedback:\") || recordId.includes(\"-feedback-\")) return \"feedback\";\n if (recordId.startsWith(\"task:\") || recordId.includes(\"-task-\")) return \"task\";\n if (recordId.startsWith(\"cycle:\") || recordId.includes(\"-cycle-\")) return \"cycle\";\n // Check for actor/agent patterns: human:*, agent:*, human_*, agent_*\n if (recordId.startsWith(\"actor:\") || recordId.startsWith(\"human:\") || recordId.startsWith(\"agent:\")) return \"actor\";\n if (recordId.startsWith(\"human_\") || recordId.match(/^human-/)) return \"actor\";\n if (recordId.startsWith(\"agent_\") || recordId.match(/^agent-/)) return \"agent\";\n if (recordId.startsWith(\"agent:\")) return \"agent\";\n return \"task\"; // Default fallback\n }\n\n /**\n * Detects the validator type based on the error.\n * @private\n */\n private detectValidatorType(error: DetailedValidationError): ValidatorType {\n // Check both the error message and the field path from errors array\n const errorMessage = error.message.toLowerCase();\n const fieldPath = error.errors?.[0]?.field?.toLowerCase() || '';\n const allErrorMessages = error.errors?.map(e => e.message?.toLowerCase() || '').join(' ') || '';\n\n // Combine message and field path for detection\n const combinedText = `${errorMessage} ${fieldPath} ${allErrorMessages}`;\n\n if (combinedText.includes(\"checksum\") || fieldPath.includes(\"payloadchecksum\")) {\n return \"CHECKSUM_VERIFICATION\";\n }\n // Check for signature errors (including path patterns like /header/signatures/0/signature)\n if (combinedText.includes(\"signature\") || fieldPath.includes(\"/signatures/\") || fieldPath.includes(\"signatures\")) {\n return \"SIGNATURE_STRUCTURE\";\n }\n if (combinedText.includes(\"header\") || combinedText.includes(\"payload\") || fieldPath.includes(\"/header/\")) {\n return \"EMBEDDED_METADATA_STRUCTURE\";\n }\n\n // Check for schema version mismatch indicators\n // These patterns suggest the record structure doesn't match the current schema version:\n // - \"required in v2\", \"field required in v2\", \"v2\", \"version\", \"deprecated\", \"obsolete\"\n // - Missing new required fields that were added in a newer schema version\n // - Presence of deprecated fields\n const versionMismatchIndicators = [\n 'required in v',\n 'field required in v',\n 'deprecated',\n 'obsolete',\n 'schema version',\n 'migration',\n 'v1 to v2',\n 'v2 to v3'\n ];\n\n const hasVersionMismatchIndicator = versionMismatchIndicators.some(indicator =>\n combinedText.includes(indicator)\n );\n\n // Also check if error message suggests a new required field (schema evolution)\n // Pattern: \"Field required in v2\" or similar version-specific messages\n const hasVersionSpecificMessage = /v\\d+|version\\s+\\d+/i.test(combinedText);\n\n if (hasVersionMismatchIndicator || hasVersionSpecificMessage) {\n return \"SCHEMA_VERSION_MISMATCH\";\n }\n\n return \"SCHEMA_VALIDATION\";\n }\n\n /**\n * Determines if an error is fixable.\n * @private\n */\n private isFixable(error: DetailedValidationError): boolean {\n const errorMessage = error.message.toLowerCase();\n\n // Legacy records without embedded metadata are fixable\n if (errorMessage.includes(\"header\") || errorMessage.includes(\"metadata\")) {\n return true;\n }\n\n // Additional properties in payload are fixable (can be removed)\n if (errorMessage.includes(\"must not have additional properties\") || errorMessage.includes(\"must NOT have additional properties\")) {\n return true;\n }\n\n // Invalid checksums are fixable\n if (errorMessage.includes(\"checksum\")) {\n return true;\n }\n\n // Signatures with incorrect format are fixable\n if (errorMessage.includes(\"signature\") && errorMessage.includes(\"format\")) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Validates conventions (file naming, timestamps, etc).\n * Implements EARS-13 through EARS-16.\n * @private\n */\n private async validateConventions(\n record: GitGovRecord,\n recordId: string,\n filePath: string,\n entityType: Exclude<GitGovRecordType, 'custom'>\n ): Promise<LintResult[]> {\n const results: LintResult[] = [];\n\n // EARS-13: Validate file is in correct directory\n // Use the same directory name mapping as discoverAllRecordsWithTypes and getFilePath\n const dirNameMap: Record<Exclude<GitGovRecordType, 'custom'>, string> = {\n 'task': 'tasks',\n 'cycle': 'cycles',\n 'execution': 'executions',\n 'changelog': 'changelogs',\n 'feedback': 'feedback', // feedback directory is singular, not plural\n 'actor': 'actors',\n 'agent': 'agents'\n };\n const expectedDir = `.gitgov/${dirNameMap[entityType]}`;\n if (!filePath.includes(expectedDir)) {\n results.push({\n level: \"error\",\n filePath,\n validator: \"FILE_NAMING_CONVENTION\",\n message: `File should be in ${expectedDir}/ directory but found in ${filePath}`,\n entity: {\n type: entityType,\n id: recordId\n },\n fixable: false,\n context: {\n field: \"directory\",\n actual: dirname(filePath),\n expected: expectedDir\n }\n });\n }\n\n // EARS-14: Validate filename matches entity ID\n const expectedFilename = `${recordId}.json`;\n const actualFilename = basename(filePath);\n if (actualFilename !== expectedFilename) {\n results.push({\n level: \"error\",\n filePath,\n validator: \"FILE_NAMING_CONVENTION\",\n message: `Filename '${actualFilename}' does not match entity ID '${recordId}'`,\n entity: {\n type: entityType,\n id: recordId\n },\n fixable: false,\n context: {\n field: \"filename\",\n actual: actualFilename,\n expected: expectedFilename\n }\n });\n }\n\n // EARS-15 & EARS-16: Validate timestamp ordering\n // Note: These fields are not in the schema but may exist in legacy records\n const payload = record.payload as GitGovRecordPayload & {\n createdAt?: number | string;\n updatedAt?: number | string;\n completedAt?: number | string;\n discardedAt?: number | string;\n };\n if (payload.createdAt && payload.updatedAt) {\n const created = new Date(payload.createdAt).getTime();\n const updated = new Date(payload.updatedAt).getTime();\n\n if (created > updated) {\n results.push({\n level: \"error\",\n filePath,\n validator: \"TEMPORAL_CONSISTENCY\",\n message: `createdAt (${String(payload.createdAt)}) is after updatedAt (${String(payload.updatedAt)})`,\n entity: {\n type: entityType,\n id: recordId\n },\n fixable: false,\n context: {\n field: \"timestamps\",\n actual: { createdAt: payload.createdAt, updatedAt: payload.updatedAt },\n expected: \"createdAt <= updatedAt\"\n }\n });\n }\n\n // Check completedAt if present\n if (payload.completedAt) {\n const completed = new Date(payload.completedAt).getTime();\n if (completed < created) {\n results.push({\n level: \"error\",\n filePath,\n validator: \"TEMPORAL_CONSISTENCY\",\n message: `completedAt (${String(payload.completedAt)}) is before createdAt (${String(payload.createdAt)})`,\n entity: {\n type: entityType,\n id: recordId\n },\n fixable: false\n });\n }\n }\n\n // Check discardedAt if present\n if (payload.discardedAt) {\n const discarded = new Date(payload.discardedAt).getTime();\n if (discarded < created) {\n results.push({\n level: \"error\",\n filePath,\n validator: \"TEMPORAL_CONSISTENCY\",\n message: `discardedAt (${String(payload.discardedAt)}) is before createdAt (${String(payload.createdAt)})`,\n entity: {\n type: entityType,\n id: recordId\n },\n fixable: false\n });\n }\n }\n }\n\n return results;\n }\n\n /**\n * Validates references (typed references, bidirectional consistency).\n * Implements EARS-17 through EARS-22.\n * Requires indexerAdapter to be present.\n * @private\n */\n private async validateReferences(\n record: GitGovRecord,\n recordId: string,\n filePath: string,\n entityType: Exclude<GitGovRecordType, 'custom'>\n ): Promise<LintResult[]> {\n const results: LintResult[] = [];\n // Use actual types from schemas - TaskRecord and ExecutionRecord have references, CycleRecord has taskIds\n const payload = record.payload;\n\n // EARS-17: Validate ExecutionRecord.taskId exists\n if (entityType === \"execution\" && isExecutionRecord(payload) && payload.taskId) {\n try {\n const taskRecord = await this.recordStore.read(payload.taskId);\n if (!taskRecord) {\n results.push({\n level: \"warning\",\n filePath,\n validator: \"REFERENTIAL_INTEGRITY\",\n message: `Referenced taskId '${payload.taskId}' not found`,\n entity: {\n type: entityType,\n id: recordId\n },\n fixable: false,\n context: {\n field: \"taskId\",\n actual: payload.taskId,\n expected: \"existing task record\"\n }\n });\n } else {\n // EARS-22: Check for soft delete\n // TaskRecord has status in its schema\n const taskPayload = taskRecord.payload as TaskRecord;\n if (taskPayload.status === \"discarded\") {\n results.push({\n level: \"warning\",\n filePath,\n validator: \"SOFT_DELETE_DETECTION\",\n message: `Referenced task '${payload.taskId}' has status 'discarded'`,\n entity: {\n type: entityType,\n id: recordId\n },\n fixable: false\n });\n }\n }\n } catch (error) {\n results.push({\n level: \"warning\",\n filePath,\n validator: \"REFERENTIAL_INTEGRITY\",\n message: `Failed to validate taskId reference: ${error instanceof Error ? error.message : String(error)}`,\n entity: {\n type: entityType,\n id: recordId\n },\n fixable: false\n });\n }\n }\n\n // EARS-18: Validate typed references by prefix\n // Only TaskRecord and ExecutionRecord have references in their schema\n if (isTaskRecord(payload) || isExecutionRecord(payload)) {\n const payloadWithRefs = payload as TaskRecord | ExecutionRecord;\n if (payloadWithRefs.references && Array.isArray(payloadWithRefs.references)) {\n for (const ref of payloadWithRefs.references) {\n const refStr = String(ref);\n\n // Validate format: prefix:value\n if (!refStr.includes(\":\")) {\n results.push({\n level: \"warning\",\n filePath,\n validator: \"TYPED_REFERENCE\",\n message: `Reference '${refStr}' missing type prefix (expected: task:, cycle:, file:, etc.)`,\n entity: {\n type: entityType,\n id: recordId\n },\n fixable: false,\n context: {\n field: \"references\",\n actual: refStr,\n expected: \"prefix:value format\"\n }\n });\n continue;\n }\n\n const parts = refStr.split(\":\", 2);\n if (parts.length < 2) continue; // Already handled above\n\n const [prefix, value] = parts;\n if (!prefix || !value) continue;\n\n // Validate known prefixes\n const knownPrefixes = [\"task\", \"cycle\", \"execution\", \"changelog\", \"feedback\", \"actor\", \"agent\", \"file\", \"url\", \"commit\", \"pr\", \"adapter\"];\n if (!knownPrefixes.includes(prefix)) {\n results.push({\n level: \"warning\",\n filePath,\n validator: \"TYPED_REFERENCE\",\n message: `Unknown reference prefix '${prefix}' (known: ${knownPrefixes.join(\", \")})`,\n entity: {\n type: entityType,\n id: recordId\n },\n fixable: false,\n context: {\n field: \"references\",\n actual: prefix,\n expected: knownPrefixes.join(\", \")\n }\n });\n }\n\n // EARS-20: Validate task/cycle/execution references exist\n if ([\"task\", \"cycle\", \"execution\", \"changelog\", \"feedback\"].includes(prefix)) {\n try {\n const referencedRecord = await this.recordStore.read(value);\n if (!referencedRecord) {\n results.push({\n level: \"warning\",\n filePath,\n validator: \"REFERENTIAL_INTEGRITY\",\n message: `Referenced ${prefix} '${value}' not found`,\n entity: {\n type: entityType,\n id: recordId\n },\n fixable: false,\n context: {\n field: \"references\",\n actual: refStr,\n expected: `existing ${prefix} record`\n }\n });\n } else {\n // EARS-22: Check for soft delete\n // Most records have status in their schema\n const refPayload = referencedRecord.payload;\n if ('status' in refPayload && refPayload.status === \"discarded\") {\n results.push({\n level: \"warning\",\n filePath,\n validator: \"SOFT_DELETE_DETECTION\",\n message: `Referenced ${prefix} '${value}' has status 'discarded'`,\n entity: {\n type: entityType,\n id: recordId\n },\n fixable: false\n });\n }\n }\n } catch (error) {\n // Silently continue if reference doesn't exist (already reported)\n }\n }\n }\n }\n }\n\n // EARS-21: Validate bidirectional consistency (Task ↔ Cycle)\n // TaskRecord has cycleIds[] and CycleRecord has taskIds[]\n if (entityType === \"task\" && isTaskRecord(payload) && payload.cycleIds && Array.isArray(payload.cycleIds)) {\n for (const cycleId of payload.cycleIds) {\n try {\n const cycleRecord = await this.recordStore.read(cycleId);\n if (cycleRecord) {\n // CycleRecord has taskIds in its schema\n const cyclePayload = cycleRecord.payload as CycleRecord;\n if (cyclePayload.taskIds && Array.isArray(cyclePayload.taskIds)) {\n if (!cyclePayload.taskIds.includes(recordId)) {\n results.push({\n level: \"warning\",\n filePath,\n validator: \"BIDIRECTIONAL_CONSISTENCY\",\n message: `Task references cycle '${cycleId}' in cycleIds but cycle doesn't include this task in taskIds[]`,\n entity: {\n type: entityType,\n id: recordId\n },\n fixable: true,\n context: {\n field: \"cycleIds\",\n actual: cycleId,\n expected: `cycle should include task ${recordId} in taskIds[]`\n }\n });\n }\n }\n }\n } catch (error) {\n // Already reported as REFERENTIAL_INTEGRITY above\n }\n }\n }\n\n if (entityType === \"cycle\" && isCycleRecord(payload) && payload.taskIds && Array.isArray(payload.taskIds)) {\n for (const taskId of payload.taskIds) {\n try {\n const taskRecord = await this.recordStore.read(taskId);\n if (taskRecord) {\n // TaskRecord has cycleIds in its schema\n const taskPayload = taskRecord.payload as TaskRecord;\n if (!taskPayload.cycleIds || !taskPayload.cycleIds.includes(recordId)) {\n results.push({\n level: \"warning\",\n filePath,\n validator: \"BIDIRECTIONAL_CONSISTENCY\",\n message: `Cycle includes task '${taskId}' in taskIds[] but task doesn't include this cycle in cycleIds[]`,\n entity: {\n type: entityType,\n id: recordId\n },\n fixable: true,\n context: {\n field: \"taskIds\",\n actual: taskPayload.cycleIds || [],\n expected: `task should include cycle ${recordId} in cycleIds[]`\n }\n });\n }\n }\n } catch (error) {\n // Already reported as REFERENTIAL_INTEGRITY\n }\n }\n }\n\n return results;\n }\n\n /**\n * Validates actorIds (resolution in .gitgov/actors/).\n * Implements EARS-19.\n * @private\n */\n private async validateActors(\n record: GitGovRecord,\n recordId: string,\n filePath: string,\n entityType: Exclude<GitGovRecordType, 'custom'>\n ): Promise<LintResult[]> {\n const results: LintResult[] = [];\n\n // Extract all actorIds from signatures\n if (record.header && record.header.signatures && Array.isArray(record.header.signatures)) {\n for (const signature of record.header.signatures) {\n if (signature.keyId) {\n try {\n const actorRecord = await this.recordStore.read(signature.keyId);\n if (!actorRecord) {\n results.push({\n level: \"warning\",\n filePath,\n validator: \"ACTOR_RESOLUTION\",\n message: `Actor '${signature.keyId}' referenced in signature not found in .gitgov/actors/`,\n entity: {\n type: entityType,\n id: recordId\n },\n fixable: false,\n context: {\n field: \"signatures.keyId\",\n actual: signature.keyId,\n expected: \"existing actor record\"\n }\n });\n }\n } catch (error) {\n results.push({\n level: \"warning\",\n filePath,\n validator: \"ACTOR_RESOLUTION\",\n message: `Failed to validate actor '${signature.keyId}': ${error instanceof Error ? error.message : String(error)}`,\n entity: {\n type: entityType,\n id: recordId\n },\n fixable: false\n });\n }\n }\n }\n }\n\n // Check actorId field in payload (for some record types)\n // Note: Most records don't have actorId in their schema, but it may exist in legacy records\n const payload = record.payload;\n if ('actorId' in payload && payload.actorId) {\n const actorId = (payload as { actorId?: string }).actorId;\n if (actorId) {\n try {\n const actorRecord = await this.recordStore.read(actorId);\n if (!actorRecord) {\n results.push({\n level: \"warning\",\n filePath,\n validator: \"ACTOR_RESOLUTION\",\n message: `Actor '${actorId}' referenced in payload not found`,\n entity: {\n type: entityType,\n id: recordId\n },\n fixable: false,\n context: {\n field: \"actorId\",\n actual: actorId,\n expected: \"existing actor record\"\n }\n });\n }\n } catch (error) {\n // Silently continue\n }\n }\n }\n\n return results;\n }\n\n /**\n * Applies a specific repair based on the problem type.\n * @private\n */\n private async applyFix(result: LintResult, options: FixOptions, allErrors?: LintResult[]): Promise<void> {\n switch (result.validator) {\n case \"EMBEDDED_METADATA_STRUCTURE\":\n await this.fixLegacyRecord(result, options, allErrors);\n break;\n\n case \"BIDIRECTIONAL_CONSISTENCY\":\n await this.fixBidirectionalReference(result);\n break;\n\n case \"CHECKSUM_VERIFICATION\":\n await this.recalculateChecksum(result);\n break;\n\n case \"SIGNATURE_STRUCTURE\":\n await this.fixSignatureStructure(result, options, allErrors || [result]);\n break;\n\n default:\n throw new Error(`Fix not implemented for validator: ${result.validator}`);\n }\n }\n\n /**\n * Repairs a legacy record by wrapping it in embedded metadata.\n * Implements EARS-24: Normalize legacy records with signature.\n * @private\n */\n private async fixLegacyRecord(result: LintResult, options: FixOptions, allErrors?: LintResult[]): Promise<void> {\n if (!options.privateKey) {\n throw new Error(\"privateKey is required in FixOptions to sign legacy records\");\n }\n\n // Read the raw file\n // All records MUST have EmbeddedMetadataRecord structure (header + payload)\n const fileContent = await this.fileSystem.readFile(result.filePath, \"utf-8\");\n const rawData = JSON.parse(fileContent) as unknown;\n\n // Validate that it has the required EmbeddedMetadataRecord structure\n if (typeof rawData !== 'object' || rawData === null || !('header' in rawData) || !('payload' in rawData)) {\n throw new Error(`Record does not have EmbeddedMetadataRecord structure (missing header or payload): ${result.filePath}`);\n }\n\n const rawObj = rawData as Record<string, unknown>;\n if (!rawObj['header'] || !rawObj['payload']) {\n throw new Error(`Record does not have EmbeddedMetadataRecord structure (missing header or payload): ${result.filePath}`);\n }\n\n const embeddedRecord = rawData as GitGovRecord;\n\n // Check if there are errors about additional properties in payload\n const hasAdditionalProperties = allErrors?.some(e =>\n e.message.includes(\"must NOT have additional properties\") &&\n e.message.includes(\"/payload\")\n );\n\n if (hasAdditionalProperties) {\n // Remove additional properties from payload by loading it through the factory\n // which will validate and return only valid properties\n const entityType = this.getEntityType(result.entity.id);\n let cleanPayload: GitGovRecordPayload;\n\n try {\n // Try to load the payload through the appropriate factory\n // This will fail if there are additional properties, but we can catch and clean manually\n switch (entityType) {\n case 'task':\n // Extract only valid properties from task schema\n const taskPayload = embeddedRecord.payload as Partial<TaskRecord>;\n cleanPayload = {\n id: taskPayload.id!,\n title: taskPayload.title!,\n status: taskPayload.status!,\n priority: taskPayload.priority!,\n description: taskPayload.description!,\n ...(taskPayload.cycleIds && { cycleIds: taskPayload.cycleIds }),\n ...(taskPayload.tags && { tags: taskPayload.tags }),\n ...(taskPayload.references && { references: taskPayload.references }),\n ...(taskPayload.notes && { notes: taskPayload.notes })\n } as TaskRecord;\n break;\n case 'cycle':\n const cyclePayload = embeddedRecord.payload as Partial<CycleRecord>;\n cleanPayload = {\n id: cyclePayload.id!,\n title: cyclePayload.title!,\n status: cyclePayload.status!,\n ...(cyclePayload.taskIds && { taskIds: cyclePayload.taskIds }),\n ...(cyclePayload.childCycleIds && { childCycleIds: cyclePayload.childCycleIds }),\n ...(cyclePayload.tags && { tags: cyclePayload.tags }),\n ...(cyclePayload.notes && { notes: cyclePayload.notes })\n } as CycleRecord;\n break;\n default:\n // For other types, just recalculate checksum (can't safely remove properties without schema)\n await this.recalculateChecksum(result);\n return;\n }\n\n // Recalculate checksum with cleaned payload\n const payloadChecksum = calculatePayloadChecksum(cleanPayload);\n\n // Regenerate signature\n const signature = signPayload(\n cleanPayload,\n options.privateKey,\n options.keyId || result.entity.id,\n 'author',\n 'Signature regenerated after removing additional properties'\n );\n\n // Update record\n const fixedRecord: GitGovRecord = {\n header: {\n ...embeddedRecord.header,\n payloadChecksum,\n signatures: [signature]\n },\n payload: cleanPayload\n };\n\n await this.fileSystem.writeFile(\n result.filePath,\n JSON.stringify(fixedRecord, null, 2)\n );\n\n logger.info(`Removed additional properties from payload: ${result.filePath}`);\n return;\n } catch (error) {\n // If cleaning fails, fall back to recalculating checksum\n logger.warn(`Could not clean additional properties, recalculating checksum only: ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n\n // If no additional properties or cleaning failed, just recalculate checksum\n await this.recalculateChecksum(result);\n }\n\n /**\n * Repairs bidirectional inconsistencies between Task and Cycle.\n * Implements EARS-25: Sync bidirectional references.\n * @private\n */\n private async fixBidirectionalReference(result: LintResult): Promise<void> {\n const entityType = result.entity.type;\n const recordId = result.entity.id;\n\n if (entityType === \"task\") {\n // Task references cycles in cycleIds[] that don't include it in their taskIds[]\n const taskRecord = await this.recordStore.read(recordId);\n if (!taskRecord) return;\n\n const taskPayload = taskRecord.payload as TaskRecord;\n if (!taskPayload.cycleIds || taskPayload.cycleIds.length === 0) return;\n\n // For each cycleId in the task, ensure the cycle includes this task\n for (const cycleId of taskPayload.cycleIds) {\n const cycleRecord = await this.recordStore.read(cycleId);\n if (!cycleRecord) continue;\n\n const mutableCyclePayload = cycleRecord.payload as CycleRecord;\n if (!mutableCyclePayload.taskIds) {\n mutableCyclePayload.taskIds = [];\n }\n\n if (!mutableCyclePayload.taskIds.includes(recordId)) {\n mutableCyclePayload.taskIds.push(recordId);\n\n // Write updated cycle\n const cycleFilePath = this.getFilePath(cycleId);\n await this.fileSystem.writeFile(\n cycleFilePath,\n JSON.stringify(cycleRecord, null, 2)\n );\n\n logger.info(`Fixed bidirectional reference: Added task ${recordId} to cycle ${cycleId}`);\n }\n }\n } else if (entityType === \"cycle\") {\n // Cycle includes tasks in taskIds[] that don't include it in their cycleIds[]\n const cycleRecord = await this.recordStore.read(recordId);\n if (!cycleRecord) return;\n\n const cyclePayload = cycleRecord.payload as CycleRecord;\n if (!cyclePayload.taskIds || cyclePayload.taskIds.length === 0) return;\n\n // Extract taskId from context if available, otherwise fix all tasks\n const taskIdFromContext = result.context?.actual as string | undefined;\n const tasksToFix = taskIdFromContext ? [taskIdFromContext] : cyclePayload.taskIds;\n\n for (const taskId of tasksToFix) {\n const taskRecord = await this.recordStore.read(taskId);\n if (!taskRecord) continue;\n\n const taskPayload = taskRecord.payload as TaskRecord;\n if (!taskPayload.cycleIds) {\n taskPayload.cycleIds = [];\n }\n\n if (!taskPayload.cycleIds.includes(recordId)) {\n taskPayload.cycleIds.push(recordId);\n\n // Write updated task\n const taskFilePath = this.getFilePath(taskId);\n await this.fileSystem.writeFile(\n taskFilePath,\n JSON.stringify(taskRecord, null, 2)\n );\n\n logger.info(`Fixed bidirectional reference: Added cycle ${recordId} to task ${taskId} in cycleIds[]`);\n }\n }\n }\n }\n\n /**\n * Recalculates the checksum of a record.\n * Implements checksum repair for corrupted checksums.\n * @private\n */\n private async recalculateChecksum(result: LintResult): Promise<void> {\n const fileContent = await this.fileSystem.readFile(result.filePath, \"utf-8\");\n const record = JSON.parse(fileContent) as GitGovRecord;\n\n if (!record.header || !record.payload) {\n throw new Error(\"Cannot recalculate checksum: invalid record structure\");\n }\n\n // Recalculate checksum\n const correctChecksum = calculatePayloadChecksum(record.payload);\n record.header.payloadChecksum = correctChecksum;\n\n // Write updated record\n await this.fileSystem.writeFile(\n result.filePath,\n JSON.stringify(record, null, 2)\n );\n\n logger.info(`Recalculated checksum for: ${result.filePath}`);\n }\n\n /**\n * Creates a backup of a file.\n * @private\n */\n private async createBackup(filePath: string): Promise<string> {\n const timestamp = Date.now();\n const backupPath = `${filePath}.backup-${timestamp}`;\n\n const content = await this.fileSystem.readFile(filePath, \"utf-8\");\n await this.fileSystem.writeFile(backupPath, content);\n\n // Store backup path for later restoration\n this.lastBackupPath = backupPath;\n\n return backupPath;\n }\n\n /**\n * Fixes signature structure errors by analyzing specific errors and applying targeted fixes.\n * Reads the record directly (bypassing validation), extracts payload, and fixes signature issues:\n * - Adds missing 'notes' field with a valid value\n * - Removes additional properties not allowed\n * - Regenerates invalid signatures\n * Works even when signatures have invalid format (e.g., \"placeholder\" instead of base64).\n * @private\n */\n private async fixSignatureStructure(result: LintResult, options: FixOptions, allErrors: LintResult[]): Promise<void> {\n if (!options.privateKey) {\n throw new Error('Private key required to fix signature structure errors');\n }\n\n // Read the record file directly (bypassing validation - signatures may be invalid)\n // All records MUST have EmbeddedMetadataRecord structure (header + payload)\n const content = await this.fileSystem.readFile(result.filePath, 'utf-8');\n let raw: unknown;\n try {\n raw = JSON.parse(content);\n } catch (parseError) {\n throw new Error(`Invalid JSON in file: ${result.filePath}`);\n }\n\n // Validate that it has the required EmbeddedMetadataRecord structure\n if (typeof raw !== 'object' || raw === null || !('header' in raw) || !('payload' in raw)) {\n throw new Error(`Record does not have EmbeddedMetadataRecord structure (missing header or payload): ${result.filePath}`);\n }\n\n const rawObj = raw as Record<string, unknown>;\n if (!rawObj['header'] || !rawObj['payload']) {\n throw new Error(`Record does not have EmbeddedMetadataRecord structure (missing header or payload): ${result.filePath}`);\n }\n\n const embeddedRecord = raw as GitGovRecord;\n const payload = embeddedRecord.payload;\n const existingHeader = embeddedRecord.header;\n\n // Recalculate checksum\n const payloadChecksum = calculatePayloadChecksum(payload);\n\n // Analyze all errors to determine what needs to be fixed\n const needsNotes = allErrors.some(e => e.message.includes(\"must have required property 'notes'\"));\n const hasAdditionalProperties = allErrors.some(e => e.message.includes(\"must NOT have additional properties\"));\n const hasInvalidSignature = allErrors.some(e => e.message.includes(\"signature: must match pattern\"));\n\n // Determine keyId and role - try to use existing signature values, or fallback to options/entity id\n let keyId = options.keyId || result.entity.id;\n let role = 'author';\n let notes = 'Signature regenerated by lint --fix';\n\n if (existingHeader?.signatures?.[0]) {\n const existingSig = existingHeader.signatures[0];\n // Prefer keyId from existing signature if available\n if (existingSig.keyId) {\n keyId = existingSig.keyId;\n }\n // Preserve role if it exists and is valid\n if (existingSig.role) {\n role = existingSig.role;\n }\n // Preserve notes if they exist and are valid, otherwise use default\n if (existingSig.notes && typeof existingSig.notes === 'string' && existingSig.notes.length > 0) {\n notes = existingSig.notes;\n }\n }\n\n // If we need to add notes but don't have a valid one, use a sensible default\n if (needsNotes && !notes) {\n notes = 'Signature regenerated by lint --fix';\n }\n\n // Determine if we need to regenerate signature or just fix structure\n // EARS-40: Only regenerate if there are other errors besides missing notes\n // If only notes is missing, just add it without regenerating the signature\n const needsRegeneration = hasInvalidSignature || hasAdditionalProperties || (needsNotes && (hasInvalidSignature || hasAdditionalProperties));\n\n let fixedSignature: Signature;\n if (needsRegeneration) {\n // Regenerate signature using private key (this creates a properly formatted signature)\n fixedSignature = signPayload(\n payload,\n options.privateKey,\n keyId,\n role,\n notes\n );\n } else {\n // EARS-40: Just fix the structure without regenerating (preserve existing signature if valid)\n // This handles the case where only notes is missing - we add notes without regenerating\n const existingSig = existingHeader?.signatures?.[0];\n fixedSignature = {\n keyId: existingSig?.keyId || keyId,\n role: existingSig?.role || role,\n notes: needsNotes ? (notes || 'Signature regenerated by lint --fix') : (existingSig?.notes || notes),\n signature: existingSig?.signature || '',\n timestamp: existingSig?.timestamp || Math.floor(Date.now() / 1000)\n };\n }\n\n // Create fixed record with proper structure\n // Preserve existing header fields if they exist, but replace signatures\n const entityType = this.getEntityType(result.entity.id);\n const fixedRecord: GitGovRecord = {\n header: {\n version: existingHeader?.version || '1.0',\n type: (existingHeader?.type || entityType) as GitGovRecordType,\n payloadChecksum,\n signatures: [fixedSignature] // Replace all signatures with one valid signature\n },\n payload\n };\n\n // Write fixed record\n await this.fileSystem.writeFile(\n result.filePath,\n JSON.stringify(fixedRecord, null, 2)\n );\n\n const action = needsRegeneration ? 'regenerated' : 'fixed structure';\n logger.info(`Fixed signature structure: ${result.filePath} (${action} signature for ${keyId})`);\n }\n\n /**\n * Restores a file from its most recent backup.\n * Implements EARS-32: Restore backup if fix fails.\n * @private\n */\n private async restoreBackup(filePath: string): Promise<void> {\n // First try to use the last backup path we created\n if (this.lastBackupPath) {\n try {\n const exists = await this.fileSystem.exists(this.lastBackupPath);\n if (exists) {\n const backupContent = await this.fileSystem.readFile(this.lastBackupPath, \"utf-8\");\n await this.fileSystem.writeFile(filePath, backupContent);\n logger.info(`Restored ${filePath} from backup ${this.lastBackupPath}`);\n this.lastBackupPath = null; // Clear after use\n return;\n }\n } catch (error) {\n // Fall through to timestamp search\n }\n }\n\n // Fallback: Find most recent backup file by trying recent timestamps\n const now = Date.now();\n const timeWindows = [0, 1000, 5000, 10000, 60000]; // 0s, 1s, 5s, 10s, 1min ago\n\n for (const delta of timeWindows) {\n const timestamp = now - delta;\n const backupPath = `${filePath}.backup-${timestamp}`;\n\n try {\n const exists = await this.fileSystem.exists(backupPath);\n if (exists) {\n // Restore from backup\n const backupContent = await this.fileSystem.readFile(backupPath, \"utf-8\");\n await this.fileSystem.writeFile(filePath, backupContent);\n logger.info(`Restored ${filePath} from backup ${backupPath}`);\n return;\n }\n } catch (error) {\n // Try next backup\n continue;\n }\n }\n\n throw new Error(`No backup found for ${filePath}`);\n }\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/utils/signature_utils.ts","../../src/crypto/index.ts","../../src/adapters/project_adapter/index.ts","../../src/utils/esm_helper.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/factories/index.ts","../../src/validation/workflow_methodology_validator.ts","../../src/factories/workflow_methodology_factory.ts","../../src/factories/embedded_metadata_factory.ts","../../src/git/index.ts","../../src/git/errors.ts","../../src/git/git_module.ts","../../src/lint/index.ts","../../src/lint/lint.ts","../../src/sync/index.ts","../../src/sync/errors.ts","../../src/sync/types.ts","../../src/sync/sync_module.ts","../../src/sync/pull_scheduler.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":["fs","logger","createHash","path","projectRoot","path2","path3","path4","exec","fsSync","pathUtils","existsSync","require","path5","isTaskRecord","isCycleRecord","isExecutionRecord","join","safeId","dirname","promisify","readFileSync","verifySignatures","repoRoot","gitgovPath","gitgovExists","resolve","path7"],"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 { ConfigManager } from '../../config_manager';\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 configManager: ConfigManager; // For updating session state (activeTaskId, activeCycleId)\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 configManager: ConfigManager;\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 this.configManager = dependencies.configManager;\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 = 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. Update activeTaskId in session state\n await this.configManager.updateActorState(actorId, {\n activeTaskId: taskId\n });\n\n // 7. 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. Clear activeTaskId in session state (task no longer active)\n await this.configManager.updateActorState(actorId, {\n activeTaskId: undefined\n });\n\n // 7. 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. Update activeTaskId in session state\n await this.configManager.updateActorState(actorId, {\n activeTaskId: taskId\n });\n\n // 7. 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. Clear activeTaskId in session state (task completed)\n await this.configManager.updateActorState(actorId, {\n activeTaskId: undefined\n });\n\n // 7. 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. Clear activeTaskId in session state (task discarded)\n await this.configManager.updateActorState(actorId, {\n activeTaskId: undefined\n });\n\n // 7. 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 = 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 = 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>, actorId?: string): 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 = createCycleRecord({ ...cycleRecord.payload, ...payload });\n const updatedRecord = { ...cycleRecord, payload: updatedPayload };\n\n // Update activeCycleId in session state based on cycle status transitions\n if (actorId) {\n // Set activeCycleId when cycle is activated\n if (updatedPayload.status === 'active' && cycleRecord.payload.status !== 'active') {\n await this.configManager.updateActorState(actorId, {\n activeCycleId: cycleId\n });\n }\n // Clear activeCycleId when cycle is completed\n else if (updatedPayload.status === 'completed' && cycleRecord.payload.status !== 'completed') {\n await this.configManager.updateActorState(actorId, {\n activeCycleId: undefined\n });\n }\n }\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: 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_adapter.md is implemented\n async processChanges(_changes: unknown[]): Promise<ExecutionRecord[]> {\n throw new Error('NotImplementedError: processChanges() will be implemented when commit_processor_adapter.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 // Use debug level instead of warn to reduce noise during indexer validation\n // The indexer already captures these errors in its integrity report\n logger.debug(`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","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, GitGovTaskRecord } from \"../types\";\nimport { validateTaskRecordDetailed } from \"../validation/task_validator\";\nimport { validateEmbeddedMetadataDetailed } from \"../validation/embedded_metadata_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 function createTaskRecord(\n payload: Partial<TaskRecord>\n): 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/**\n * Loads and validates an existing TaskRecord from untrusted data.\n * Used by RecordStore to validate records when reading from disk.\n * Validates both header (embedded metadata) and payload (TaskRecord).\n * \n * @param data - Unknown data to validate as GitGovTaskRecord\n * @returns GitGovTaskRecord - The validated complete record\n * @throws DetailedValidationError if validation fails\n */\nexport function loadTaskRecord(data: unknown): GitGovTaskRecord {\n // First validate complete record structure (header + payload)\n const embeddedValidation = validateEmbeddedMetadataDetailed(data);\n if (!embeddedValidation.isValid) {\n throw new DetailedValidationError('GitGovRecord (TaskRecord)', embeddedValidation.errors);\n }\n\n // Then validate specific TaskRecord payload\n const record = data as GitGovTaskRecord;\n const payloadValidation = validateTaskRecordDetailed(record.payload);\n if (!payloadValidation.isValid) {\n throw new DetailedValidationError('TaskRecord payload', payloadValidation.errors);\n }\n\n return record;\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, GitGovCycleRecord } from \"../types\";\nimport { validateCycleRecordDetailed } from \"../validation/cycle_validator\";\nimport { validateEmbeddedMetadataDetailed } from \"../validation/embedded_metadata_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 function createCycleRecord(\n payload: Partial<CycleRecord>\n): 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/**\n * Loads and validates an existing CycleRecord from untrusted data.\n * Used by RecordStore to validate records when reading from disk.\n * Validates both header (embedded metadata) and payload (CycleRecord).\n * \n * @param data - Unknown data to validate as GitGovCycleRecord\n * @returns GitGovCycleRecord - The validated complete record\n * @throws DetailedValidationError if validation fails\n */\nexport function loadCycleRecord(data: unknown): GitGovCycleRecord {\n // First validate complete record structure (header + payload)\n const embeddedValidation = validateEmbeddedMetadataDetailed(data);\n if (!embeddedValidation.isValid) {\n throw new DetailedValidationError('GitGovRecord (CycleRecord)', embeddedValidation.errors);\n }\n\n // Then validate specific CycleRecord payload\n const record = data as GitGovCycleRecord;\n const payloadValidation = validateCycleRecordDetailed(record.payload);\n if (!payloadValidation.isValid) {\n throw new DetailedValidationError('CycleRecord payload', payloadValidation.errors);\n }\n\n return record;\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 state?: {\n branch?: string; // Opcional, default: \"gitgov-state\"\n sync?: {\n strategy?: \"manual\" | \"immediate\" | \"batched\";\n maxRetries?: number;\n pushIntervalSeconds?: number;\n batchIntervalSeconds?: number;\n };\n defaults?: {\n pullScheduler?: {\n defaultIntervalSeconds?: number;\n defaultEnabled?: boolean;\n defaultContinueOnNetworkError?: boolean;\n defaultStopOnConflict?: boolean;\n };\n fileWatcher?: {\n defaultDebounceMs?: number;\n defaultIgnoredPatterns?: string[];\n };\n };\n };\n}\n\n/**\n * GitGovernance Session State Types\n * Based on session_state.md blueprint\n */\n\nexport interface SyncStatus {\n lastSyncPush?: string; // ISO 8601 timestamp\n lastSyncPull?: string; // ISO 8601 timestamp\n status?: 'synced' | 'pending' | 'pulling' | 'pushing' | 'conflict';\n lastError?: string;\n}\n\nexport interface ActorState {\n activeTaskId?: string | undefined; // Current task being worked on (undefined = no active task)\n activeCycleId?: string | undefined; // Current cycle being worked on (undefined = no active cycle)\n lastSync?: string;\n syncStatus?: SyncStatus;\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 syncPreferences?: {\n pullScheduler?: {\n enabled?: boolean;\n pullIntervalSeconds?: number;\n continueOnNetworkError?: boolean;\n stopOnConflict?: boolean;\n };\n fileWatcher?: {\n enabled?: boolean;\n debounceMs?: number;\n ignoredPatterns?: string[];\n };\n };\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 const config = JSON.parse(configContent) as GitGovConfig;\n\n // Optional validation: Warn if rootCycle doesn't match expected format\n if (config.rootCycle && !/^\\d+-cycle-[a-z0-9-]+$/.test(config.rootCycle)) {\n console.warn(\n `āš ļø Warning: rootCycle \"${config.rootCycle}\" doesn't match expected format ` +\n `\"{timestamp}-cycle-{slug}\". This may cause issues with cycle navigation.`\n );\n }\n\n return config;\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 // Update lastSession if the actor is a human (not an agent)\n // This ensures lastSession reflects the last human interaction with the CLI\n if (actorId.startsWith('human:')) {\n session.lastSession = {\n actorId,\n timestamp: new Date().toISOString()\n };\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 /**\n * Get complete context information for an actor\n * Useful for agents to understand current working context\n * Returns information from both config.json (project-level) and .session.json (actor-level)\n */\n async getActorContext(actorId: string): Promise<{\n actorId: string;\n activeCycleId: string | null;\n activeTaskId: string | null;\n rootCycle: string | null;\n projectInfo: { id: string; name: string } | null;\n syncStatus: SyncStatus | null;\n }> {\n const [actorState, rootCycle, projectInfo] = await Promise.all([\n this.getActorState(actorId),\n this.getRootCycle(),\n this.getProjectInfo()\n ]);\n\n return {\n actorId,\n activeCycleId: actorState?.activeCycleId || null,\n activeTaskId: actorState?.activeTaskId || null,\n rootCycle,\n projectInfo,\n syncStatus: actorState?.syncStatus || null\n };\n }\n\n /**\n * Get sync configuration from config.json\n * Returns sync strategy and related settings with defaults\n */\n async getSyncConfig(): Promise<{\n strategy: \"manual\" | \"immediate\" | \"batched\";\n maxRetries: number;\n pushIntervalSeconds: number;\n batchIntervalSeconds: number;\n } | null> {\n const config = await this.loadConfig();\n if (!config?.state?.sync) return null;\n\n return {\n strategy: config.state.sync.strategy || \"manual\",\n maxRetries: config.state.sync.maxRetries || 3,\n pushIntervalSeconds: config.state.sync.pushIntervalSeconds || 30,\n batchIntervalSeconds: config.state.sync.batchIntervalSeconds || 60\n };\n }\n\n /**\n * Get sync defaults from config.json\n * Returns recommended defaults for pullScheduler and fileWatcher\n */\n async getSyncDefaults(): Promise<{\n pullScheduler: {\n defaultIntervalSeconds: number;\n defaultEnabled: boolean;\n defaultContinueOnNetworkError: boolean;\n defaultStopOnConflict: boolean;\n };\n fileWatcher: {\n defaultDebounceMs: number;\n defaultIgnoredPatterns: string[];\n };\n }> {\n const config = await this.loadConfig();\n\n return {\n pullScheduler: {\n defaultIntervalSeconds: config?.state?.defaults?.pullScheduler?.defaultIntervalSeconds || 30,\n defaultEnabled: config?.state?.defaults?.pullScheduler?.defaultEnabled || false,\n defaultContinueOnNetworkError: config?.state?.defaults?.pullScheduler?.defaultContinueOnNetworkError ?? true,\n defaultStopOnConflict: config?.state?.defaults?.pullScheduler?.defaultStopOnConflict || false\n },\n fileWatcher: {\n defaultDebounceMs: config?.state?.defaults?.fileWatcher?.defaultDebounceMs || 300,\n defaultIgnoredPatterns: config?.state?.defaults?.fileWatcher?.defaultIgnoredPatterns || [\"*.tmp\", \".DS_Store\", \"*.swp\"]\n }\n };\n }\n\n /**\n * Resolve PullScheduler configuration with priority logic:\n * 1. Local preferences (.session.json syncPreferences)\n * 2. Project defaults (config.json state.defaults)\n * 3. Hardcoded fallbacks\n */\n async resolvePullSchedulerConfig(): Promise<{\n enabled: boolean;\n pullIntervalSeconds: number;\n continueOnNetworkError: boolean;\n stopOnConflict: boolean;\n }> {\n const [session, defaults] = await Promise.all([\n this.loadSession(),\n this.getSyncDefaults()\n ]);\n\n const localPrefs = session?.syncPreferences?.pullScheduler;\n\n return {\n enabled: localPrefs?.enabled ?? defaults.pullScheduler.defaultEnabled,\n pullIntervalSeconds: localPrefs?.pullIntervalSeconds ?? defaults.pullScheduler.defaultIntervalSeconds,\n continueOnNetworkError: localPrefs?.continueOnNetworkError ?? defaults.pullScheduler.defaultContinueOnNetworkError,\n stopOnConflict: localPrefs?.stopOnConflict ?? defaults.pullScheduler.defaultStopOnConflict\n };\n }\n\n /**\n * Resolve FileWatcher configuration with priority logic:\n * 1. Local preferences (.session.json syncPreferences)\n * 2. Project defaults (config.json state.defaults)\n * 3. Hardcoded fallbacks\n */\n async resolveFileWatcherConfig(): Promise<{\n enabled: boolean;\n debounceMs: number;\n ignoredPatterns: string[];\n }> {\n const [session, defaults] = await Promise.all([\n this.loadSession(),\n this.getSyncDefaults()\n ]);\n\n const localPrefs = session?.syncPreferences?.fileWatcher;\n\n return {\n enabled: localPrefs?.enabled ?? false,\n debounceMs: localPrefs?.debounceMs ?? defaults.fileWatcher.defaultDebounceMs,\n ignoredPatterns: localPrefs?.ignoredPatterns ?? defaults.fileWatcher.defaultIgnoredPatterns\n };\n }\n\n /**\n * Update sync preferences in .session.json\n * These are local machine preferences that override project defaults\n */\n async updateSyncPreferences(preferences: {\n pullScheduler?: Partial<{\n enabled: boolean;\n pullIntervalSeconds: number;\n continueOnNetworkError: boolean;\n stopOnConflict: boolean;\n }>;\n fileWatcher?: Partial<{\n enabled: boolean;\n debounceMs: number;\n ignoredPatterns: string[];\n }>;\n }): Promise<void> {\n const session = await this.loadSession() || {};\n\n if (!session.syncPreferences) {\n session.syncPreferences = {};\n }\n\n if (preferences.pullScheduler) {\n session.syncPreferences.pullScheduler = {\n ...session.syncPreferences.pullScheduler,\n ...preferences.pullScheduler\n };\n }\n\n if (preferences.fileWatcher) {\n session.syncPreferences.fileWatcher = {\n ...session.syncPreferences.fileWatcher,\n ...preferences.fileWatcher\n };\n }\n\n await fs.writeFile(this.sessionPath, JSON.stringify(session, null, 2), 'utf-8');\n }\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';\nimport { DetailedValidationError } from '../validation/common';\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 private loader: (data: unknown) => GitGovRecord & { payload: T };\n\n constructor(\n recordType: string,\n loader: (data: unknown) => GitGovRecord & { payload: T },\n rootPath?: string,\n fsDeps: FsDependencies = fs\n ) {\n this.loader = loader;\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 raw = JSON.parse(content);\n\n // Validate complete record (header + payload) using loader\n const validatedRecord = this.loader(raw);\n\n return validatedRecord;\n } catch (e: unknown) {\n // Handle validation errors gracefully\n if (e instanceof DetailedValidationError) {\n console.warn(`āš ļø Invalid ${this.recordType} record ${recordId}:`, e.message);\n return null; // Skip invalid records, don't crash\n }\n\n // Handle file not found\n const error = e as NodeJS.ErrnoException;\n if (error.code === 'ENOENT') {\n return null;\n }\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, GitGovActorRecord, GitGovAgentRecord } 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\";\nimport { promises as fs } from \"fs\";\nimport * as path from \"path\";\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 = createActorRecord(completePayload);\n\n // Calculate checksum for the payload\n const payloadChecksum = calculatePayloadChecksum(validatedPayload);\n\n // Create signature for the record\n const signature = signPayload(validatedPayload, privateKey, actorId, 'author', 'Actor registration');\n\n // Create the complete GitGovRecord structure\n const record: GitGovActorRecord = {\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 // Persist private key to .gitgov/actors/{actorId}.key\n try {\n const projectRoot = ConfigManager.findProjectRoot();\n if (projectRoot) {\n const actorsDir = path.join(projectRoot, '.gitgov', 'actors');\n await fs.mkdir(actorsDir, { recursive: true });\n\n const keyPath = path.join(actorsDir, `${actorId}.key`);\n await fs.writeFile(keyPath, privateKey, 'utf-8');\n // Set secure file permissions (0600 = owner read/write only)\n await fs.chmod(keyPath, 0o600);\n }\n } catch (error) {\n // Log warning but don't fail actor creation if key persistence fails\n // This allows graceful degradation in environments where file permissions might be restricted\n console.warn(`āš ļø Could not persist private key for ${actorId}: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\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 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 // 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 // Try to load private key from .gitgov/actors/{actorId}.key for real signing\n let privateKey: string | null = null;\n try {\n const projectRoot = ConfigManager.findProjectRoot();\n if (projectRoot) {\n const keyPath = path.join(projectRoot, '.gitgov', 'actors', `${actorId}.key`);\n const keyContent = await fs.readFile(keyPath, 'utf-8');\n privateKey = keyContent.trim();\n }\n } catch (error) {\n // Private key not found - fallback to mock signature for backward compatibility\n console.warn(`āš ļø Private key not found for ${actorId}, using mock signature`);\n }\n\n // Create signature (real if private key available, mock otherwise)\n let signature: Signature;\n if (privateKey) {\n // Real cryptographic signing\n signature = signPayload(record.payload, privateKey, actorId, role, 'Record signed');\n } else {\n // Fallback to mock signature for backward compatibility\n 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\n // Replace placeholder signatures or add new signature if no placeholders exist\n const existingSignatures = record.header.signatures || [];\n const hasPlaceholder = existingSignatures.some(sig => sig.signature === 'placeholder');\n\n let finalSignatures: [Signature, ...Signature[]];\n if (hasPlaceholder) {\n // Replace placeholder signatures with the real signature\n const replaced = existingSignatures.map(sig =>\n sig.signature === 'placeholder' ? signature : sig\n );\n // Ensure at least one signature (should always be true after replacement)\n finalSignatures = replaced.length > 0\n ? replaced as [Signature, ...Signature[]]\n : [signature];\n } else {\n // No placeholders: append new signature (multi-signature scenario)\n finalSignatures = [...existingSignatures, signature] as [Signature, ...Signature[]];\n }\n\n // Create signed record with real checksum + signature\n const signedRecord: GitGovRecord = {\n ...record,\n header: {\n ...record.header,\n payloadChecksum,\n signatures: finalSignatures\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 // Read existing actor\n const oldActor = await this.getActor(actorId);\n if (!oldActor) {\n throw new Error(`ActorRecord with id ${actorId} not found`);\n }\n\n if (oldActor.status === 'revoked') {\n throw new Error(`Cannot rotate key for revoked actor: ${actorId}`);\n }\n\n // Generate new keys for the new actor\n const { publicKey: newPublicKey, privateKey: newPrivateKey } = await generateKeys();\n\n // Generate new actor ID following the pattern from actor_protocol_faq.md\n // Pattern: {baseId}-v{N} where N is the version number (using hyphens to match schema pattern)\n // Schema pattern: ^(human|agent)(:[a-z0-9-]+)+$ (only allows hyphens, not underscores)\n const baseId = generateActorId(oldActor.type, oldActor.displayName);\n let newActorId: string;\n\n // Check if baseId already has a version suffix (e.g., human:camilo-v2)\n const versionMatch = baseId.match(/^(.+)-v(\\d+)$/);\n if (versionMatch && versionMatch[1] && versionMatch[2]) {\n const baseWithoutVersion = versionMatch[1];\n const currentVersion = parseInt(versionMatch[2], 10);\n newActorId = `${baseWithoutVersion}-v${currentVersion + 1}`;\n } else {\n // First rotation: add -v2\n newActorId = `${baseId}-v2`;\n }\n\n // Create new actor with same metadata but new keys\n const newActorPayload: ActorRecord = {\n id: newActorId,\n type: oldActor.type,\n displayName: oldActor.displayName,\n publicKey: newPublicKey,\n roles: oldActor.roles,\n status: 'active'\n };\n\n // Validate the new payload\n const validatedNewPayload = createActorRecord(newActorPayload);\n\n // Calculate checksum for the new payload\n const payloadChecksum = calculatePayloadChecksum(validatedNewPayload);\n\n // Create signature for the new record (self-signed for bootstrap)\n const signature = signPayload(validatedNewPayload, newPrivateKey, newActorId, 'author', 'Key rotation');\n\n // Create the complete GitGovRecord structure for new actor\n const newRecord: GitGovActorRecord = {\n header: {\n version: '1.0',\n type: 'actor',\n payloadChecksum,\n signatures: [signature]\n },\n payload: validatedNewPayload\n };\n\n // Validate the complete new record\n await validateFullActorRecord(newRecord, async (keyId) => {\n if (keyId === newActorId) {\n return newPublicKey; // Self-referential for bootstrap\n }\n const signerActor = await this.getActor(keyId);\n return signerActor?.publicKey || null;\n });\n\n // Store the new actor record\n await this.actorStore.write(newRecord);\n\n // Revoke old actor and mark succession\n const revokedOldActor = await this.revokeActor(\n actorId,\n 'system',\n 'rotation',\n newActorId // Mark succession\n );\n\n // Update session to point to the new actor\n try {\n const configManager = new ConfigManager();\n const session = await configManager.loadSession();\n\n if (session) {\n // Update lastSession to point to new actor\n session.lastSession = {\n actorId: newActorId,\n timestamp: new Date().toISOString()\n };\n\n // Migrate actorState from old actor to new actor if it exists\n if (session.actorState && session.actorState[actorId]) {\n const oldState = session.actorState[actorId];\n session.actorState[newActorId] = {\n ...oldState,\n lastSync: new Date().toISOString()\n };\n // Keep old actor state for history (don't delete it)\n } else if (!session.actorState) {\n session.actorState = {};\n }\n\n // Write updated session using ConfigManager's sessionPath\n // Access private sessionPath via reflection or use the same pattern as updateActorState\n const projectRoot = ConfigManager.findProjectRoot() || process.cwd();\n const sessionPath = path.join(projectRoot, '.gitgov', '.session.json');\n await fs.writeFile(sessionPath, JSON.stringify(session, null, 2), 'utf-8');\n }\n } catch (error) {\n // Graceful degradation: session update is not critical\n console.warn(`āš ļø Could not update session for ${newActorId}: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n\n // Persist new private key to .gitgov/actors/{newActorId}.key\n try {\n const projectRoot = ConfigManager.findProjectRoot();\n if (projectRoot) {\n const actorsDir = path.join(projectRoot, '.gitgov', 'actors');\n await fs.mkdir(actorsDir, { recursive: true });\n\n const keyPath = path.join(actorsDir, `${newActorId}.key`);\n await fs.writeFile(keyPath, newPrivateKey, 'utf-8');\n // Set secure file permissions (0600 = owner read/write only)\n await fs.chmod(keyPath, 0o600);\n }\n } catch (error) {\n console.warn(`āš ļø Could not persist private key for ${newActorId}: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n\n return {\n oldActor: revokedOldActor,\n newActor: validatedNewPayload\n };\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: GitGovActorRecord = {\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 = createAgentRecord(completePayload);\n\n // Calculate checksum for the payload\n const payloadChecksum = calculatePayloadChecksum(validatedPayload);\n\n // Load private key from .gitgov/actors/{actorId}.key for real signing\n // Since createActor() always persists the private key, it should be available\n // If not found, this indicates a problem (legacy actor, key deleted, or I/O error)\n let privateKey: string;\n try {\n const projectRoot = ConfigManager.findProjectRoot();\n if (!projectRoot) {\n throw new Error('Project root not found. Cannot locate private key.');\n }\n const keyPath = path.join(projectRoot, '.gitgov', 'actors', `${payload.id}.key`);\n const keyContent = await fs.readFile(keyPath, 'utf-8');\n privateKey = keyContent.trim();\n if (!privateKey) {\n throw new Error(`Private key file is empty for ${payload.id}`);\n }\n } catch (error) {\n throw new Error(\n `Private key not found for actor ${payload.id}. ` +\n `AgentRecord requires a valid private key for cryptographic signing. ` +\n `If this is a legacy actor, you may need to regenerate the actor with 'gitgov actor new'. ` +\n `Original error: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n\n // Create real cryptographic signature\n const signature = signPayload(validatedPayload, privateKey, payload.id, 'author', 'Agent registration');\n\n // Create the complete GitGovRecord structure\n const record: GitGovAgentRecord = {\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, GitGovActorRecord } from \"../types\";\nimport { validateActorRecordDetailed } from \"../validation/actor_validator\";\nimport { validateEmbeddedMetadataDetailed } from \"../validation/embedded_metadata_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 function createActorRecord(\n payload: Partial<ActorRecord>\n): 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\n/**\n * Loads and validates an existing ActorRecord from untrusted data.\n * Used by RecordStore to validate records when reading from disk.\n * Validates both header (embedded metadata) and payload (ActorRecord).\n * \n * @param data - Unknown data to validate as GitGovActorRecord\n * @returns GitGovActorRecord - The validated complete record\n * @throws DetailedValidationError if validation fails\n */\nexport function loadActorRecord(data: unknown): GitGovActorRecord {\n // First validate complete record structure (header + payload)\n const embeddedValidation = validateEmbeddedMetadataDetailed(data);\n if (!embeddedValidation.isValid) {\n throw new DetailedValidationError('GitGovRecord (ActorRecord)', embeddedValidation.errors);\n }\n \n // Then validate specific ActorRecord payload\n const record = data as GitGovActorRecord;\n const payloadValidation = validateActorRecordDetailed(record.payload);\n if (!payloadValidation.isValid) {\n throw new DetailedValidationError('ActorRecord payload', payloadValidation.errors);\n }\n \n return record;\n}\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, GitGovAgentRecord } from \"../types\";\nimport { validateAgentRecordDetailed } from \"../validation/agent_validator\";\nimport { validateEmbeddedMetadataDetailed } from \"../validation/embedded_metadata_validator\";\nimport { DetailedValidationError } from \"../validation/common\";\n\n/**\n * Creates a new, fully-formed AgentRecord with validation.\n */\nexport function createAgentRecord(\n payload: Partial<AgentRecord>\n): 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\n/**\n * Loads and validates an existing AgentRecord from untrusted data.\n * Used by RecordStore to validate records when reading from disk.\n * Validates both header (embedded metadata) and payload (AgentRecord).\n * \n * @param data - Unknown data to validate as GitGovAgentRecord\n * @returns GitGovAgentRecord - The validated complete record\n * @throws DetailedValidationError if validation fails\n */\nexport function loadAgentRecord(data: unknown): GitGovAgentRecord {\n // First validate complete record structure (header + payload)\n const embeddedValidation = validateEmbeddedMetadataDetailed(data);\n if (!embeddedValidation.isValid) {\n throw new DetailedValidationError('GitGovRecord (AgentRecord)', embeddedValidation.errors);\n }\n \n // Then validate specific AgentRecord payload\n const record = data as GitGovAgentRecord;\n const payloadValidation = validateAgentRecordDetailed(record.payload);\n if (!payloadValidation.isValid) {\n throw new DetailedValidationError('AgentRecord payload', payloadValidation.errors);\n }\n \n return record;\n}\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 = 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, GitGovFeedbackRecord } from '../types';\nimport { generateFeedbackId } from '../utils/id_generator';\nimport { validateFeedbackRecordDetailed } from '../validation/feedback_validator';\nimport { validateEmbeddedMetadataDetailed } from '../validation/embedded_metadata_validator';\nimport { DetailedValidationError } from '../validation/common';\n\n/**\n * Creates a complete FeedbackRecord with validation\n * \n * @param payload - Partial FeedbackRecord payload\n * @returns FeedbackRecord - The validated FeedbackRecord\n */\nexport function createFeedbackRecord(payload: Partial<FeedbackRecord>): 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/**\n * Loads and validates an existing FeedbackRecord from untrusted data.\n * Used by RecordStore to validate records when reading from disk.\n * Validates both header (embedded metadata) and payload (FeedbackRecord).\n * \n * @param data - Unknown data to validate as GitGovFeedbackRecord\n * @returns GitGovFeedbackRecord - The validated complete record\n * @throws DetailedValidationError if validation fails\n */\nexport function loadFeedbackRecord(data: unknown): GitGovFeedbackRecord {\n // First validate complete record structure (header + payload)\n const embeddedValidation = validateEmbeddedMetadataDetailed(data);\n if (!embeddedValidation.isValid) {\n throw new DetailedValidationError('GitGovRecord (FeedbackRecord)', embeddedValidation.errors);\n }\n \n // Then validate specific FeedbackRecord payload\n const record = data as GitGovFeedbackRecord;\n const payloadValidation = validateFeedbackRecordDetailed(record.payload);\n if (!payloadValidation.isValid) {\n throw new DetailedValidationError('FeedbackRecord payload', payloadValidation.errors);\n }\n \n return record;\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 = 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, GitGovExecutionRecord } from '../types';\nimport { generateExecutionId } from '../utils/id_generator';\nimport { validateExecutionRecordDetailed } from '../validation/execution_validator';\nimport { validateEmbeddedMetadataDetailed } from '../validation/embedded_metadata_validator';\nimport { DetailedValidationError } from '../validation/common';\n\n/**\n * Creates a complete ExecutionRecord with validation\n * \n * @param payload - Partial ExecutionRecord payload\n * @returns ExecutionRecord - The validated ExecutionRecord\n */\nexport function createExecutionRecord(payload: Partial<ExecutionRecord>): 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/**\n * Loads and validates an existing ExecutionRecord from untrusted data.\n * Used by RecordStore to validate records when reading from disk.\n * Validates both header (embedded metadata) and payload (ExecutionRecord).\n * \n * @param data - Unknown data to validate as GitGovExecutionRecord\n * @returns GitGovExecutionRecord - The validated complete record\n * @throws DetailedValidationError if validation fails\n */\nexport function loadExecutionRecord(data: unknown): GitGovExecutionRecord {\n // First validate complete record structure (header + payload)\n const embeddedValidation = validateEmbeddedMetadataDetailed(data);\n if (!embeddedValidation.isValid) {\n throw new DetailedValidationError('GitGovRecord (ExecutionRecord)', embeddedValidation.errors);\n }\n \n // Then validate specific ExecutionRecord payload\n const record = data as GitGovExecutionRecord;\n const payloadValidation = validateExecutionRecordDetailed(record.payload);\n if (!payloadValidation.isValid) {\n throw new DetailedValidationError('ExecutionRecord payload', payloadValidation.errors);\n }\n \n return record;\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 = 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, GitGovChangelogRecord } from '../types';\nimport { validateChangelogRecordDetailed } from '../validation/changelog_validator';\nimport { validateEmbeddedMetadataDetailed } from '../validation/embedded_metadata_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 ChangelogRecord - The validated ChangelogRecord\n */\nexport function createChangelogRecord(payload: Partial<ChangelogRecord>): 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/**\n * Loads and validates an existing ChangelogRecord from untrusted data.\n * Used by RecordStore to validate records when reading from disk.\n * Validates both header (embedded metadata) and payload (ChangelogRecord).\n * \n * @param data - Unknown data to validate as GitGovChangelogRecord\n * @returns GitGovChangelogRecord - The validated complete record\n * @throws DetailedValidationError if validation fails\n */\nexport function loadChangelogRecord(data: unknown): GitGovChangelogRecord {\n // First validate complete record structure (header + payload)\n const embeddedValidation = validateEmbeddedMetadataDetailed(data);\n if (!embeddedValidation.isValid) {\n throw new DetailedValidationError('GitGovRecord (ChangelogRecord)', embeddedValidation.errors);\n }\n\n // Then validate specific ChangelogRecord payload\n const record = data as GitGovChangelogRecord;\n const payloadValidation = validateChangelogRecordDetailed(record.payload);\n if (!payloadValidation.isValid) {\n throw new DetailedValidationError('ChangelogRecord payload', payloadValidation.errors);\n }\n\n return record;\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 { extractAuthor, extractLastModifier } from '../../utils/signature_utils';\nimport { calculatePayloadChecksum, verifySignatures } from '../../crypto';\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 complete intelligence layer\n * Calculated by enrichTaskRecord() with relationships, metrics, and derived states\n * \n * @see indexer_adapter.md Section 3.6 - EnrichedTaskRecord Specification (EARS 25-48)\n */\nexport type EnrichedTaskRecord = TaskRecord & {\n derivedState: {\n isStalled: boolean;\n isAtRisk: boolean;\n needsClarification: boolean;\n isBlockedByDependency: boolean;\n healthScore: number; // 0-100\n timeInCurrentStage: number; // dĆ­as\n };\n relationships: {\n author?: { actorId: string; timestamp: number };\n lastModifier?: { actorId: string; timestamp: number };\n assignedTo: Array<{ actorId: string; assignedAt?: number }>;\n dependsOn: string[]; // Typed references: task:, pr:, issue:, file:, url:\n blockedBy: string[]; // Reverse dependencies (not completed)\n cycles: Array<{ id: string; title: string }>;\n };\n metrics: {\n executionCount: number;\n blockingFeedbackCount: number;\n openQuestionCount: number;\n timeToResolution?: number; // horas (solo para done tasks)\n };\n release: {\n isReleased: boolean;\n lastReleaseVersion?: string;\n };\n lastUpdated: number; // Unix timestamp ms\n lastActivityType: 'task_modified' | 'feedback_received' | 'execution_added' | 'changelog_created' | 'task_created';\n recentActivity?: string;\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 derivedStates: DerivedStates; // Global derived states for system-wide queries\n activityHistory: ActivityEvent[]; // Para dashboard activity streams\n\n /**\n * Raw task records with FULL headers (source of truth for signatures/checksums).\n * Mantener por backward compatibility - deprecar gradualmente en favor de enrichedTasks.\n */\n tasks: GitGovTaskRecord[]; // Full records with headers\n\n /**\n * Enriched tasks with intelligence layer (NEW - Phase 1A).\n * Payload + campos calculados (relationships, metrics, derivedState, release).\n * NO incluye headers (author/lastModifier ya extraĆ­dos en relationships).\n */\n enrichedTasks: EnrichedTaskRecord[]; // Tasks with activity metadata for Dashboard\n\n /** Raw cycle records with FULL headers */\n cycles: GitGovCycleRecord[]; // Full records with headers\n\n /** Raw actor records with FULL headers */\n actors: GitGovActorRecord[]; // Full records with headers\n\n /** Raw feedback records with FULL headers (optional - Phase 1B+) */\n feedback: GitGovFeedbackRecord[]; // Full records with headers\n};\n\n/**\n * System-wide derived states for dashboard analytics and filtering.\n * Calculated by calculateDerivedStates() during index generation.\n * \n * @see derived_data_protocol.md for calculation algorithms\n */\nexport type DerivedStates = {\n stalledTasks: string[]; // Task IDs con >7 dĆ­as sin activity en estado 'active'\n atRiskTasks: string[]; // Task IDs con prioridad 'critical' + 'paused' O 2+ blocking feedbacks\n needsClarificationTasks: string[]; // Task IDs con feedback tipo 'question' abierto\n blockedByDependencyTasks: string[]; // Task IDs con dependencias a tasks no completadas\n};\n\n/**\n * Optimized version of DerivedStates using Sets for O(1) lookup performance.\n * Used internally by enrichTaskRecord() to efficiently check task membership.\n * \n * Conversion from DerivedStates (arrays) to DerivedStateSets (Sets) happens once\n * in generateIndex() before processing multiple tasks, avoiding repeated O(n) lookups.\n */\nexport type DerivedStateSets = {\n stalledTasks: Set<string>;\n atRiskTasks: Set<string>;\n needsClarificationTasks: Set<string>;\n blockedByDependencyTasks: Set<string>;\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 derivedStatesApplied: number; // Number of tasks with derived states calculated\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 calculateDerivedStates(allRecords: AllRecords): Promise<DerivedStates>; // NUEVO - System-wide derived states\n calculateActivityHistory(allRecords: AllRecords): Promise<ActivityEvent[]>; // NUEVO\n calculateLastUpdated(taskPayload: TaskRecord, relatedRecords: AllRecords): Promise<{ lastUpdated: number; lastActivityType: EnrichedTaskRecord['lastActivityType']; recentActivity: string }>; // NUEVO\n enrichTaskRecord(task: GitGovTaskRecord, relatedRecords: AllRecords, derivedStateSets: DerivedStateSets): Promise<EnrichedTaskRecord>; // UPDATED: Uses DerivedStateSets (Sets) for O(1) lookup (EARS-43)\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. Calculate system-wide derived states (EARS 7-10)\n const derivedStates = await this.calculateDerivedStates(allRecords);\n\n // 3.6. Convert DerivedStates arrays to DerivedStateSets for O(1) lookup performance\n const derivedStateSets: DerivedStateSets = {\n stalledTasks: new Set(derivedStates.stalledTasks),\n atRiskTasks: new Set(derivedStates.atRiskTasks),\n needsClarificationTasks: new Set(derivedStates.needsClarificationTasks),\n blockedByDependencyTasks: new Set(derivedStates.blockedByDependencyTasks)\n };\n\n // 3.7. Enrich tasks with complete intelligence layer (EARS-43: pass pre-calculated derivedStates)\n const enrichedTasks = await Promise.all(\n tasks.map(task => this.enrichTaskRecord(task, allRecords, derivedStateSets))\n );\n\n // 3.8. Validate integrity to populate integrityStatus (EARS-4 integration)\n const integrityReport = await this.validateIntegrity();\n\n // 4. Build IndexData structure\n const indexData: IndexData = {\n metadata: {\n generatedAt: new Date().toISOString(),\n lastCommitHash: await this.getGitCommitHash(),\n integrityStatus: integrityReport.status, // Populated from validateIntegrity() (EARS-4)\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 derivedStates, // System-wide derived states for analytics\n activityHistory, // Activity stream for dashboard\n tasks, // Keep full records with headers (source of truth)\n enrichedTasks, // Tasks with intelligence layer\n cycles, // Keep full records with headers\n actors, // Keep full records with headers\n feedback: allRecords.feedback // Optional - Phase 1B+ raw feedback records\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 derivedStatesApplied: Object.values(derivedStates).reduce((sum, arr) => sum + arr.length, 0), // Total tasks with derived states\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 derivedStatesApplied: 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 * [EARS-13] Returns null and logs warning if cache is corrupted\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 // [EARS-13] Cache is corrupted or invalid - log warning and suggest regeneration\n console.warn(`Warning: Cache is corrupted or invalid. Please regenerate with 'gitgov index'.`);\n console.warn(`Details: ${error instanceof Error ? error.message : String(error)}`);\n return null;\n }\n }\n\n /**\n * [EARS-4, EARS-70 to EARS-76] Validates integrity of Records without regenerating cache\n * \n * PHASE 1A (IMPLEMENTED): Basic schema validation (required fields)\n * PHASE 1B (IMPLEMENTED): Cryptographic validation (checksums + signatures)\n * TODO FUTURE:\n * - Integrate ValidatorModule for comprehensive schema validation\n * - Compare cache consistency with Records\n * - Detect broken references between records\n * - Validate timestamp consistency\n */\n async validateIntegrity(): Promise<IntegrityReport> {\n const startTime = performance.now();\n const errors: IntegrityError[] = [];\n const warnings: IntegrityWarning[] = [];\n let recordsScanned = 0;\n let checksumFailures = 0;\n let signatureFailures = 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 // PHASE 1A: Schema validation - verify required fields\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 // PHASE 1B: Checksum verification (EARS-70 to EARS-72)\n for (const task of tasks) {\n const calculatedChecksum = calculatePayloadChecksum(task.payload);\n if (calculatedChecksum !== task.header.payloadChecksum) {\n checksumFailures++;\n errors.push({\n type: 'checksum_failure',\n recordId: task.payload.id,\n message: `Checksum mismatch: expected ${task.header.payloadChecksum}, got ${calculatedChecksum}`\n });\n }\n }\n\n for (const cycle of cycles) {\n const calculatedChecksum = calculatePayloadChecksum(cycle.payload);\n if (calculatedChecksum !== cycle.header.payloadChecksum) {\n checksumFailures++;\n errors.push({\n type: 'checksum_failure',\n recordId: cycle.payload.id,\n message: `Checksum mismatch: expected ${cycle.header.payloadChecksum}, got ${calculatedChecksum}`\n });\n }\n }\n\n // PHASE 1B: Signature verification (EARS-73 to EARS-76)\n // Create actor public key lookup function for signature verification\n const getActorPublicKey = async (keyId: string): Promise<string | null> => {\n // EARS-76: Graceful degradation if actorStore not available\n if (!this.actorStore) {\n return null;\n }\n const actor = await this.actorStore.read(keyId);\n return actor?.payload.publicKey || null;\n };\n\n // Verify signatures for all tasks\n for (const task of tasks) {\n const isValid = await verifySignatures(task, getActorPublicKey);\n if (!isValid) {\n signatureFailures++;\n errors.push({\n type: 'signature_invalid',\n recordId: task.payload.id,\n message: 'One or more signatures failed verification'\n });\n }\n }\n\n // Verify signatures for all cycles\n for (const cycle of cycles) {\n const isValid = await verifySignatures(cycle, getActorPublicKey);\n if (!isValid) {\n signatureFailures++;\n errors.push({\n type: 'signature_invalid',\n recordId: cycle.payload.id,\n message: 'One or more signatures failed verification'\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,\n signatureFailures\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,\n signatureFailures\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 * Validates schema and filters out invalid records with warnings.\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 // Loader validates automatically - invalid records return null\n changelogs.push(record);\n }\n }\n\n return changelogs;\n }\n\n /**\n * Writes cache data to file (Phase 1: JSON)\n * \n * [EARS-14] Creates automatic backup of existing cache before writing.\n * If write fails, backup can be restored to preserve previous cache state.\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 // [EARS-14] Create backup of existing cache before writing new one\n await this.createCacheBackup();\n\n try {\n // Write JSON cache file\n const jsonContent = JSON.stringify(indexData, null, 2);\n await fs.writeFile(this.cachePath, jsonContent, 'utf-8');\n\n // [EARS-14] Successfully written - delete backup\n await this.deleteCacheBackup();\n } catch (error) {\n // [EARS-14] Write failed - restore backup\n await this.restoreCacheFromBackup();\n throw error; // Re-throw to propagate error to caller\n }\n }\n\n /**\n * [EARS-14] Creates a backup of the current cache file.\n * If cache doesn't exist, this is a no-op (nothing to backup).\n */\n private async createCacheBackup(): Promise<void> {\n const backupPath = `${this.cachePath}.backup`;\n\n try {\n const cacheExists = await this.cacheFileExists();\n if (cacheExists) {\n await fs.copyFile(this.cachePath, backupPath);\n }\n } catch (error) {\n // If backup creation fails, log warning but don't block write\n console.warn(`Warning: Could not create cache backup: ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n\n /**\n * [EARS-14] Restores cache from backup file.\n * Used when cache write operation fails to preserve previous state.\n */\n private async restoreCacheFromBackup(): Promise<void> {\n const backupPath = `${this.cachePath}.backup`;\n\n try {\n // Check if backup exists\n await fs.access(backupPath);\n\n // Restore backup to original cache location\n await fs.copyFile(backupPath, this.cachePath);\n\n // Clean up backup after restoration\n await fs.unlink(backupPath);\n } catch (error) {\n // If no backup exists or restoration fails, log but don't throw\n // (original cache is already gone at this point)\n console.warn(`Warning: Could not restore cache from backup: ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n\n /**\n * [EARS-14] Deletes backup file after successful cache write.\n */\n private async deleteCacheBackup(): Promise<void> {\n const backupPath = `${this.cachePath}.backup`;\n\n try {\n await fs.unlink(backupPath);\n } catch {\n // Backup might not exist or already deleted - this is fine\n }\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-7 to EARS-10] Calculates system-wide derived states for analytics and filtering.\n * \n * Applies DerivedDataProtocol algorithms to categorize tasks:\n * - isStalled: Tasks en 'active' sin executions >7 dĆ­as O en 'review' sin approval >3 dĆ­as\n * - isAtRisk: Tasks con prioridad 'critical' + 'paused' O 2+ blocking feedbacks\n * - needsClarification: Tasks con feedback tipo 'question' abierto\n * - isBlockedByDependency: Tasks con referencias a tasks no completadas\n * \n * @see derived_data_protocol.md for detailed algorithms\n * @see EARS-7, EARS-8, EARS-9, EARS-10 for requirements\n */\n async calculateDerivedStates(allRecords: AllRecords): Promise<DerivedStates> {\n const derivedStates: DerivedStates = {\n stalledTasks: [],\n atRiskTasks: [],\n needsClarificationTasks: [],\n blockedByDependencyTasks: []\n };\n\n const now = Date.now();\n const SEVEN_DAYS_MS = 7 * 24 * 60 * 60 * 1000;\n\n try {\n for (const task of allRecords.tasks) {\n const taskId = task.payload.id;\n const taskPayload = task.payload;\n\n // [EARS-8] Calculate isStalled\n // Tasks en 'active' sin executions por >7 dĆ­as O en 'review' sin approval por >3 dĆ­as\n if (taskPayload.status === 'active' || taskPayload.status === 'review') {\n const taskTimestamp = this.getTimestampFromId(taskId) * 1000; // Convert to milliseconds\n const daysSinceCreation = (now - taskTimestamp) / (24 * 60 * 60 * 1000);\n\n // Check executions para tasks activas\n const hasRecentExecution = allRecords.executions.some(exec => {\n if (exec.payload.taskId === taskId) {\n const execTimestamp = this.getTimestampFromId(exec.payload.id) * 1000; // Convert to milliseconds\n return (now - execTimestamp) < SEVEN_DAYS_MS;\n }\n return false;\n });\n\n const isStalled =\n (taskPayload.status === 'active' && daysSinceCreation > 7 && !hasRecentExecution) ||\n (taskPayload.status === 'review' && daysSinceCreation > 3);\n\n if (isStalled) {\n derivedStates.stalledTasks.push(taskId);\n }\n }\n\n // [EARS-9] Calculate isAtRisk\n // Tasks con prioridad 'critical' + 'paused' O 2+ blocking feedbacks abiertos\n const isCriticalPaused = taskPayload.priority === 'critical' && taskPayload.status === 'paused';\n const blockingFeedbackCount = allRecords.feedback.filter(feedback => {\n return feedback.payload.type === 'blocking' &&\n feedback.payload.status === 'open' &&\n feedback.payload.entityId === taskId;\n }).length;\n\n if (isCriticalPaused || blockingFeedbackCount >= 2) {\n derivedStates.atRiskTasks.push(taskId);\n }\n\n // [EARS-9] Calculate needsClarification\n // Tasks con feedback tipo 'question' abierto\n const hasOpenQuestion = allRecords.feedback.some(feedback => {\n return feedback.payload.type === 'question' &&\n feedback.payload.status === 'open' &&\n feedback.payload.entityId === taskId;\n });\n\n if (hasOpenQuestion) {\n derivedStates.needsClarificationTasks.push(taskId);\n }\n\n // [EARS-10] Calculate isBlockedByDependency\n // Tasks con referencias a otras tasks no completadas\n if (taskPayload.references && taskPayload.references.length > 0) {\n const hasBlockingDependency = taskPayload.references.some(ref => {\n if (ref.startsWith('task:')) {\n const dependencyId = ref.replace('task:', '');\n const dependencyTask = allRecords.tasks.find(t => t.payload.id === dependencyId);\n return dependencyTask &&\n dependencyTask.payload.status !== 'done' &&\n dependencyTask.payload.status !== 'archived';\n }\n return false;\n });\n\n if (hasBlockingDependency) {\n derivedStates.blockedByDependencyTasks.push(taskId);\n }\n }\n }\n\n return derivedStates;\n } catch (error) {\n console.warn(`calculateDerivedStates error: ${error instanceof Error ? error.message : String(error)}`);\n // Return empty derived states on error (graceful degradation)\n return derivedStates;\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 * @param taskPayload - Task payload (not full record with headers)\n */\n async calculateLastUpdated(\n taskPayload: TaskRecord,\n relatedRecords: AllRecords\n ): Promise<{ lastUpdated: number; lastActivityType: EnrichedTaskRecord['lastActivityType']; recentActivity: string }> {\n try {\n let lastUpdated = this.getTimestampFromId(taskPayload.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', `${taskPayload.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(taskPayload.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 === taskPayload.id || (f.payload.content && f.payload.content.includes(taskPayload.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 === taskPayload.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 && c.payload.relatedTasks.includes(taskPayload.id)) ||\n c.payload.description?.includes(taskPayload.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(taskPayload.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 /**\n * Enriches a task with complete intelligence layer (EARS 25-48)\n * \n * 11-step algorithm:\n * 1. Activity metadata (lastUpdated, lastActivityType, recentActivity)\n * 2. Signatures (author, lastModifier with timestamps)\n * 3. Assignments (assignedTo from feedback)\n * 4. Dependencies (dependsOn, blockedBy with typed references)\n * 5. Cycles (all cycles as array with id+title)\n * 6. Metrics (executionCount, blockingFeedbackCount, openQuestionCount)\n * 7. Time to resolution (for done tasks)\n * 8. Release info (isReleased, lastReleaseVersion from changelogs)\n * 9. Derived states (EARS-43: REUTILIZA pre-calculated derivedStates con O(1) lookup)\n * 10. Health score (0-100 using multi-factor algorithm)\n * 11. Time in current stage (days)\n * \n * @param task - Full GitGovTaskRecord with header.signatures\n * @param relatedRecords - All records for cross-referencing\n * @param derivedStateSets - Pre-calculated system-wide derived states as Sets for O(1) lookup (EARS-43)\n * @returns Promise<EnrichedTaskRecord> - Task with complete intelligence layer\n */\n async enrichTaskRecord(\n task: GitGovTaskRecord,\n relatedRecords: AllRecords,\n derivedStateSets: DerivedStateSets\n ): Promise<EnrichedTaskRecord> {\n // Step 1: Activity metadata\n const { lastUpdated, lastActivityType, recentActivity } = await this.calculateLastUpdated(task.payload, relatedRecords);\n\n // Step 2: Signatures (author, lastModifier) using signature_utils helpers\n const author = extractAuthor(task);\n const lastModifier = extractLastModifier(task);\n\n // Step 3: Assignments (assignedTo from feedback)\n const assignments = relatedRecords.feedback\n .filter(f => f.payload.entityId === task.payload.id && f.payload.type === 'assignment')\n .map(f => ({\n actorId: f.payload.assignee || 'unknown',\n assignedAt: this.getTimestampFromId(f.payload.id) * 1000 // ms\n }));\n\n // Step 4: Dependencies (dependsOn, blockedBy with typed references)\n // [EARS-37] Include ALL typed references (task:, pr:, issue:, file:, url:)\n // Filter out completed tasks, but preserve external references always\n const completedStatuses = ['done', 'archived', 'discarded'];\n const dependsOn = (task.payload.references || [])\n .filter(ref => {\n // Include all typed references (task:, pr:, issue:, file:, url:)\n const hasValidPrefix = ref.startsWith('task:') || ref.startsWith('pr:') ||\n ref.startsWith('issue:') || ref.startsWith('file:') ||\n ref.startsWith('url:');\n\n if (!hasValidPrefix) return false;\n\n // For task: references, filter out completed tasks\n if (ref.startsWith('task:')) {\n const refTaskId = ref.replace('task:', '');\n const refTask = relatedRecords.tasks.find(t => t.payload.id === refTaskId);\n return !refTask || !refTask.payload.status || !completedStatuses.includes(refTask.payload.status);\n }\n\n // For external references (pr:, issue:, file:, url:), always include\n return true;\n });\n\n const blockedBy = relatedRecords.tasks\n .filter(t => !completedStatuses.includes(t.payload.status))\n .filter(t => (t.payload.references || []).includes(`task:${task.payload.id}`))\n .map(t => `task:${t.payload.id}`);\n\n // Step 5: Cycles (all cycles as array with id+title)\n const cycles = (task.payload.cycleIds || [])\n .map(cycleId => {\n const cycle = relatedRecords.cycles.find(c => c.payload.id === cycleId);\n return cycle ? { id: cycleId, title: cycle.payload.title } : null;\n })\n .filter((c): c is { id: string; title: string } => c !== null);\n\n // Step 6: Metrics\n const executionCount = relatedRecords.executions.filter(e => e.payload.taskId === task.payload.id).length;\n const blockingFeedbackCount = relatedRecords.feedback.filter(\n f => f.payload.entityId === task.payload.id && f.payload.type === 'blocking' && f.payload.status === 'open'\n ).length;\n const openQuestionCount = relatedRecords.feedback.filter(\n f => f.payload.entityId === task.payload.id && f.payload.type === 'question' && f.payload.status === 'open'\n ).length;\n\n // Step 7: Time to resolution (for done tasks)\n const timeToResolution: number | undefined = task.payload.status === 'done'\n ? (lastUpdated - this.getTimestampFromId(task.payload.id) * 1000) / (1000 * 60 * 60) // horas\n : undefined;\n\n // Step 8: Release info (from changelogs)\n const releaseChangelogs = relatedRecords.changelogs.filter(cl =>\n cl.payload.relatedTasks.includes(task.payload.id)\n );\n const isReleased = releaseChangelogs.length > 0;\n const lastReleaseVersion: string | undefined = isReleased\n ? (releaseChangelogs[releaseChangelogs.length - 1]?.payload.version || undefined)\n : undefined;\n\n // Step 9: Derived states (EARS-43: Usar pre-calculated derivedStates con O(1) lookup)\n // NO recalcular - buscar en los Sets de derivedStateSets pre-calculados\n const taskId = task.payload.id;\n const isStalled = derivedStateSets.stalledTasks.has(taskId);\n const isAtRisk = derivedStateSets.atRiskTasks.has(taskId);\n const needsClarification = derivedStateSets.needsClarificationTasks.has(taskId);\n const isBlockedByDependency = derivedStateSets.blockedByDependencyTasks.has(taskId);\n\n // Calculate daysSinceLastUpdate for health score and timeInCurrentStage\n const daysSinceLastUpdate = (Date.now() - lastUpdated) / (1000 * 60 * 60 * 24);\n\n // Step 10: Health score (0-100)\n let healthScore = 100;\n\n // Status health (30 points)\n if (task.payload.status === 'done') healthScore -= 0; // Perfect\n else if (task.payload.status === 'active') healthScore -= 5;\n else if (task.payload.status === 'ready') healthScore -= 10;\n else if (task.payload.status === 'review') healthScore -= 15;\n else if (task.payload.status === 'paused') healthScore -= 25;\n else healthScore -= 30; // draft, archived, discarded\n\n // Feedback health (30 points)\n healthScore -= Math.min(blockingFeedbackCount * 10, 30);\n\n // Executions health (20 points)\n if (executionCount === 0 && task.payload.status === 'active') healthScore -= 20;\n else if (executionCount < 2) healthScore -= 10;\n\n // Time health (20 points)\n if (daysSinceLastUpdate > 30) healthScore -= 20;\n else if (daysSinceLastUpdate > 14) healthScore -= 15;\n else if (daysSinceLastUpdate > 7) healthScore -= 10;\n\n healthScore = Math.max(0, Math.min(100, healthScore));\n\n // Step 11: Time in current stage (days)\n const timeInCurrentStage = daysSinceLastUpdate;\n\n // Build enriched record with conditional optional properties\n const enrichedRecord: EnrichedTaskRecord = {\n ...task.payload,\n derivedState: {\n isStalled,\n isAtRisk,\n needsClarification,\n isBlockedByDependency,\n healthScore,\n timeInCurrentStage\n },\n relationships: {\n ...(author && { author }),\n ...(lastModifier && { lastModifier }),\n assignedTo: assignments,\n dependsOn,\n blockedBy,\n cycles\n },\n metrics: {\n executionCount,\n blockingFeedbackCount,\n openQuestionCount,\n ...(timeToResolution !== undefined && { timeToResolution })\n },\n release: {\n isReleased,\n ...(lastReleaseVersion !== undefined && { lastReleaseVersion })\n },\n lastUpdated,\n lastActivityType,\n ...(recentActivity && { recentActivity })\n };\n\n return enrichedRecord;\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","/**\n * Signature Extraction Utilities\n * \n * Generic helpers for extracting metadata from EmbeddedMetadataRecord signatures.\n * These utilities work with any record type and implement graceful degradation\n * for records without signatures.\n * \n * @module signature_utils\n */\n\nimport type { EmbeddedMetadataRecord } from '../types/embedded.types';\nimport type { GitGovRecordPayload } from '../types/common.types';\n\n/**\n * Result type for author/lastModifier extraction with timestamp.\n */\nexport type SignatureInfo = {\n actorId: string;\n timestamp: number;\n};\n\n/**\n * Extracts the author (first signer) from a record with timestamp.\n * \n * The author is defined as the actor who created the first signature in the record.\n * This represents the original creator of the record.\n * \n * @template T - The payload type of the record\n * @param record - The GitGovernance record with embedded metadata\n * @returns SignatureInfo with actorId and timestamp, or undefined if no signatures\n * \n * @example\n * ```typescript\n * const author = extractAuthor(taskRecord);\n * if (author) {\n * console.log(`Created by ${author.actorId} at ${author.timestamp}`);\n * }\n * ```\n */\nexport function extractAuthor<T extends GitGovRecordPayload>(\n record: EmbeddedMetadataRecord<T>\n): SignatureInfo | undefined {\n const signatures = record.header.signatures;\n\n // Graceful degradation: return undefined for missing/empty signatures\n if (!signatures || signatures.length === 0) {\n return undefined;\n }\n\n const firstSignature = signatures[0];\n return {\n actorId: firstSignature.keyId,\n timestamp: firstSignature.timestamp\n };\n}\n\n/**\n * Extracts the last modifier (last signer) from a record with timestamp.\n * \n * The last modifier is the actor who added the most recent signature.\n * For records with only one signature, this will be the same as the author.\n * \n * @template T - The payload type of the record\n * @param record - The GitGovernance record with embedded metadata\n * @returns SignatureInfo with actorId and timestamp, or undefined if no signatures\n * \n * @example\n * ```typescript\n * const lastModifier = extractLastModifier(taskRecord);\n * if (lastModifier) {\n * console.log(`Last modified by ${lastModifier.actorId} at ${lastModifier.timestamp}`);\n * }\n * ```\n */\nexport function extractLastModifier<T extends GitGovRecordPayload>(\n record: EmbeddedMetadataRecord<T>\n): SignatureInfo | undefined {\n const signatures = record.header.signatures;\n\n // Graceful degradation: return undefined for missing/empty signatures\n if (!signatures || signatures.length === 0) {\n return undefined;\n }\n\n const lastSignature = signatures[signatures.length - 1];\n if (!lastSignature) {\n return undefined;\n }\n\n return {\n actorId: lastSignature.keyId,\n timestamp: lastSignature.timestamp\n };\n}\n\n/**\n * Extracts all unique contributors (signers) from a record.\n * \n * Returns an array of unique actor IDs (keyIds) who have signed the record.\n * Useful for collaboration analysis and determining who has worked on a record.\n * \n * @template T - The payload type of the record\n * @param record - The GitGovernance record with embedded metadata\n * @returns Array of unique actor IDs (keyIds), empty array if no signatures\n * \n * @example\n * ```typescript\n * const contributors = extractContributors(taskRecord);\n * console.log(`${contributors.length} people worked on this task`);\n * ```\n * \n * @performance O(n) where n = number of signatures (typically 1-3, max ~10)\n */\nexport function extractContributors<T extends GitGovRecordPayload>(\n record: EmbeddedMetadataRecord<T>\n): string[] {\n const signatures = record.header.signatures;\n\n // Graceful degradation: return empty array for missing/empty signatures\n if (!signatures || signatures.length === 0) {\n return [];\n }\n\n // Use Set for deduplication, then convert to array\n const uniqueKeyIds = new Set<string>();\n for (const sig of signatures) {\n uniqueKeyIds.add(sig.keyId);\n }\n\n return Array.from(uniqueKeyIds);\n}\n\n/**\n * Extracts the timestamp of the last signature in a record.\n * \n * This represents when the record was last modified. Useful for sorting\n * and determining activity recency.\n * \n * @template T - The payload type of the record\n * @param record - The GitGovernance record with embedded metadata\n * @returns Unix timestamp of the last signature, or undefined if no signatures\n * \n * @example\n * ```typescript\n * const lastActivity = extractLastSignatureTimestamp(taskRecord);\n * if (lastActivity) {\n * const daysAgo = (Date.now() - lastActivity) / (1000 * 60 * 60 * 24);\n * console.log(`Last activity ${daysAgo} days ago`);\n * }\n * ```\n */\nexport function extractLastSignatureTimestamp<T extends GitGovRecordPayload>(\n record: EmbeddedMetadataRecord<T>\n): number | undefined {\n const signatures = record.header.signatures;\n\n // Graceful degradation: return undefined for missing/empty signatures\n if (!signatures || signatures.length === 0) {\n return undefined;\n }\n\n const lastSignature = signatures[signatures.length - 1];\n return lastSignature?.timestamp;\n}\n\n/**\n * Gets the total count of signatures in a record.\n * \n * Useful for determining how many times a record has been modified\n * or how many actors have contributed to it.\n * \n * @template T - The payload type of the record\n * @param record - The GitGovernance record with embedded metadata\n * @returns Number of signatures, or 0 if no signatures\n * \n * @example\n * ```typescript\n * const signatureCount = getSignatureCount(taskRecord);\n * console.log(`Record has been signed ${signatureCount} times`);\n * ```\n */\nexport function getSignatureCount<T extends GitGovRecordPayload>(\n record: EmbeddedMetadataRecord<T>\n): number {\n const signatures = record.header.signatures;\n\n // Graceful degradation: return 0 for missing/empty signatures\n if (!signatures || signatures.length === 0) {\n return 0;\n }\n\n return signatures.length;\n}\n\n","export * from \"./checksum\";\nexport * from \"./signatures\";\n","import { promises as fs, existsSync } from 'fs';\nimport * as pathUtils from 'path';\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 { GitModule } from '../../git';\nimport { createTaskRecord } from '../../factories/task_factory';\nimport { createCycleRecord } from '../../factories/cycle_factory';\nimport { getImportMetaUrl } from '../../utils/esm_helper';\nimport { createRequire } from 'module';\nimport { fileURLToPath } from 'url';\nimport { createLogger } from \"../../logger\";\nconst logger = createLogger(\"[ProjectAdapter] \");\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 gitModule: GitModule;\n\n // Infrastructure Layer (REQUIRED)\n configManager: ConfigManager;\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 gitModule: GitModule;\n private configManager: ConfigManager;\n\n constructor(dependencies: ProjectAdapterDependencies) {\n this.identityAdapter = dependencies.identityAdapter;\n this.backlogAdapter = dependencies.backlogAdapter;\n this.gitModule = dependencies.gitModule;\n this.configManager = dependencies.configManager;\n }\n\n // ===== FASE 1: BOOTSTRAP CORE METHODS =====\n\n /**\n * [EARS-1] Initializes complete GitGovernance project with 4-module orchestration (Identity, Backlog, WorkflowMethodology, SyncModule) 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 state: {\n branch: \"gitgov-state\",\n sync: {\n strategy: \"manual\",\n maxRetries: 3,\n pushIntervalSeconds: 30,\n batchIntervalSeconds: 60\n },\n defaults: {\n pullScheduler: {\n defaultIntervalSeconds: 30,\n defaultEnabled: false,\n defaultContinueOnNetworkError: true,\n defaultStopOnConflict: false\n },\n fileWatcher: {\n defaultDebounceMs: 300,\n defaultIgnoredPatterns: [\"*.tmp\", \".DS_Store\", \"*.swp\"]\n }\n }\n }\n };\n\n await this.persistConfiguration(config, gitgovPath);\n\n // 6.5. Lazy State Branch Setup (EARS-4, EARS-13)\n // gitgov-state branch is NOT created here - it will be created lazily on first \"sync push\"\n // This allows init to work in repos without remote or without commits\n const hasRemote = await this.gitModule.isRemoteConfigured(\"origin\");\n const currentBranch = await this.gitModule.getCurrentBranch();\n const hasCommits = await this.gitModule.branchExists(currentBranch);\n\n if (!hasRemote || !hasCommits) {\n const warnings: string[] = [];\n if (!hasCommits) {\n warnings.push(\"No commits in current branch\");\n }\n if (!hasRemote) {\n warnings.push(\"No remote 'origin' configured\");\n }\n console.warn(`āš ļø ${warnings.join(\", \")}.`);\n console.warn(` State sync will be available after 'git remote add origin <url>' and first commit.`);\n console.warn(` Run 'gitgov sync push' when ready to enable multi-machine collaboration.`);\n }\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 (requires config.json, not just .gitgov/ directory)\n const gitgovPath = pathUtils.join(targetPath, '.gitgov');\n const configPath = pathUtils.join(gitgovPath, 'config.json');\n let isAlreadyInitialized = false;\n try {\n await fs.access(configPath);\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 // config.json doesn't exist, so not fully initialized\n // Note: An empty .gitgov/ directory from bootstrap is OK to init over\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 const targetPrompt = pathUtils.join(gitgovPath, 'gitgov');\n const potentialSources: string[] = [];\n\n // 1ļøāƒ£ Development scenario: search in monorepo prompts/ (package root)\n potentialSources.push(\n pathUtils.join(process.cwd(), 'prompts/gitgov_agent_prompt.md'),\n );\n\n // 2ļøāƒ£ NPM installation: use require.resolve to find @gitgov/core package\n try {\n // Get import.meta.url via helper (separated to avoid Jest parse errors)\n const metaUrl = getImportMetaUrl();\n\n if (metaUrl) {\n const require = createRequire(metaUrl);\n const pkgJsonPath = require.resolve('@gitgov/core/package.json');\n const pkgRoot = pathUtils.dirname(pkgJsonPath);\n const promptPath = pathUtils.join(pkgRoot, 'prompts/gitgov_agent_prompt.md');\n potentialSources.push(promptPath);\n }\n } catch {\n // require.resolve failed - continue with other sources\n }\n\n // 3ļøāƒ£ Build fallback: relative to compiled __dirname\n try {\n // Get import.meta.url via helper (separated to avoid Jest parse errors)\n const metaUrl = getImportMetaUrl();\n\n if (metaUrl) {\n const __filename = fileURLToPath(metaUrl);\n const __dirname = pathUtils.dirname(__filename);\n const promptPath = pathUtils.resolve(__dirname, '../../prompts/gitgov_agent_prompt.md');\n potentialSources.push(promptPath);\n }\n } catch {\n // import.meta not available - continue with other sources\n }\n\n // šŸ” Find and copy the first accessible file\n for (const source of potentialSources) {\n try {\n await fs.access(source);\n await fs.copyFile(source, targetPrompt);\n logger.debug(`šŸ“‹ @gitgov agent prompt copied to .gitgov/gitgov\\n`);\n return;\n } catch {\n // Source not accessible, try next one\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 syncStatus: {\n status: 'synced' as const // Initialize as synced (no pending changes at init)\n }\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# Ignore entire .gitgov/ directory (state lives in gitgov-state branch)\n.gitgov/\n\n# Exception: Don't ignore .gitgov/.gitignore itself (meta!)\n!.gitgov/.gitignore\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('# GitGovernance')) {\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","/**\n * ESM Helper - Provides access to import.meta for use in ESM contexts\n * \n * This file is separated because import.meta cannot be used in Jest/CommonJS tests.\n * Jest will mock this module when running tests.\n */\n\n/**\n * Get the current module URL (import.meta.url)\n * Returns null in non-ESM contexts (like Jest tests)\n */\nexport function getImportMetaUrl(): string | null {\n try {\n return import.meta.url;\n } catch {\n return null;\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 \"./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 function createWorkflowMethodologyConfig(\n payload: Partial<WorkflowMethodologyRecord>\n): 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: 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==', // Dummy 88-char base64 for testing (86 chars + ==, matches Ed25519 signature format)\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 = createEmbeddedMetadataRecord(actorPayload);\n * ```\n */\nexport function createEmbeddedMetadataRecord<T extends GitGovRecordPayload>(\n payload: T,\n options: CreateEmbeddedMetadataOptions = {}\n): 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","/**\n * GitModule - Low-level Git Operations\n * \n * This module provides a business-agnostic abstraction layer for Git operations.\n * \n * @module git\n */\n\nexport { GitModule } from './git_module.js';\n\nexport type {\n GitModuleDependencies,\n ExecOptions,\n ExecResult,\n GetCommitHistoryOptions,\n CommitInfo,\n ChangedFile,\n CommitAuthor,\n} from './types.js';\n\nexport {\n GitError,\n GitCommandError,\n BranchNotFoundError,\n FileNotFoundError,\n MergeConflictError,\n RebaseConflictError,\n RebaseNotInProgressError,\n} from './errors.js';\n\n","/**\n * Custom Error Classes for GitModule\n * \n * These errors provide typed exceptions for better error handling\n * and diagnostics in the Git module operations.\n */\n\n/**\n * Base error class for all Git-related errors\n */\nexport class GitError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'GitError';\n Object.setPrototypeOf(this, GitError.prototype);\n }\n}\n\n/**\n * Error thrown when a Git command fails\n */\nexport class GitCommandError extends GitError {\n public readonly stderr: string;\n public readonly stdout?: string | undefined;\n public readonly command?: string | undefined;\n\n constructor(message: string, stderr: string = '', command?: string | undefined, stdout?: string) {\n super(message);\n this.name = 'GitCommandError';\n this.stderr = stderr;\n this.stdout = stdout;\n this.command = command;\n Object.setPrototypeOf(this, GitCommandError.prototype);\n }\n}\n\n/**\n * Error thrown when a branch does not exist\n */\nexport class BranchNotFoundError extends GitError {\n public readonly branchName: string;\n\n constructor(branchName: string) {\n super(`Branch not found: ${branchName}`);\n this.name = 'BranchNotFoundError';\n this.branchName = branchName;\n Object.setPrototypeOf(this, BranchNotFoundError.prototype);\n }\n}\n\n/**\n * Error thrown when a file does not exist in a commit\n */\nexport class FileNotFoundError extends GitError {\n public readonly filePath: string;\n public readonly commitHash: string;\n\n constructor(filePath: string, commitHash: string) {\n super(`File not found: ${filePath} in commit ${commitHash}`);\n this.name = 'FileNotFoundError';\n this.filePath = filePath;\n this.commitHash = commitHash;\n Object.setPrototypeOf(this, FileNotFoundError.prototype);\n }\n}\n\n/**\n * Error thrown when a merge conflict occurs\n */\nexport class MergeConflictError extends GitError {\n public readonly conflictedFiles: string[];\n\n constructor(conflictedFiles: string[]) {\n super(`Merge conflict detected in ${conflictedFiles.length} file(s)`);\n this.name = 'MergeConflictError';\n this.conflictedFiles = conflictedFiles;\n Object.setPrototypeOf(this, MergeConflictError.prototype);\n }\n}\n\n/**\n * Error thrown when a rebase conflict occurs\n */\nexport class RebaseConflictError extends GitError {\n public readonly conflictedFiles: string[];\n\n constructor(conflictedFiles: string[]) {\n super(`Rebase conflict detected in ${conflictedFiles.length} file(s)`);\n this.name = 'RebaseConflictError';\n this.conflictedFiles = conflictedFiles;\n Object.setPrototypeOf(this, RebaseConflictError.prototype);\n }\n}\n\n/**\n * Error thrown when trying to continue/abort a rebase that is not in progress\n */\nexport class RebaseNotInProgressError extends GitError {\n constructor() {\n super('No rebase in progress');\n this.name = 'RebaseNotInProgressError';\n Object.setPrototypeOf(this, RebaseNotInProgressError.prototype);\n }\n}\n\n/**\n * Error thrown when trying to create a branch that already exists\n */\nexport class BranchAlreadyExistsError extends GitError {\n public readonly branchName: string;\n\n constructor(branchName: string) {\n super(`Branch already exists: ${branchName}`);\n this.name = 'BranchAlreadyExistsError';\n this.branchName = branchName;\n Object.setPrototypeOf(this, BranchAlreadyExistsError.prototype);\n }\n}\n\n","/**\n * GitModule - Low-level Git Operations\n * \n * This module provides a business-agnostic abstraction layer for interacting\n * with the local Git repository. It exposes semantic methods instead of raw\n * Git commands, with comprehensive error handling and type safety.\n * \n * @module git_module\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport type {\n GitModuleDependencies,\n ExecOptions,\n ExecResult,\n GetCommitHistoryOptions,\n CommitInfo,\n ChangedFile,\n CommitAuthor,\n} from './types';\nimport {\n GitCommandError,\n BranchNotFoundError,\n BranchAlreadyExistsError,\n FileNotFoundError,\n MergeConflictError,\n RebaseConflictError,\n RebaseNotInProgressError,\n} from './errors';\nimport { createLogger } from \"../logger/logger\";\n\nconst logger = createLogger(\"[GitModule] \");\n\n/**\n * GitModule class providing low-level Git operations\n * \n * All operations are async and use dependency injection for testability.\n * Errors are transformed into typed exceptions for better handling.\n */\nexport class GitModule {\n private repoRoot: string;\n private execCommand: (\n command: string,\n args: string[],\n options?: ExecOptions\n ) => Promise<ExecResult>;\n\n /**\n * Creates a new GitModule instance\n * \n * @param dependencies - Required dependencies (execCommand) and optional config (repoRoot)\n * @throws Error if execCommand is not provided\n */\n constructor(dependencies: GitModuleDependencies) {\n if (!dependencies.execCommand) {\n throw new Error('execCommand is required for GitModule');\n }\n\n this.execCommand = dependencies.execCommand;\n this.repoRoot = dependencies.repoRoot || '';\n }\n\n // ═══════════════════════════════════════════════════════════════════════\n // PRIVATE HELPERS\n // ═══════════════════════════════════════════════════════════════════════\n\n /**\n * Ensures that repoRoot is set, auto-detecting it if necessary\n * \n * @returns Path to repository root\n * @throws GitCommandError if not in a Git repository\n */\n private async ensureRepoRoot(): Promise<string> {\n if (!this.repoRoot) {\n const result = await this.execCommand('git', ['rev-parse', '--show-toplevel']);\n if (result.exitCode !== 0) {\n throw new GitCommandError('Not in a Git repository', result.stderr);\n }\n this.repoRoot = result.stdout.trim();\n }\n return this.repoRoot;\n }\n\n /**\n * Executes a Git command with standardized error handling\n * \n * @param args - Git command arguments\n * @param options - Execution options\n * @returns Command result\n * @throws GitCommandError if command fails\n */\n private async execGit(args: string[], options?: ExecOptions): Promise<ExecResult> {\n const cwd = options?.cwd || await this.ensureRepoRoot();\n const result = await this.execCommand('git', args, { ...options, cwd });\n return result;\n }\n\n // ═══════════════════════════════════════════════════════════════════════\n // INITIALIZATION\n // ═══════════════════════════════════════════════════════════════════════\n\n /**\n * Initializes a new Git repository in the current directory\n * \n * Creates the `.git/` directory structure and sets up initial configuration.\n * Useful for testing and for commands that require a fresh repository.\n * \n * @throws GitCommandError if directory is already a Git repository\n * \n * @example\n * await gitModule.init();\n * // Repository initialized with default branch (main or master)\n */\n async init(): Promise<void> {\n const cwd = this.repoRoot || process.cwd();\n\n // Check if already in a Git repository\n try {\n const checkResult = await this.execCommand('git', ['rev-parse', '--git-dir'], {\n cwd,\n });\n\n if (checkResult.exitCode === 0) {\n throw new GitCommandError(\n 'Directory is already a Git repository',\n `Git directory exists at ${checkResult.stdout.trim()}`\n );\n }\n } catch (error) {\n // If not a repo, this is what we want - continue with init\n if (error instanceof GitCommandError && error.message === 'Directory is already a Git repository') {\n throw error;\n }\n // Other errors mean it's not a repo, which is good\n }\n\n // Initialize the repository\n const result = await this.execCommand('git', ['init'], {\n cwd,\n });\n\n if (result.exitCode !== 0) {\n throw new GitCommandError('Failed to initialize Git repository', result.stderr);\n }\n\n // Update repoRoot if it wasn't set\n if (!this.repoRoot) {\n const rootResult = await this.execCommand('git', ['rev-parse', '--show-toplevel'], { cwd });\n if (rootResult.exitCode === 0) {\n this.repoRoot = rootResult.stdout.trim();\n }\n }\n }\n\n // ═══════════════════════════════════════════════════════════════════════\n // READ OPERATIONS\n // ═══════════════════════════════════════════════════════════════════════\n\n /**\n * Returns the absolute path to the current Git repository root\n * \n * @returns Repository root path\n * @throws GitCommandError if not in a Git repository\n * \n * @example\n * const repoRoot = await gitModule.getRepoRoot();\n * // => \"/home/user/my-project\"\n */\n async getRepoRoot(): Promise<string> {\n return await this.ensureRepoRoot();\n }\n\n /**\n * Returns the name of the current branch (HEAD)\n * \n * @returns Current branch name\n * @throws GitCommandError if in detached HEAD state or other error\n * \n * @example\n * const branch = await gitModule.getCurrentBranch();\n * // => \"main\"\n */\n async getCurrentBranch(): Promise<string> {\n const result = await this.execGit(['rev-parse', '--abbrev-ref', 'HEAD']);\n\n if (result.exitCode !== 0) {\n // Fallback: Try reading .git/HEAD directly (works for orphan branches)\n try {\n const repoRoot = await this.ensureRepoRoot();\n const headPath = path.join(repoRoot, '.git', 'HEAD');\n const headContent = fs.readFileSync(headPath, 'utf-8').trim();\n\n if (headContent.startsWith('ref: refs/heads/')) {\n return headContent.replace('ref: refs/heads/', '');\n }\n } catch (fallbackError) {\n // Fallback failed, throw original error\n }\n\n throw new GitCommandError('Failed to get current branch', result.stderr);\n }\n\n const branch = result.stdout.trim();\n\n if (branch === 'HEAD') {\n throw new GitCommandError('In detached HEAD state', '');\n }\n\n return branch;\n }\n\n /**\n * Get commit hash for a given reference (branch, tag, HEAD, etc.)\n * \n * Used by test helpers and sync operations to get commit SHAs.\n * Returns the full 40-character SHA-1 hash of the commit.\n * \n * @param ref Git reference (default: \"HEAD\"). Can be:\n * - \"HEAD\" for current commit\n * - Branch name (e.g., \"main\", \"gitgov-state\")\n * - Tag name (e.g., \"v1.0.0\")\n * - Commit hash (returns the same hash)\n * - Relative refs (e.g., \"HEAD~1\", \"main^\")\n * @returns Commit SHA hash (full 40-character hash)\n * @throws GitCommandError if ref does not exist\n * \n * @example\n * const headHash = await git.getCommitHash(\"HEAD\");\n * // => \"a1b2c3d4e5f6...\"\n * \n * const mainHash = await git.getCommitHash(\"main\");\n * // => \"f6e5d4c3b2a1...\"\n * \n * const parentHash = await git.getCommitHash(\"HEAD~1\");\n * // => \"9876543210ab...\"\n */\n async getCommitHash(ref: string = \"HEAD\"): Promise<string> {\n const result = await this.execGit([\"rev-parse\", ref]);\n\n if (result.exitCode !== 0) {\n throw new GitCommandError(\n `Failed to get commit hash for ref \"${ref}\"`,\n result.stderr\n );\n }\n\n const hash = result.stdout.trim();\n logger.debug(`Got commit hash for ${ref}: ${hash.substring(0, 8)}...`);\n return hash;\n }\n\n /**\n * Set a Git configuration value.\n * Used for configuring repository settings like user.name, core.editor, etc.\n *\n * [EARS-51, EARS-52]\n *\n * @param key - Configuration key (e.g., \"user.name\", \"core.editor\")\n * @param value - Configuration value\n * @param scope - Configuration scope: \"local\" (default), \"global\", or \"system\"\n * @throws GitCommandError if configuration fails\n *\n * @example\n * ```typescript\n * // Set local config (repository-specific)\n * await git.setConfig('core.editor', 'vim');\n *\n * // Set global config (user-wide)\n * await git.setConfig('user.name', 'John Doe', 'global');\n *\n * // Set system config (machine-wide, requires permissions)\n * await git.setConfig('credential.helper', 'cache', 'system');\n * ```\n */\n async setConfig(\n key: string,\n value: string,\n scope: 'local' | 'global' | 'system' = 'local'\n ): Promise<void> {\n logger.debug(`Setting Git config: ${key} = ${value} (scope: ${scope})`);\n\n const args = ['config'];\n\n // Add scope flag\n if (scope === 'global') {\n args.push('--global');\n } else if (scope === 'system') {\n args.push('--system');\n } else {\n args.push('--local');\n }\n\n args.push(key, value);\n\n const result = await this.execGit(args);\n\n if (result.exitCode !== 0) {\n throw new GitCommandError(\n `Failed to set Git config ${key} to ${value}`,\n result.stderr\n );\n }\n\n logger.debug(`Git config ${key} set successfully`);\n }\n\n /**\n * Finds the most recent common ancestor between two branches\n * \n * @param branchA - First branch name\n * @param branchB - Second branch name\n * @returns Commit hash of the merge base\n * @throws BranchNotFoundError if either branch does not exist\n * @throws GitCommandError if operation fails\n * \n * @example\n * const mergeBase = await gitModule.getMergeBase(\"main\", \"feature\");\n * // => \"a1b2c3d4e5f6...\"\n */\n async getMergeBase(branchA: string, branchB: string): Promise<string> {\n // Verify both branches exist\n if (!(await this.branchExists(branchA))) {\n throw new BranchNotFoundError(branchA);\n }\n if (!(await this.branchExists(branchB))) {\n throw new BranchNotFoundError(branchB);\n }\n\n const result = await this.execGit(['merge-base', branchA, branchB]);\n\n if (result.exitCode !== 0) {\n throw new GitCommandError(\n `Failed to find merge base between ${branchA} and ${branchB}`,\n result.stderr\n );\n }\n\n return result.stdout.trim();\n }\n\n /**\n * Returns a list of files changed between two commits\n * \n * @param fromCommit - Source commit or reference\n * @param toCommit - Target commit or reference\n * @param pathFilter - Optional path filter (e.g., \".gitgov/\")\n * @returns Array of changed files with their status\n * @throws GitCommandError if operation fails\n * \n * @example\n * const changes = await gitModule.getChangedFiles(\"HEAD~1\", \"HEAD\", \".gitgov/\");\n * // => [{ status: \"M\", file: \".gitgov/tasks/123.json\" }]\n */\n async getChangedFiles(\n fromCommit: string,\n toCommit: string,\n pathFilter: string\n ): Promise<ChangedFile[]> {\n const args = [\n 'diff',\n '--name-status',\n `${fromCommit}..${toCommit}`,\n '--',\n pathFilter,\n ];\n\n const result = await this.execGit(args);\n\n if (result.exitCode !== 0) {\n throw new GitCommandError('Failed to get changed files', result.stderr);\n }\n\n // Parse output: \"M\\tfile.txt\\nA\\tfile2.txt\"\n return result.stdout\n .trim()\n .split('\\n')\n .filter((line) => line.length > 0)\n .map((line) => {\n const parts = line.split('\\t');\n if (parts.length < 2) {\n throw new GitCommandError('Invalid git diff output format', line);\n }\n return {\n status: parts[0]! as 'A' | 'M' | 'D',\n file: parts[1]!,\n };\n });\n }\n\n /**\n * Get list of staged files (in staging area / index)\n * \n * Used during conflict resolution to identify which files the user resolved and staged.\n * \n * @returns Array of file paths that are currently staged\n * @throws GitCommandError if operation fails\n * \n * @example\n * // After user resolves conflict and does: git add .gitgov/tasks/123.json\n * const staged = await gitModule.getStagedFiles();\n * // => [\".gitgov/tasks/123.json\"]\n */\n async getStagedFiles(): Promise<string[]> {\n const args = ['diff', '--cached', '--name-only'];\n\n const result = await this.execGit(args);\n\n if (result.exitCode !== 0) {\n throw new GitCommandError('Failed to get staged files', result.stderr);\n }\n\n // Parse output: \"file1.txt\\nfile2.txt\\n\"\n const files = result.stdout\n .trim()\n .split('\\n')\n .filter((line) => line.length > 0);\n\n return files;\n }\n\n /**\n * Retrieves the content of a file at a specific point in history\n * \n * @param commitHash - Commit hash\n * @param filePath - File path relative to repository root\n * @returns File content as string\n * @throws FileNotFoundError if file doesn't exist in that commit\n * @throws GitCommandError if operation fails\n * \n * @example\n * const content = await gitModule.getFileContent(\"abc123\", \".gitgov/config.json\");\n * // => '{\"version\": \"1.0.0\"}'\n */\n async getFileContent(commitHash: string, filePath: string): Promise<string> {\n const result = await this.execGit(['show', `${commitHash}:${filePath}`]);\n\n if (result.exitCode !== 0) {\n // Check if error is due to file not existing\n if (result.stderr.includes('does not exist') || result.stderr.includes('exists on disk, but not in')) {\n throw new FileNotFoundError(filePath, commitHash);\n }\n throw new GitCommandError(`Failed to get file content for ${filePath}`, result.stderr);\n }\n\n return result.stdout;\n }\n\n /**\n * Retrieves the commit history for a branch\n * \n * @param branch - Branch name\n * @param options - Filtering and formatting options\n * @returns Array of commits ordered from newest to oldest\n * @throws GitCommandError if operation fails\n * \n * @example\n * const history = await gitModule.getCommitHistory(\"main\", { maxCount: 10 });\n * // => [{ hash: \"abc123\", message: \"Initial commit\", author: \"User <email>\", date: \"2025-01-01T00:00:00Z\" }]\n */\n async getCommitHistory(\n branch: string,\n options?: GetCommitHistoryOptions\n ): Promise<CommitInfo[]> {\n const args = ['log', branch, '--format=%H|%s|%an <%ae>|%aI'];\n\n if (options?.maxCount) {\n args.push(`--max-count=${options.maxCount}`);\n }\n\n if (options?.pathFilter) {\n args.push('--', options.pathFilter);\n }\n\n const result = await this.execGit(args);\n\n if (result.exitCode !== 0) {\n throw new GitCommandError(`Failed to get commit history for ${branch}`, result.stderr);\n }\n\n if (!result.stdout.trim()) {\n return [];\n }\n\n // Parse output: \"hash|message|author|date\"\n return result.stdout\n .trim()\n .split('\\n')\n .map((line) => {\n const parts = line.split('|');\n if (parts.length < 4) {\n throw new GitCommandError('Invalid git log output format', line);\n }\n return {\n hash: parts[0]!,\n message: parts[1]!,\n author: parts[2]!,\n date: parts[3]!,\n };\n });\n }\n\n /**\n * Retrieves commit history in a specific range\n * \n * @param fromHash - Starting commit hash (exclusive)\n * @param toHash - Ending commit hash (inclusive)\n * @param options - Filtering and formatting options\n * @returns Array of commits in the specified range\n * @throws GitCommandError if either commit doesn't exist\n * \n * @example\n * const commits = await gitModule.getCommitHistoryRange(\"abc123\", \"def456\");\n * // => [{ hash: \"def456\", ... }, { hash: \"cba321\", ... }]\n */\n async getCommitHistoryRange(\n fromHash: string,\n toHash: string,\n options?: GetCommitHistoryOptions\n ): Promise<CommitInfo[]> {\n const args = ['log', `${fromHash}..${toHash}`, '--format=%H|%s|%an <%ae>|%aI'];\n\n if (options?.maxCount) {\n args.push(`--max-count=${options.maxCount}`);\n }\n\n if (options?.pathFilter) {\n args.push('--', options.pathFilter);\n }\n\n const result = await this.execGit(args);\n\n if (result.exitCode !== 0) {\n throw new GitCommandError(\n `Failed to get commit history range ${fromHash}..${toHash}`,\n result.stderr\n );\n }\n\n if (!result.stdout.trim()) {\n return [];\n }\n\n // Parse output: \"hash|message|author|date\"\n return result.stdout\n .trim()\n .split('\\n')\n .map((line) => {\n const parts = line.split('|');\n if (parts.length < 4) {\n throw new GitCommandError('Invalid git log output format', line);\n }\n return {\n hash: parts[0]!,\n message: parts[1]!,\n author: parts[2]!,\n date: parts[3]!,\n };\n });\n }\n\n /**\n * Retrieves the full commit message for a specific commit\n * \n * @param commitHash - Commit hash\n * @returns Full commit message as string\n * @throws GitCommandError if commit doesn't exist\n * \n * @example\n * const message = await gitModule.getCommitMessage(\"abc123\");\n * // => \"feat: add new feature\\n\\nDetailed description...\"\n */\n async getCommitMessage(commitHash: string): Promise<string> {\n const result = await this.execGit(['show', commitHash, '--format=%B', '--no-patch']);\n\n if (result.exitCode !== 0) {\n throw new GitCommandError(`Failed to get commit message for ${commitHash}`, result.stderr);\n }\n\n return result.stdout.trim();\n }\n\n /**\n * Checks if there are uncommitted changes in the working directory\n * \n * @param pathFilter - Optional path filter (e.g., \".gitgov/\")\n * @returns true if there are uncommitted changes, false otherwise\n * @throws GitCommandError if operation fails\n * \n * @example\n * const hasChanges = await gitModule.hasUncommittedChanges(\".gitgov/\");\n * // => true\n */\n async hasUncommittedChanges(pathFilter?: string): Promise<boolean> {\n const args = ['status', '--porcelain'];\n\n if (pathFilter) {\n args.push('--', pathFilter);\n }\n\n const result = await this.execGit(args);\n\n if (result.exitCode !== 0) {\n throw new GitCommandError('Failed to check for uncommitted changes', result.stderr);\n }\n\n return result.stdout.trim().length > 0;\n }\n\n /**\n * Checks if a rebase operation is currently in progress\n * \n * @returns true if rebase is in progress, false otherwise\n * \n * @example\n * const inRebase = await gitModule.isRebaseInProgress();\n * // => false\n */\n async isRebaseInProgress(): Promise<boolean> {\n const repoRoot = await this.ensureRepoRoot();\n const rebaseMergePath = path.join(repoRoot, '.git', 'rebase-merge');\n const rebaseApplyPath = path.join(repoRoot, '.git', 'rebase-apply');\n\n return fs.existsSync(rebaseMergePath) || fs.existsSync(rebaseApplyPath);\n }\n\n /**\n * Checks if a branch exists locally\n * \n * @param branchName - Branch name to check\n * @returns true if branch exists, false otherwise\n * \n * @example\n * const exists = await gitModule.branchExists(\"feature-branch\");\n * // => true\n */\n async branchExists(branchName: string): Promise<boolean> {\n const result = await this.execGit(['branch', '--list', branchName]);\n\n if (result.exitCode !== 0) {\n return false;\n }\n\n return result.stdout.trim().length > 0;\n }\n\n /**\n * Lists all remote branches for a given remote\n * \n * @param remoteName - Name of the remote (e.g., \"origin\")\n * @returns Array of remote branch names without the remote prefix\n * @throws GitCommandError if operation fails\n * \n * @example\n * const branches = await gitModule.listRemoteBranches(\"origin\");\n * // => [\"main\", \"develop\", \"gitgov-state\"]\n * \n * @note This method only returns the branch names, not the full \"origin/branch\" format\n */\n async listRemoteBranches(remoteName: string): Promise<string[]> {\n const result = await this.execGit(['branch', '-r', '--list', `${remoteName}/*`]);\n\n if (result.exitCode !== 0) {\n // If command fails, return empty array (e.g., remote doesn't exist)\n return [];\n }\n\n const output = result.stdout.trim();\n if (!output) {\n return [];\n }\n\n // Parse output: \" origin/main\\n origin/develop\"\n // Strip \"origin/\" prefix and whitespace\n return output\n .split('\\n')\n .map(line => line.trim())\n .filter(line => line.length > 0)\n .map(line => {\n // Remove \"remoteName/\" prefix\n const prefix = `${remoteName}/`;\n if (line.startsWith(prefix)) {\n return line.substring(prefix.length);\n }\n return line;\n })\n .filter(branch => branch.length > 0);\n }\n\n /**\n * Checks if a remote is configured in the git repository.\n *\n * @param remoteName - Name of the remote to check (e.g., \"origin\")\n * @returns true if the remote is configured, false otherwise\n *\n * @example\n * const hasOrigin = await gitModule.isRemoteConfigured(\"origin\");\n * // => true\n */\n async isRemoteConfigured(remoteName: string): Promise<boolean> {\n const result = await this.execGit(['remote']);\n\n if (result.exitCode !== 0) {\n return false;\n }\n\n const remotes = result.stdout.trim().split('\\n').filter(Boolean);\n return remotes.includes(remoteName);\n }\n\n /**\n * Retrieves the tracking remote for a branch\n *\n * @param branchName - Branch name\n * @returns Remote name or null if not configured\n * @throws BranchNotFoundError if branch doesn't exist\n *\n * @example\n * const remote = await gitModule.getBranchRemote(\"main\");\n * // => \"origin\"\n */\n async getBranchRemote(branchName: string): Promise<string | null> {\n if (!(await this.branchExists(branchName))) {\n throw new BranchNotFoundError(branchName);\n }\n\n const result = await this.execGit(['config', `branch.${branchName}.remote`]);\n\n if (result.exitCode !== 0) {\n return null;\n }\n\n return result.stdout.trim() || null;\n }\n\n /**\n * Retrieves the list of conflicted files during a rebase or merge\n * \n * @returns Array of file paths in conflict\n * @throws GitCommandError if no rebase/merge in progress\n * \n * @example\n * const conflicts = await gitModule.getConflictedFiles();\n * // => [\".gitgov/tasks/123.json\", \".gitgov/tasks/456.json\"]\n */\n async getConflictedFiles(): Promise<string[]> {\n const result = await this.execGit(['diff', '--name-only', '--diff-filter=U']);\n\n if (result.exitCode !== 0) {\n throw new GitCommandError('Failed to get conflicted files', result.stderr);\n }\n\n if (!result.stdout.trim()) {\n return [];\n }\n\n return result.stdout.trim().split('\\n');\n }\n\n // ═══════════════════════════════════════════════════════════════════════\n // WRITE OPERATIONS\n // ═══════════════════════════════════════════════════════════════════════\n\n /**\n * Switches to the specified branch\n * \n * @param branchName - Branch name to checkout\n * @throws BranchNotFoundError if branch doesn't exist\n * @throws GitCommandError if operation fails\n * \n * @example\n * await gitModule.checkoutBranch(\"feature-branch\");\n */\n async checkoutBranch(branchName: string): Promise<void> {\n if (!(await this.branchExists(branchName))) {\n throw new BranchNotFoundError(branchName);\n }\n\n const result = await this.execGit(['checkout', branchName]);\n\n if (result.exitCode !== 0) {\n throw new GitCommandError(`Failed to checkout branch ${branchName}`, result.stderr);\n }\n }\n\n /**\n * Stash uncommitted changes\n * \n * @param message - Optional message for the stash\n * @returns Stash hash if changes were stashed, null if nothing to stash\n */\n async stash(message?: string): Promise<string | null> {\n const hasChanges = await this.hasUncommittedChanges();\n if (!hasChanges) {\n return null; // Nothing to stash\n }\n\n const args = ['stash', 'push'];\n if (message) {\n args.push('-m', message);\n }\n\n const result = await this.execGit(args);\n\n if (result.exitCode !== 0) {\n throw new GitCommandError('Failed to stash changes', result.stderr);\n }\n\n // Get the hash of the stash we just created\n const listResult = await this.execGit(['stash', 'list', '-n', '1', '--format=%H']);\n return listResult.stdout.trim() || null;\n }\n\n /**\n * Pop the most recent stash\n * \n * @returns true if stash was popped successfully, false if no stash exists\n */\n async stashPop(): Promise<boolean> {\n // Check if there are any stashes\n const listResult = await this.execGit(['stash', 'list']);\n if (!listResult.stdout.trim()) {\n return false; // No stashes to pop\n }\n\n const result = await this.execGit(['stash', 'pop']);\n\n if (result.exitCode !== 0) {\n // If pop fails, it might be due to conflicts - this is okay, we'll leave it stashed\n throw new GitCommandError('Failed to pop stash (conflicts may exist)', result.stderr);\n }\n\n return true;\n }\n\n /**\n * Drop a specific stash or the most recent one\n * \n * @param stashHash - Optional stash hash to drop, defaults to most recent\n */\n async stashDrop(stashHash?: string): Promise<void> {\n const args = ['stash', 'drop'];\n if (stashHash) {\n args.push(stashHash);\n }\n\n const result = await this.execGit(args);\n\n if (result.exitCode !== 0) {\n throw new GitCommandError('Failed to drop stash', result.stderr);\n }\n }\n\n /**\n * Creates an orphan branch (no history) and switches to it\n * \n * @param branchName - Orphan branch name to create\n * @throws GitCommandError if branch already exists or operation fails\n * \n * @example\n * await gitModule.checkoutOrphanBranch(\"gitgov-state\");\n */\n async checkoutOrphanBranch(branchName: string): Promise<void> {\n const result = await this.execGit(['checkout', '--orphan', branchName]);\n\n if (result.exitCode !== 0) {\n throw new GitCommandError(`Failed to create orphan branch ${branchName}`, result.stderr);\n }\n }\n\n /**\n * Fetches the latest changes from a remote repository\n * \n * @param remote - Remote name (e.g., \"origin\")\n * @throws GitCommandError if operation fails\n * \n * @example\n * await gitModule.fetch(\"origin\");\n */\n async fetch(remote: string): Promise<void> {\n const result = await this.execGit(['fetch', remote]);\n\n if (result.exitCode !== 0) {\n throw new GitCommandError(`Failed to fetch from ${remote}`, result.stderr);\n }\n }\n\n /**\n * Pulls and merges a remote branch\n * \n * @param remote - Remote name\n * @param branchName - Branch name\n * @throws MergeConflictError if merge conflicts occur\n * @throws GitCommandError if operation fails\n * \n * @example\n * await gitModule.pull(\"origin\", \"main\");\n */\n async pull(remote: string, branchName: string): Promise<void> {\n const result = await this.execGit(['pull', '--no-rebase', remote, branchName]);\n\n if (result.exitCode !== 0) {\n // Check if conflict occurred (check both stdout and stderr)\n const output = result.stdout + result.stderr;\n if (output.includes('CONFLICT') || output.includes('Automatic merge failed') || output.includes('fix conflicts')) {\n const conflictedFiles = await this.getConflictedFiles();\n throw new MergeConflictError(conflictedFiles);\n }\n throw new GitCommandError(`Failed to pull from ${remote}/${branchName}`, result.stderr);\n }\n }\n\n /**\n * Pulls and rebases a remote branch\n * \n * @param remote - Remote name\n * @param branchName - Branch name\n * @throws RebaseConflictError if rebase conflicts occur\n * @throws GitCommandError if operation fails\n * \n * @example\n * await gitModule.pullRebase(\"origin\", \"main\");\n */\n async pullRebase(remote: string, branchName: string): Promise<void> {\n const result = await this.execGit(['pull', '--rebase', remote, branchName]);\n\n if (result.exitCode !== 0) {\n // Check if conflict occurred (check both stdout and stderr)\n const output = result.stdout + result.stderr;\n if (output.includes('CONFLICT') || output.includes('could not apply') || output.includes('fix conflicts') || output.includes('Resolve all conflicts')) {\n const conflictedFiles = await this.getConflictedFiles();\n throw new RebaseConflictError(conflictedFiles);\n }\n throw new GitCommandError(`Failed to pull --rebase from ${remote}/${branchName}`, result.stderr);\n }\n }\n\n /**\n * Resets the current branch to a specific commit, discarding all local changes\n * \n * @param target - Commit hash or branch name\n * @throws GitCommandError if operation fails\n * \n * @example\n * await gitModule.resetHard(\"HEAD~1\");\n */\n async resetHard(target: string): Promise<void> {\n const result = await this.execGit(['reset', '--hard', target]);\n\n if (result.exitCode !== 0) {\n throw new GitCommandError(`Failed to reset --hard to ${target}`, result.stderr);\n }\n }\n\n /**\n * Checks out specific files from another branch into the current staging area\n * \n * @param sourceBranch - Source branch name\n * @param filePaths - Array of file paths to checkout\n * @throws BranchNotFoundError if source branch doesn't exist\n * @throws GitCommandError if operation fails\n * \n * @example\n * await gitModule.checkoutFilesFromBranch(\"main\", [\".gitgov/tasks/123.json\"]);\n */\n async checkoutFilesFromBranch(sourceBranch: string, filePaths: string[]): Promise<void> {\n if (!(await this.branchExists(sourceBranch))) {\n throw new BranchNotFoundError(sourceBranch);\n }\n\n const result = await this.execGit(['checkout', sourceBranch, '--', ...filePaths]);\n\n if (result.exitCode !== 0) {\n throw new GitCommandError(\n `Failed to checkout files from ${sourceBranch}`,\n result.stderr\n );\n }\n }\n\n /**\n * Adds files to the staging area\n *\n * @param filePaths - Array of file paths to add\n * @param options - Optional settings (force: add ignored files)\n * @throws GitCommandError if operation fails\n *\n * @example\n * await gitModule.add([\".gitgov/tasks/123.json\"]);\n * await gitModule.add([\".gitgov\"], { force: true }); // Add ignored files\n */\n async add(filePaths: string[], options?: { force?: boolean }): Promise<void> {\n const args = ['add'];\n if (options?.force) {\n args.push('--force');\n }\n args.push(...filePaths);\n\n const result = await this.execGit(args);\n\n if (result.exitCode !== 0) {\n throw new GitCommandError('Failed to add files', result.stderr);\n }\n }\n\n /**\n * Removes files from both working directory and staging area\n * \n * @param filePaths - Array of file paths to remove\n * @throws GitCommandError if operation fails\n * \n * @example\n * await gitModule.rm([\".gitgov/tasks/123.json\"]);\n */\n async rm(filePaths: string[]): Promise<void> {\n const result = await this.execGit(['rm', ...filePaths]);\n\n if (result.exitCode !== 0) {\n throw new GitCommandError('Failed to remove files', result.stderr);\n }\n }\n\n /**\n * Creates a new commit with staged files\n * \n * @param message - Commit message\n * @param author - Optional commit author\n * @returns Commit hash of the created commit\n * @throws GitCommandError if operation fails\n * \n * @example\n * const hash = await gitModule.commit(\"feat: add new task\");\n * // => \"abc123def456...\"\n */\n async commit(message: string, author?: CommitAuthor): Promise<string> {\n // Use multiple -m arguments for multi-line messages\n // Git concatenates them with newlines\n const lines = message.split('\\n');\n const args = ['commit'];\n\n // Add each line as a separate -m argument\n for (const line of lines) {\n args.push('-m', line);\n }\n\n if (author) {\n args.push('--author', `${author.name} <${author.email}>`);\n }\n\n const result = await this.execGit(args);\n\n if (result.exitCode !== 0) {\n // Include both stdout and stderr in error for better diagnostics\n // (git commit outputs \"nothing to commit\" to stdout, not stderr)\n throw new GitCommandError('Failed to create commit', result.stderr, undefined, result.stdout);\n }\n\n // Get the commit hash\n const hashResult = await this.execGit(['rev-parse', 'HEAD']);\n return hashResult.stdout.trim();\n }\n\n /**\n * Creates an empty commit (no changes required)\n * \n * @param message - Commit message\n * @param author - Optional commit author\n * @returns Commit hash of the created commit\n * @throws GitCommandError if operation fails\n * \n * @example\n * const hash = await gitModule.commitAllowEmpty(\"chore: initialize state branch\");\n * // => \"abc123def456...\"\n */\n async commitAllowEmpty(message: string, author?: CommitAuthor): Promise<string> {\n const args = ['commit', '--allow-empty', '-m', message];\n\n if (author) {\n args.push('--author', `${author.name} <${author.email}>`);\n }\n\n const result = await this.execGit(args);\n\n if (result.exitCode !== 0) {\n throw new GitCommandError('Failed to create empty commit', result.stderr);\n }\n\n // Get the commit hash\n const hashResult = await this.execGit(['rev-parse', 'HEAD']);\n return hashResult.stdout.trim();\n }\n\n /**\n * Pushes a local branch to a remote repository\n * \n * @param remote - Remote name\n * @param branchName - Branch name\n * @throws GitCommandError if operation fails\n * \n * @example\n * await gitModule.push(\"origin\", \"main\");\n */\n async push(remote: string, branchName: string): Promise<void> {\n const result = await this.execGit(['push', remote, branchName]);\n\n if (result.exitCode !== 0) {\n throw new GitCommandError(`Failed to push ${branchName} to ${remote}`, result.stderr);\n }\n }\n\n /**\n * Pushes a local branch to a remote repository and sets up tracking\n * \n * @param remote - Remote name\n * @param branchName - Branch name\n * @throws GitCommandError if operation fails\n * \n * @example\n * await gitModule.pushWithUpstream(\"origin\", \"feature-branch\");\n */\n async pushWithUpstream(remote: string, branchName: string): Promise<void> {\n const result = await this.execGit(['push', '-u', remote, branchName]);\n\n if (result.exitCode !== 0) {\n throw new GitCommandError(\n `Failed to push ${branchName} to ${remote} with upstream`,\n result.stderr\n );\n }\n }\n\n /**\n * Configures tracking for a local branch with a remote branch\n * \n * @param branchName - Local branch name\n * @param remote - Remote name\n * @param remoteBranch - Remote branch name\n * @throws BranchNotFoundError if local branch doesn't exist\n * @throws GitCommandError if operation fails\n * \n * @example\n * await gitModule.setUpstream(\"feature-branch\", \"origin\", \"feature-branch\");\n */\n async setUpstream(\n branchName: string,\n remote: string,\n remoteBranch: string\n ): Promise<void> {\n if (!(await this.branchExists(branchName))) {\n throw new BranchNotFoundError(branchName);\n }\n\n const result = await this.execGit([\n 'branch',\n '--set-upstream-to',\n `${remote}/${remoteBranch}`,\n branchName,\n ]);\n\n if (result.exitCode !== 0) {\n throw new GitCommandError(`Failed to set upstream for ${branchName}`, result.stderr);\n }\n }\n\n // ═══════════════════════════════════════════════════════════════════════\n // REBASE OPERATIONS\n // ═══════════════════════════════════════════════════════════════════════\n\n /**\n * Continues a rebase after resolving conflicts\n * \n * @returns Commit hash of the rebased commit\n * @throws RebaseNotInProgressError if no rebase is in progress\n * @throws GitCommandError if operation fails\n * \n * @example\n * const hash = await gitModule.rebaseContinue();\n * // => \"abc123def456...\"\n */\n async rebaseContinue(): Promise<string> {\n if (!(await this.isRebaseInProgress())) {\n throw new RebaseNotInProgressError();\n }\n\n logger.debug('Continuing rebase...');\n const result = await this.execGit(['rebase', '--continue']);\n\n if (result.exitCode !== 0) {\n logger.error(`Rebase continue failed: ${result.stderr}`);\n throw new GitCommandError('Failed to continue rebase', result.stderr);\n }\n\n // Get the current commit hash\n const hashResult = await this.execGit(['rev-parse', 'HEAD']);\n const commitHash = hashResult.stdout.trim();\n logger.info(`Rebase continued successfully, commit: ${commitHash.substring(0, 8)}...`);\n return commitHash;\n }\n\n /**\n * Aborts an ongoing rebase\n * \n * @throws RebaseNotInProgressError if no rebase is in progress\n * @throws GitCommandError if operation fails\n * \n * @example\n * await gitModule.rebaseAbort();\n */\n async rebaseAbort(): Promise<void> {\n if (!(await this.isRebaseInProgress())) {\n throw new RebaseNotInProgressError();\n }\n\n const result = await this.execGit(['rebase', '--abort']);\n\n if (result.exitCode !== 0) {\n throw new GitCommandError('Failed to abort rebase', result.stderr);\n }\n }\n\n /**\n * Creates a new branch and switches to it (git checkout -b)\n * \n * @param branchName - Name of the branch to create\n * @param startPoint - Optional starting point (commit hash or branch name)\n * @throws GitCommandError if branch already exists or operation fails\n * @throws BranchAlreadyExistsError if the branch already exists locally\n */\n async createBranch(branchName: string, startPoint?: string): Promise<void> {\n // Check if branch already exists\n const exists = await this.branchExists(branchName);\n if (exists) {\n throw new BranchAlreadyExistsError(branchName);\n }\n\n const args = ['checkout', '-b', branchName];\n if (startPoint) {\n args.push(startPoint);\n }\n\n const result = await this.execGit(args);\n\n if (result.exitCode !== 0) {\n throw new GitCommandError(\n `Failed to create branch ${branchName}`,\n result.stderr\n );\n }\n\n logger.debug(`Created and checked out branch: ${branchName}`);\n }\n\n /**\n * Rebases current branch onto target branch (git rebase)\n * \n * @param targetBranch - Branch to rebase onto\n * @throws GitCommandError if rebase fails\n * @throws RebaseConflictError if conflicts are detected during rebase\n */\n async rebase(targetBranch: string): Promise<void> {\n const result = await this.execGit(['rebase', targetBranch]);\n\n if (result.exitCode !== 0) {\n // Check if it's a conflict\n if (result.stderr.includes('CONFLICT') || result.stderr.includes('conflict')) {\n // Get conflicted files if possible\n try {\n const conflictedFiles = await this.getConflictedFiles();\n throw new RebaseConflictError(conflictedFiles);\n } catch {\n // If we can't get files, throw with empty array\n throw new RebaseConflictError([]);\n }\n }\n\n throw new GitCommandError(\n `Failed to rebase onto ${targetBranch}`,\n result.stderr\n );\n }\n\n logger.debug(`Rebased onto: ${targetBranch}`);\n }\n}\n\n","/**\n * Lint Module - Structural Validation for GitGovernance Records\n * \n * This module provides comprehensive validation capabilities for GitGovernance records,\n * implementing Quality Model Layer 1 (Structural + Referential Integrity).\n * \n * Follows the same architectural pattern as all other adapters with public interface\n * (ILintModule) for dependency injection and testability.\n * \n * @module lint\n * @example\n * ```typescript\n * import { LintModule, type ILintModule } from '@gitgov/core/lint';\n * \n * const lintModule: ILintModule = new LintModule({\n * recordStore: taskStore,\n * indexerAdapter: indexerAdapter // optional\n * });\n * \n * // Validate all records\n * const report = await lintModule.lint({ validateReferences: true });\n * console.log(`Errors: ${report.summary.errors}`);\n * \n * // Auto-fix problems\n * if (report.summary.fixable > 0) {\n * const fixReport = await lintModule.fix(report, { createBackups: true });\n * console.log(`Fixed: ${fixReport.summary.fixed}`);\n * }\n * ```\n */\n\nexport { LintModule } from \"./lint\";\nexport type {\n ILintModule,\n LintModuleDependencies,\n LintOptions,\n LintReport,\n LintSummary,\n LintResult,\n ValidatorType,\n ValidationContext,\n FixOptions,\n FixReport,\n FixResult,\n FileSystem\n} from \"./lint.types\";\n","import { promises as fs } from \"fs\";\nimport { join, dirname, basename } from \"path\";\nimport type {\n ILintModule,\n LintModuleDependencies,\n LintOptions,\n LintReport,\n LintResult,\n FixOptions,\n FixReport,\n FixResult,\n ValidatorType,\n FileSystem\n} from \"./lint.types\";\nimport type { RecordStore } from \"../store/record_store\";\nimport type { IIndexerAdapter } from \"../adapters/indexer_adapter\";\nimport type {\n GitGovRecord,\n GitGovRecordPayload,\n CustomRecord,\n TaskRecord,\n CycleRecord,\n ExecutionRecord,\n GitGovRecordType\n} from \"../types\";\nimport type { Signature } from \"../types/embedded.types\";\nimport { DetailedValidationError } from \"../validation/common\";\nimport { createLogger } from \"../logger\";\nimport { calculatePayloadChecksum } from \"../crypto/checksum\";\nimport { signPayload } from \"../crypto/signatures\";\nimport { ConfigManager } from \"../config_manager\";\nimport { readdir } from \"fs/promises\";\nimport {\n loadTaskRecord,\n loadActorRecord,\n loadAgentRecord,\n loadCycleRecord,\n loadExecutionRecord,\n loadChangelogRecord,\n loadFeedbackRecord\n} from \"../factories\";\n\ntype StorablePayload = Exclude<GitGovRecordPayload, CustomRecord>;\n\n/**\n * Type guard to check if a payload is a TaskRecord\n */\nfunction isTaskRecord(payload: GitGovRecordPayload): payload is TaskRecord {\n return 'title' in payload && 'status' in payload && 'priority' in payload && 'description' in payload;\n}\n\n/**\n * Type guard to check if a payload is a CycleRecord\n */\nfunction isCycleRecord(payload: GitGovRecordPayload): payload is CycleRecord {\n return 'title' in payload && 'status' in payload && !('priority' in payload);\n}\n\n/**\n * Type guard to check if a payload is an ExecutionRecord\n */\nfunction isExecutionRecord(payload: GitGovRecordPayload): payload is ExecutionRecord {\n return 'taskId' in payload && 'type' in payload && 'result' in payload;\n}\n\n\nconst logger = createLogger(\"[Lint] \");\n\n/**\n * Structural validation module for GitGovernance records.\n * \n * Implements Quality Model Layer 1 with delegation to recordStore.read()\n * for base validation and adds additional validations for conventions and references.\n * \n * Implements ILintModule interface following the same pattern as all other adapters\n * (IBacklogAdapter, IFeedbackAdapter, etc.) for consistency and testability.\n * \n * @class LintModule\n * @implements {ILintModule}\n * @example\n * ```typescript\n * const lintModule: ILintModule = new LintModule({\n * recordStore: taskStore,\n * indexerAdapter: indexerAdapter // optional\n * });\n * \n * const report = await lintModule.lint({ validateReferences: true });\n * ```\n */\nexport class LintModule implements ILintModule {\n private readonly recordStore: RecordStore<StorablePayload>;\n private readonly indexerAdapter: IIndexerAdapter | null;\n private readonly fileSystem: FileSystem;\n private lastBackupPath: string | null = null;\n\n /**\n * Constructor for LintModule with graceful degradation.\n * \n * @param dependencies - Module dependencies (some optional)\n * @throws {Error} If recordStore is not present\n * \n * @example\n * ```typescript\n * const lintModule = new LintModule({\n * recordStore: taskStore, // REQUIRED\n * indexerAdapter: indexerAdapter, // optional\n * fileSystem: customFileSystem // optional (default: Node.js fs)\n * });\n * ```\n */\n constructor(dependencies: LintModuleDependencies) {\n // Validate required dependencies\n if (!dependencies.recordStore) {\n throw new Error(\"recordStore is required for file access\");\n }\n\n this.recordStore = dependencies.recordStore;\n\n // Optional dependencies with graceful degradation\n this.indexerAdapter = dependencies.indexerAdapter ?? null;\n if (!this.indexerAdapter) {\n logger.warn(\n \"indexerAdapter not provided, reference validation will be limited\"\n );\n }\n\n // FileSystem with fallback to Node.js fs\n this.fileSystem = dependencies.fileSystem ?? {\n readFile: async (path: string, encoding: string) => {\n return fs.readFile(path, encoding as BufferEncoding);\n },\n writeFile: async (path: string, content: string) => {\n await fs.writeFile(path, content, \"utf-8\");\n },\n exists: async (path: string) => {\n try {\n await fs.access(path);\n return true;\n } catch {\n return false;\n }\n },\n unlink: async (path: string) => {\n await fs.unlink(path);\n }\n };\n }\n\n /**\n * Valida todos los records en el directorio especificado.\n * \n * Usa delegation pattern: llama a recordStore.read() que internamente usa loaders\n * para validar schema + embedded metadata. Luego agrega validaciones adicionales\n * (convenciones, referencias).\n * \n * @param options - Opciones de configuración\n * @returns {Promise<LintReport>} Reporte consolidado con todos los resultados\n * \n * @example\n * ```typescript\n * const report = await lintModule.lint({\n * path: '.gitgov/',\n * validateReferences: true,\n * validateActors: true,\n * concurrent: true\n * });\n * \n * console.log(`Errors: ${report.summary.errors}`);\n * console.log(`Warnings: ${report.summary.warnings}`);\n * ```\n */\n async lint(options?: Partial<LintOptions>): Promise<LintReport> {\n const startTime = Date.now();\n\n // Merge con defaults\n const opts: LintOptions = {\n path: options?.path ?? \".gitgov/\",\n validateReferences: options?.validateReferences ?? false,\n validateActors: options?.validateActors ?? false,\n validateChecksums: options?.validateChecksums ?? true,\n validateSignatures: options?.validateSignatures ?? true,\n validateConventions: options?.validateConventions ?? true,\n failFast: options?.failFast ?? false,\n concurrent: options?.concurrent ?? true,\n concurrencyLimit: options?.concurrencyLimit ?? 10\n };\n\n const results: LintResult[] = [];\n\n // Temporarily suppress console.warn from RecordStore to avoid cluttering output\n // The detailed errors will be captured and shown in the lint report\n const originalWarn = console.warn;\n console.warn = () => { }; // Suppress warnings during lint execution\n\n try {\n // 1. Discovery: Get all record IDs from all stores\n // IMPORTANT: Always scan filesystem directly to find ALL .json files,\n // not just the ones that passed indexer validation.\n // The indexer may skip invalid records, but we want to lint ALL records.\n const recordsWithTypes = await this.discoverAllRecordsWithTypes(opts.path);\n const recordIds = recordsWithTypes.map(r => r.id);\n\n logger.info(`Starting lint validation for ${recordIds.length} records`);\n\n // 2. Validation Loop (concurrent or sequential)\n // Create a map of recordId -> entityType for efficient lookup\n // We already have the types from discoverAllRecordsWithTypes\n const recordTypeMap = new Map<string, Exclude<GitGovRecordType, 'custom'>>();\n for (const { id, type } of recordsWithTypes) {\n recordTypeMap.set(id, type);\n }\n\n if (opts.concurrent) {\n // Process in batches for concurrency control\n const batches = this.chunkArray(recordIds, opts.concurrencyLimit!);\n\n for (const batch of batches) {\n const batchResults = await Promise.all(\n batch.map(recordId => this.lintSingleRecord(recordId, opts, recordTypeMap.get(recordId)))\n );\n\n for (const batchResult of batchResults) {\n results.push(...batchResult);\n\n // Fail-fast: detener si hay errores fatales\n if (opts.failFast && batchResult.some(r => r.level === \"error\")) {\n logger.warn(\"Fail-fast mode: stopping after first error\");\n break;\n }\n }\n\n if (opts.failFast && results.some(r => r.level === \"error\")) {\n break;\n }\n }\n } else {\n // Sequential processing\n for (const recordId of recordIds) {\n const recordResults = await this.lintSingleRecord(recordId, opts, recordTypeMap.get(recordId));\n results.push(...recordResults);\n\n if (opts.failFast && recordResults.some(r => r.level === \"error\")) {\n logger.warn(\"Fail-fast mode: stopping after first error\");\n break;\n }\n }\n }\n\n // 3. Aggregate results\n const executionTime = Date.now() - startTime;\n const errors = results.filter(r => r.level === \"error\").length;\n const warnings = results.filter(r => r.level === \"warning\").length;\n const fixable = results.filter(r => r.fixable).length;\n\n logger.info(\n `Lint completed in ${executionTime}ms: ${recordIds.length} files, ${errors} errors, ${warnings} warnings`\n );\n\n return {\n summary: {\n filesChecked: recordIds.length,\n errors,\n warnings,\n fixable,\n executionTime\n },\n results,\n metadata: {\n timestamp: new Date().toISOString(),\n options: opts,\n version: \"1.0.0\"\n }\n };\n } catch (error) {\n logger.error(\"Lint operation failed:\", error);\n throw error;\n } finally {\n // Restore console.warn\n console.warn = originalWarn;\n }\n }\n\n /**\n * Validates a specific file and returns its results.\n * Ultra-fast validation for single records (target: <50ms).\n * \n * @param filePath - Path to the file to validate\n * @param options - Configuration options\n * @returns {Promise<LintReport>} Lint report for this single file\n * \n * @example\n * ```typescript\n * const report = await lintModule.lintFile('.gitgov/tasks/1234567890-task-example.json', {\n * validateReferences: true\n * });\n * ```\n */\n async lintFile(filePath: string, options?: Partial<LintOptions>): Promise<LintReport> {\n const startTime = Date.now();\n\n // Extract recordId from filePath\n const recordId = this.extractRecordId(filePath);\n\n // Determine entity type from file path (more reliable than from recordId)\n // Path format: .gitgov/{type}s/{recordId}.json\n const pathParts = filePath.split('/');\n const typeDirIndex = pathParts.findIndex(part =>\n ['tasks', 'cycles', 'executions', 'changelogs', 'feedback', 'actors', 'agents'].includes(part)\n );\n let entityType: Exclude<GitGovRecordType, 'custom'> = this.getEntityType(recordId);\n if (typeDirIndex >= 0 && pathParts[typeDirIndex]) {\n const typeDir = pathParts[typeDirIndex];\n // Convert directory name to record type (plural -> singular)\n const typeMap: Record<string, Exclude<GitGovRecordType, 'custom'>> = {\n 'tasks': 'task',\n 'cycles': 'cycle',\n 'executions': 'execution',\n 'changelogs': 'changelog',\n 'feedback': 'feedback',\n 'actors': 'actor',\n 'agents': 'agent'\n };\n entityType = typeMap[typeDir] || entityType;\n }\n\n // Merge with defaults\n const opts: LintOptions = {\n path: filePath,\n validateReferences: options?.validateReferences ?? false,\n validateActors: options?.validateActors ?? false,\n validateChecksums: options?.validateChecksums ?? true,\n validateSignatures: options?.validateSignatures ?? true,\n validateConventions: options?.validateConventions ?? true,\n failFast: options?.failFast ?? false,\n concurrent: false, // Single file, no concurrency needed\n concurrencyLimit: 1\n };\n\n // Temporarily suppress console.warn from RecordStore to avoid cluttering output\n const originalWarn = console.warn;\n console.warn = () => { }; // Suppress warnings during lint execution\n\n try {\n // Validate single record (pass entityType to ensure correct loader is used)\n const results = await this.lintSingleRecord(recordId, opts, entityType);\n\n // Build report\n const executionTime = Date.now() - startTime;\n const errors = results.filter(r => r.level === \"error\").length;\n const warnings = results.filter(r => r.level === \"warning\").length;\n const fixable = results.filter(r => r.fixable).length;\n\n return {\n summary: {\n filesChecked: 1,\n errors,\n warnings,\n fixable,\n executionTime\n },\n results,\n metadata: {\n timestamp: new Date().toISOString(),\n options: opts,\n version: \"1.0.0\"\n }\n };\n } finally {\n // Restore console.warn\n console.warn = originalWarn;\n }\n }\n\n /**\n * Valida un record individual y retorna sus resultados.\n * \n * @private\n * @param recordId - ID del record a validar\n * @param options - Opciones de configuración\n * @returns {Promise<LintResult[]>} Array de resultados para este record\n */\n private async lintSingleRecord(\n recordId: string,\n options: LintOptions,\n entityTypeOverride?: Exclude<GitGovRecordType, 'custom'>\n ): Promise<LintResult[]> {\n const results: LintResult[] = [];\n const entityType = entityTypeOverride || this.getEntityType(recordId);\n // Use the path from options if it's a file path, otherwise construct it\n let filePath: string;\n if (options.path && options.path.endsWith('.json')) {\n // Resolve to absolute path if relative\n // Use ConfigManager.findProjectRoot() to ensure we resolve relative to project root, not cwd\n const projectRoot = ConfigManager.findProjectRoot();\n if (options.path.startsWith('/')) {\n filePath = options.path;\n } else if (projectRoot) {\n // If path is relative and we have project root, resolve from project root\n filePath = join(projectRoot, options.path);\n } else {\n // Fallback to process.cwd() if no project root found\n filePath = join(process.cwd(), options.path);\n }\n } else {\n filePath = this.getFilePath(recordId, entityType);\n }\n\n try {\n\n // Try to read the file directly and validate with the appropriate loader\n // This works for all record types, not just the one configured in recordStore\n let record: GitGovRecord | null = null;\n try {\n const content = await this.fileSystem.readFile(filePath, 'utf-8');\n const raw = JSON.parse(content);\n\n // Load with the appropriate loader based on entity type\n // entityType is Exclude<GitGovRecordType, 'custom'>, so no need to check for 'custom'\n switch (entityType) {\n case 'task':\n record = loadTaskRecord(raw);\n break;\n case 'actor':\n record = loadActorRecord(raw);\n break;\n case 'agent':\n record = loadAgentRecord(raw);\n break;\n case 'cycle':\n record = loadCycleRecord(raw);\n break;\n case 'execution':\n record = loadExecutionRecord(raw);\n break;\n case 'changelog':\n record = loadChangelogRecord(raw);\n break;\n case 'feedback':\n record = loadFeedbackRecord(raw);\n break;\n default:\n // Unknown type, try to read with configured recordStore as fallback\n record = await this.recordStore.read(recordId);\n }\n } catch (validationError) {\n // File read or validation failed\n if (validationError instanceof DetailedValidationError) {\n // Filter out redundant oneOf errors when there's an \"additional properties\" error\n // These oneOf errors are side effects of the additional property, not separate issues\n const hasAdditionalProperties = validationError.errors.some(e =>\n e.message.includes(\"must NOT have additional properties\") ||\n e.message.includes(\"must not have additional properties\")\n );\n\n // If there's an additional properties error, filter out oneOf errors\n const filteredErrors = hasAdditionalProperties\n ? validationError.errors.filter(e =>\n !e.message.includes(\"oneOf\") &&\n !e.message.includes(\"must match\") &&\n !e.message.includes(\"boolean schema is false\")\n )\n : validationError.errors;\n\n // Create one LintResult per error to show ALL errors, not just the first one\n for (const err of filteredErrors) {\n // Create temp error with field path in message for better detection\n const tempError = new DetailedValidationError('Record', [err]);\n tempError.message = `${err.field}: ${err.message}`;\n const validatorType = this.detectValidatorType(tempError);\n const isFixable = this.isFixable(tempError);\n\n results.push({\n level: \"error\",\n filePath,\n validator: validatorType,\n message: `${err.field}: ${err.message}`,\n entity: {\n type: entityType,\n id: recordId\n },\n fixable: isFixable,\n ...(err && {\n context: {\n ...(err.field && { field: err.field }),\n ...(err.value !== undefined && { actual: err.value }),\n ...(err.message && { expected: err.message })\n }\n })\n });\n }\n return results;\n }\n\n // If validationError is not DetailedValidationError, it's a file read error\n const fsError = validationError as NodeJS.ErrnoException;\n let errorMessage: string;\n if (fsError.code === 'ENOENT') {\n errorMessage = `Record file not found: ${recordId}`;\n } else if (validationError instanceof SyntaxError) {\n errorMessage = `Invalid JSON in record file: ${recordId}`;\n } else {\n errorMessage = `Failed to read record file: ${validationError instanceof Error ? validationError.message : String(validationError)}`;\n }\n\n results.push({\n level: \"error\",\n filePath,\n validator: \"SCHEMA_VALIDATION\",\n message: errorMessage,\n entity: {\n type: entityType,\n id: recordId\n },\n fixable: false\n });\n return results;\n }\n\n // If record is null, validation failed but no DetailedValidationError was thrown\n if (!record) {\n results.push({\n level: \"error\",\n filePath,\n validator: \"SCHEMA_VALIDATION\",\n message: `Record validation failed: ${recordId}`,\n entity: {\n type: entityType,\n id: recordId\n },\n fixable: false\n });\n return results;\n }\n\n // Record is valid from store's perspective\n // Apply additional validations\n\n if (options.validateConventions) {\n const conventionResults = await this.validateConventions(record, recordId, filePath, entityType);\n results.push(...conventionResults);\n }\n\n if (options.validateReferences && this.indexerAdapter) {\n const refResults = await this.validateReferences(record, recordId, filePath, entityType);\n results.push(...refResults);\n }\n\n if (options.validateActors && this.indexerAdapter) {\n const actorResults = await this.validateActors(record, recordId, filePath, entityType);\n results.push(...actorResults);\n }\n\n } catch (error) {\n // Capture validation errors from recordStore.read()\n if (error instanceof DetailedValidationError) {\n // Filter out redundant oneOf errors when there's an \"additional properties\" error\n // These oneOf errors are side effects of the additional property, not separate issues\n const hasAdditionalProperties = error.errors.some(e =>\n e.message.includes(\"must NOT have additional properties\") ||\n e.message.includes(\"must not have additional properties\")\n );\n\n // If there's an additional properties error, filter out oneOf errors\n const filteredErrors = hasAdditionalProperties\n ? error.errors.filter(e =>\n !e.message.includes(\"oneOf\") &&\n !e.message.includes(\"must match\") &&\n !e.message.includes(\"boolean schema is false\")\n )\n : error.errors;\n\n // Create one LintResult per error (not grouped by validator type)\n // This ensures all errors are visible, avoiding \"surprise\" errors after fixing one\n for (const err of filteredErrors) {\n // Create a temporary error to detect validator type for this specific error\n // Include field path in message for better detection\n const tempError = new DetailedValidationError('Record', [err]);\n tempError.message = `${err.field}: ${err.message}`;\n const validatorType = this.detectValidatorType(tempError);\n const isFixable = this.isFixable(tempError);\n\n results.push({\n level: \"error\",\n filePath,\n validator: validatorType,\n message: `${err.field}: ${err.message}`,\n entity: {\n type: entityType,\n id: recordId\n },\n fixable: isFixable,\n ...(err && {\n context: {\n ...(err.field && { field: err.field }),\n ...(err.value !== undefined && { actual: err.value }),\n ...(err.message && { expected: err.message })\n }\n })\n });\n }\n } else {\n // File system errors, parse errors, etc.\n results.push({\n level: \"error\",\n filePath,\n validator: \"SCHEMA_VALIDATION\",\n message: error instanceof Error ? error.message : String(error),\n entity: {\n type: entityType,\n id: recordId\n },\n fixable: false\n });\n }\n }\n\n return results;\n }\n\n /**\n * Valida un archivo especĆ­fico.\n * \n * Útil para validación en vivo (ej: dashboard, IDE integration).\n * \n * @param filePath - Path del archivo a validar\n * @param options - Opciones de configuración\n * @returns {Promise<LintResult[]>} Resultados de validación para este archivo\n * \n * @example\n * ```typescript\n * const results = await lintModule.lintFile(\n * '.gitgov/tasks/task-123.json',\n * { validateReferences: true }\n * );\n * ```\n */\n /**\n * Applies automatic repairs to problems marked as fixable.\n * \n * @param lintReport - Lint report with detected problems\n * @param fixOptions - Options for the fix operation\n * @returns {Promise<FixReport>} Report of applied repairs\n * \n * @example\n * ```typescript\n * const lintReport = await lintModule.lint();\n * const fixReport = await lintModule.fix(lintReport, {\n * createBackups: true,\n * keyId: 'system:migrator'\n * });\n * \n * console.log(`Fixed: ${fixReport.summary.fixed}`);\n * ```\n */\n async fix(\n lintReport: LintReport,\n fixOptions?: Partial<FixOptions>\n ): Promise<FixReport> {\n const opts: FixOptions = {\n ...(fixOptions?.fixTypes && { fixTypes: fixOptions.fixTypes }),\n createBackups: fixOptions?.createBackups ?? true,\n keyId: fixOptions?.keyId ?? \"system:migrator\",\n dryRun: fixOptions?.dryRun ?? false,\n ...(fixOptions?.privateKey && { privateKey: fixOptions.privateKey })\n };\n\n const fixes: FixResult[] = [];\n\n // Filter fixable problems\n let fixableResults = lintReport.results.filter(r => r.fixable);\n\n // Filter by fix types if specified\n if (opts.fixTypes && opts.fixTypes.length > 0) {\n fixableResults = fixableResults.filter(r =>\n opts.fixTypes!.includes(r.validator)\n );\n }\n\n logger.info(`Starting fix operation for ${fixableResults.length} fixable problems`);\n\n // Group results by filePath and validator to avoid fixing the same file multiple times\n const resultsByFile = new Map<string, Map<ValidatorType, LintResult[]>>();\n for (const result of fixableResults) {\n if (!resultsByFile.has(result.filePath)) {\n resultsByFile.set(result.filePath, new Map());\n }\n const fileResults = resultsByFile.get(result.filePath)!;\n if (!fileResults.has(result.validator)) {\n fileResults.set(result.validator, []);\n }\n fileResults.get(result.validator)!.push(result);\n }\n\n // Process each file once, passing all errors for that file/validator combination\n for (const [, validatorMap] of resultsByFile) {\n for (const [, results] of validatorMap) {\n // Use the first result for file path and entity info, but pass all results for context\n const primaryResult = results[0]!;\n\n // Declare backupPath outside try block so it's available in catch\n let backupPath: string | undefined;\n\n try {\n if (opts.dryRun) {\n // Dry run: report what would be done\n fixes.push({\n filePath: primaryResult.filePath,\n validator: primaryResult.validator,\n action: `Would fix ${primaryResult.validator} (${results.length} error${results.length === 1 ? '' : 's'})`,\n success: true\n });\n continue;\n }\n\n // Create backup if requested (only once per file)\n if (opts.createBackups && !backupPath) {\n backupPath = await this.createBackup(primaryResult.filePath);\n }\n\n // Apply fix based on validator type, passing all errors for context\n await this.applyFix(primaryResult, opts, results);\n\n fixes.push({\n filePath: primaryResult.filePath,\n validator: primaryResult.validator,\n action: `Fixed ${primaryResult.validator} (${results.length} error${results.length === 1 ? '' : 's'})`,\n success: true,\n ...(backupPath && { backupPath })\n });\n\n logger.debug(`Successfully fixed ${primaryResult.filePath} (${primaryResult.validator}, ${results.length} errors)`);\n\n } catch (error) {\n // Restore backup on failure\n if (opts.createBackups && backupPath) {\n try {\n await this.restoreBackup(primaryResult.filePath);\n logger.warn(`Restored backup for ${primaryResult.filePath} after fix failure`);\n } catch (restoreError) {\n logger.error(`Failed to restore backup for ${primaryResult.filePath}:`, restoreError);\n }\n }\n\n fixes.push({\n filePath: primaryResult.filePath,\n validator: primaryResult.validator,\n action: `Failed to fix ${primaryResult.validator}`,\n success: false,\n error: error instanceof Error ? error.message : String(error),\n ...(backupPath && { backupPath }) // Include backup path even if fix failed\n });\n\n logger.error(`Failed to fix ${primaryResult.filePath}:`, error);\n }\n }\n }\n\n const summary = {\n fixed: fixes.filter(f => f.success).length,\n failed: fixes.filter(f => !f.success).length,\n backupsCreated: opts.createBackups ? fixes.filter(f => f.backupPath).length : 0\n };\n\n logger.info(\n `Fix operation completed: ${summary.fixed} fixed, ${summary.failed} failed, ${summary.backupsCreated} backups created`\n );\n\n return {\n summary,\n fixes\n };\n }\n\n // ==================== Helper Methods ====================\n\n /**\n * Splits an array into chunks of the specified size.\n * @private\n */\n private chunkArray<T>(array: T[], chunkSize: number): T[][] {\n const chunks: T[][] = [];\n for (let i = 0; i < array.length; i += chunkSize) {\n chunks.push(array.slice(i, i + chunkSize));\n }\n return chunks;\n }\n\n\n /**\n * Discovers all records with their types by scanning the filesystem.\n * This ensures we know the correct type for each record based on its directory.\n * @private\n */\n private async discoverAllRecordsWithTypes(path?: string): Promise<Array<{ id: string; type: Exclude<GitGovRecordType, 'custom'> }>> {\n const projectRoot = ConfigManager.findProjectRoot() || path || '.gitgov/';\n // Use GitGovRecordType to get all record types (excluding 'custom' which is for testing)\n const recordTypes: Array<Exclude<GitGovRecordType, 'custom'>> = [\n 'actor', 'agent', 'cycle', 'task', 'execution', 'changelog', 'feedback'\n ];\n const allRecords: Array<{ id: string; type: Exclude<GitGovRecordType, 'custom'> }> = [];\n\n for (const recordType of recordTypes) {\n // Convert record type to directory name (pluralize: task -> tasks, cycle -> cycles, etc.)\n // Note: feedback and changelog have special pluralization rules\n const dirNameMap: Record<Exclude<GitGovRecordType, 'custom'>, string> = {\n 'task': 'tasks',\n 'cycle': 'cycles',\n 'execution': 'executions',\n 'changelog': 'changelogs',\n 'feedback': 'feedback', // feedback directory is singular, not plural\n 'actor': 'actors',\n 'agent': 'agents'\n };\n const dirName = dirNameMap[recordType];\n const dirPath = join(projectRoot, '.gitgov', dirName);\n try {\n const files = await readdir(dirPath);\n const jsonFiles = files.filter(f => f.endsWith('.json'));\n // Extract record IDs from filenames (remove .json extension)\n // We know the type from the directory, so store it with the ID\n const records = jsonFiles.map(f => ({\n id: f.replace('.json', ''),\n type: recordType\n }));\n allRecords.push(...records);\n } catch (error) {\n // Directory doesn't exist or can't be read, skip it\n continue;\n }\n }\n\n return allRecords;\n }\n\n /**\n * Gets the file path for a given recordId.\n * Matches the format used by RecordStore.getRecordPath()\n * @private\n */\n private getFilePath(recordId: string, entityTypeOverride?: Exclude<GitGovRecordType, 'custom'>): string {\n const type = entityTypeOverride || this.getEntityType(recordId);\n const projectRoot = ConfigManager.findProjectRoot();\n\n // Use the same directory name mapping as discoverAllRecordsWithTypes\n const dirNameMap: Record<Exclude<GitGovRecordType, 'custom'>, string> = {\n 'task': 'tasks',\n 'cycle': 'cycles',\n 'execution': 'executions',\n 'changelog': 'changelogs',\n 'feedback': 'feedback', // feedback directory is singular, not plural\n 'actor': 'actors',\n 'agent': 'agents'\n };\n const dirName = dirNameMap[type];\n\n if (!projectRoot) {\n // Fallback to relative path if no project root found\n const safeId = recordId.replace(/:/g, '_');\n return join(\".gitgov\", dirName, `${safeId}.json`);\n }\n const safeId = recordId.replace(/:/g, '_');\n return join(projectRoot, \".gitgov\", dirName, `${safeId}.json`);\n }\n\n /**\n * Extracts the recordId from a filePath.\n * @private\n */\n private extractRecordId(filePath: string): string {\n return basename(filePath, \".json\");\n }\n\n /**\n * Detects the entity type from a recordId.\n * @private\n */\n private getEntityType(recordId: string): Exclude<GitGovRecordType, 'custom'> {\n // Use GitGovRecordType for type safety\n // Check in order of specificity (longer/more specific patterns first to avoid false matches)\n // Pattern: {timestamp}-{type}-{slug} or {type}:{id} or {prefix}_{id}\n if (recordId.match(/^\\d+-exec-/)) return \"execution\";\n if (recordId.match(/^\\d+-changelog-/)) return \"changelog\";\n if (recordId.match(/^\\d+-feedback-/)) return \"feedback\";\n if (recordId.match(/^\\d+-cycle-/)) return \"cycle\";\n if (recordId.match(/^\\d+-task-/)) return \"task\";\n if (recordId.startsWith(\"execution:\") || recordId.includes(\"-execution-\")) return \"execution\";\n if (recordId.startsWith(\"changelog:\") || recordId.includes(\"-changelog-\")) return \"changelog\";\n if (recordId.startsWith(\"feedback:\") || recordId.includes(\"-feedback-\")) return \"feedback\";\n if (recordId.startsWith(\"task:\") || recordId.includes(\"-task-\")) return \"task\";\n if (recordId.startsWith(\"cycle:\") || recordId.includes(\"-cycle-\")) return \"cycle\";\n // Check for actor/agent patterns: human:*, agent:*, human_*, agent_*\n if (recordId.startsWith(\"actor:\") || recordId.startsWith(\"human:\") || recordId.startsWith(\"agent:\")) return \"actor\";\n if (recordId.startsWith(\"human_\") || recordId.match(/^human-/)) return \"actor\";\n if (recordId.startsWith(\"agent_\") || recordId.match(/^agent-/)) return \"agent\";\n if (recordId.startsWith(\"agent:\")) return \"agent\";\n return \"task\"; // Default fallback\n }\n\n /**\n * Detects the validator type based on the error.\n * @private\n */\n private detectValidatorType(error: DetailedValidationError): ValidatorType {\n // Check both the error message and the field path from errors array\n const errorMessage = error.message.toLowerCase();\n const fieldPath = error.errors?.[0]?.field?.toLowerCase() || '';\n const allErrorMessages = error.errors?.map(e => e.message?.toLowerCase() || '').join(' ') || '';\n\n // Combine message and field path for detection\n const combinedText = `${errorMessage} ${fieldPath} ${allErrorMessages}`;\n\n if (combinedText.includes(\"checksum\") || fieldPath.includes(\"payloadchecksum\")) {\n return \"CHECKSUM_VERIFICATION\";\n }\n // Check for signature errors (including path patterns like /header/signatures/0/signature)\n if (combinedText.includes(\"signature\") || fieldPath.includes(\"/signatures/\") || fieldPath.includes(\"signatures\")) {\n return \"SIGNATURE_STRUCTURE\";\n }\n if (combinedText.includes(\"header\") || combinedText.includes(\"payload\") || fieldPath.includes(\"/header/\")) {\n return \"EMBEDDED_METADATA_STRUCTURE\";\n }\n\n // Check for schema version mismatch indicators\n // These patterns suggest the record structure doesn't match the current schema version:\n // - \"required in v2\", \"field required in v2\", \"v2\", \"version\", \"deprecated\", \"obsolete\"\n // - Missing new required fields that were added in a newer schema version\n // - Presence of deprecated fields\n const versionMismatchIndicators = [\n 'required in v',\n 'field required in v',\n 'deprecated',\n 'obsolete',\n 'schema version',\n 'migration',\n 'v1 to v2',\n 'v2 to v3'\n ];\n\n const hasVersionMismatchIndicator = versionMismatchIndicators.some(indicator =>\n combinedText.includes(indicator)\n );\n\n // Also check if error message suggests a new required field (schema evolution)\n // Pattern: \"Field required in v2\" or similar version-specific messages\n const hasVersionSpecificMessage = /v\\d+|version\\s+\\d+/i.test(combinedText);\n\n if (hasVersionMismatchIndicator || hasVersionSpecificMessage) {\n return \"SCHEMA_VERSION_MISMATCH\";\n }\n\n return \"SCHEMA_VALIDATION\";\n }\n\n /**\n * Determines if an error is fixable.\n * @private\n */\n private isFixable(error: DetailedValidationError): boolean {\n const errorMessage = error.message.toLowerCase();\n\n // Legacy records without embedded metadata are fixable\n if (errorMessage.includes(\"header\") || errorMessage.includes(\"metadata\")) {\n return true;\n }\n\n // Additional properties in payload are fixable (can be removed)\n if (errorMessage.includes(\"must not have additional properties\") || errorMessage.includes(\"must NOT have additional properties\")) {\n return true;\n }\n\n // Invalid checksums are fixable\n if (errorMessage.includes(\"checksum\")) {\n return true;\n }\n\n // Signatures with incorrect format are fixable\n if (errorMessage.includes(\"signature\") && errorMessage.includes(\"format\")) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Validates conventions (file naming, timestamps, etc).\n * Implements EARS-13 through EARS-16.\n * @private\n */\n private async validateConventions(\n record: GitGovRecord,\n recordId: string,\n filePath: string,\n entityType: Exclude<GitGovRecordType, 'custom'>\n ): Promise<LintResult[]> {\n const results: LintResult[] = [];\n\n // EARS-13: Validate file is in correct directory\n // Use the same directory name mapping as discoverAllRecordsWithTypes and getFilePath\n const dirNameMap: Record<Exclude<GitGovRecordType, 'custom'>, string> = {\n 'task': 'tasks',\n 'cycle': 'cycles',\n 'execution': 'executions',\n 'changelog': 'changelogs',\n 'feedback': 'feedback', // feedback directory is singular, not plural\n 'actor': 'actors',\n 'agent': 'agents'\n };\n const expectedDir = `.gitgov/${dirNameMap[entityType]}`;\n if (!filePath.includes(expectedDir)) {\n results.push({\n level: \"error\",\n filePath,\n validator: \"FILE_NAMING_CONVENTION\",\n message: `File should be in ${expectedDir}/ directory but found in ${filePath}`,\n entity: {\n type: entityType,\n id: recordId\n },\n fixable: false,\n context: {\n field: \"directory\",\n actual: dirname(filePath),\n expected: expectedDir\n }\n });\n }\n\n // EARS-14: Validate filename matches entity ID\n const expectedFilename = `${recordId}.json`;\n const actualFilename = basename(filePath);\n if (actualFilename !== expectedFilename) {\n results.push({\n level: \"error\",\n filePath,\n validator: \"FILE_NAMING_CONVENTION\",\n message: `Filename '${actualFilename}' does not match entity ID '${recordId}'`,\n entity: {\n type: entityType,\n id: recordId\n },\n fixable: false,\n context: {\n field: \"filename\",\n actual: actualFilename,\n expected: expectedFilename\n }\n });\n }\n\n // EARS-15 & EARS-16: Validate timestamp ordering\n // Note: These fields are not in the schema but may exist in legacy records\n const payload = record.payload as GitGovRecordPayload & {\n createdAt?: number | string;\n updatedAt?: number | string;\n completedAt?: number | string;\n discardedAt?: number | string;\n };\n if (payload.createdAt && payload.updatedAt) {\n const created = new Date(payload.createdAt).getTime();\n const updated = new Date(payload.updatedAt).getTime();\n\n if (created > updated) {\n results.push({\n level: \"error\",\n filePath,\n validator: \"TEMPORAL_CONSISTENCY\",\n message: `createdAt (${String(payload.createdAt)}) is after updatedAt (${String(payload.updatedAt)})`,\n entity: {\n type: entityType,\n id: recordId\n },\n fixable: false,\n context: {\n field: \"timestamps\",\n actual: { createdAt: payload.createdAt, updatedAt: payload.updatedAt },\n expected: \"createdAt <= updatedAt\"\n }\n });\n }\n\n // Check completedAt if present\n if (payload.completedAt) {\n const completed = new Date(payload.completedAt).getTime();\n if (completed < created) {\n results.push({\n level: \"error\",\n filePath,\n validator: \"TEMPORAL_CONSISTENCY\",\n message: `completedAt (${String(payload.completedAt)}) is before createdAt (${String(payload.createdAt)})`,\n entity: {\n type: entityType,\n id: recordId\n },\n fixable: false\n });\n }\n }\n\n // Check discardedAt if present\n if (payload.discardedAt) {\n const discarded = new Date(payload.discardedAt).getTime();\n if (discarded < created) {\n results.push({\n level: \"error\",\n filePath,\n validator: \"TEMPORAL_CONSISTENCY\",\n message: `discardedAt (${String(payload.discardedAt)}) is before createdAt (${String(payload.createdAt)})`,\n entity: {\n type: entityType,\n id: recordId\n },\n fixable: false\n });\n }\n }\n }\n\n return results;\n }\n\n /**\n * Validates references (typed references, bidirectional consistency).\n * Implements EARS-17 through EARS-22.\n * Requires indexerAdapter to be present.\n * @private\n */\n private async validateReferences(\n record: GitGovRecord,\n recordId: string,\n filePath: string,\n entityType: Exclude<GitGovRecordType, 'custom'>\n ): Promise<LintResult[]> {\n const results: LintResult[] = [];\n // Use actual types from schemas - TaskRecord and ExecutionRecord have references, CycleRecord has taskIds\n const payload = record.payload;\n\n // EARS-17: Validate ExecutionRecord.taskId exists\n if (entityType === \"execution\" && isExecutionRecord(payload) && payload.taskId) {\n try {\n const taskRecord = await this.recordStore.read(payload.taskId);\n if (!taskRecord) {\n results.push({\n level: \"warning\",\n filePath,\n validator: \"REFERENTIAL_INTEGRITY\",\n message: `Referenced taskId '${payload.taskId}' not found`,\n entity: {\n type: entityType,\n id: recordId\n },\n fixable: false,\n context: {\n field: \"taskId\",\n actual: payload.taskId,\n expected: \"existing task record\"\n }\n });\n } else {\n // EARS-22: Check for soft delete\n // TaskRecord has status in its schema\n const taskPayload = taskRecord.payload as TaskRecord;\n if (taskPayload.status === \"discarded\") {\n results.push({\n level: \"warning\",\n filePath,\n validator: \"SOFT_DELETE_DETECTION\",\n message: `Referenced task '${payload.taskId}' has status 'discarded'`,\n entity: {\n type: entityType,\n id: recordId\n },\n fixable: false\n });\n }\n }\n } catch (error) {\n results.push({\n level: \"warning\",\n filePath,\n validator: \"REFERENTIAL_INTEGRITY\",\n message: `Failed to validate taskId reference: ${error instanceof Error ? error.message : String(error)}`,\n entity: {\n type: entityType,\n id: recordId\n },\n fixable: false\n });\n }\n }\n\n // EARS-18: Validate typed references by prefix\n // Only TaskRecord and ExecutionRecord have references in their schema\n if (isTaskRecord(payload) || isExecutionRecord(payload)) {\n const payloadWithRefs = payload as TaskRecord | ExecutionRecord;\n if (payloadWithRefs.references && Array.isArray(payloadWithRefs.references)) {\n for (const ref of payloadWithRefs.references) {\n const refStr = String(ref);\n\n // Validate format: prefix:value\n if (!refStr.includes(\":\")) {\n results.push({\n level: \"warning\",\n filePath,\n validator: \"TYPED_REFERENCE\",\n message: `Reference '${refStr}' missing type prefix (expected: task:, cycle:, file:, etc.)`,\n entity: {\n type: entityType,\n id: recordId\n },\n fixable: false,\n context: {\n field: \"references\",\n actual: refStr,\n expected: \"prefix:value format\"\n }\n });\n continue;\n }\n\n const parts = refStr.split(\":\", 2);\n if (parts.length < 2) continue; // Already handled above\n\n const [prefix, value] = parts;\n if (!prefix || !value) continue;\n\n // Validate known prefixes\n const knownPrefixes = [\"task\", \"cycle\", \"execution\", \"changelog\", \"feedback\", \"actor\", \"agent\", \"file\", \"url\", \"commit\", \"pr\", \"adapter\"];\n if (!knownPrefixes.includes(prefix)) {\n results.push({\n level: \"warning\",\n filePath,\n validator: \"TYPED_REFERENCE\",\n message: `Unknown reference prefix '${prefix}' (known: ${knownPrefixes.join(\", \")})`,\n entity: {\n type: entityType,\n id: recordId\n },\n fixable: false,\n context: {\n field: \"references\",\n actual: prefix,\n expected: knownPrefixes.join(\", \")\n }\n });\n }\n\n // EARS-20: Validate task/cycle/execution references exist\n if ([\"task\", \"cycle\", \"execution\", \"changelog\", \"feedback\"].includes(prefix)) {\n try {\n const referencedRecord = await this.recordStore.read(value);\n if (!referencedRecord) {\n results.push({\n level: \"warning\",\n filePath,\n validator: \"REFERENTIAL_INTEGRITY\",\n message: `Referenced ${prefix} '${value}' not found`,\n entity: {\n type: entityType,\n id: recordId\n },\n fixable: false,\n context: {\n field: \"references\",\n actual: refStr,\n expected: `existing ${prefix} record`\n }\n });\n } else {\n // EARS-22: Check for soft delete\n // Most records have status in their schema\n const refPayload = referencedRecord.payload;\n if ('status' in refPayload && refPayload.status === \"discarded\") {\n results.push({\n level: \"warning\",\n filePath,\n validator: \"SOFT_DELETE_DETECTION\",\n message: `Referenced ${prefix} '${value}' has status 'discarded'`,\n entity: {\n type: entityType,\n id: recordId\n },\n fixable: false\n });\n }\n }\n } catch (error) {\n // Silently continue if reference doesn't exist (already reported)\n }\n }\n }\n }\n }\n\n // EARS-21: Validate bidirectional consistency (Task ↔ Cycle)\n // TaskRecord has cycleIds[] and CycleRecord has taskIds[]\n if (entityType === \"task\" && isTaskRecord(payload) && payload.cycleIds && Array.isArray(payload.cycleIds)) {\n for (const cycleId of payload.cycleIds) {\n try {\n const cycleRecord = await this.recordStore.read(cycleId);\n if (cycleRecord) {\n // CycleRecord has taskIds in its schema\n const cyclePayload = cycleRecord.payload as CycleRecord;\n if (cyclePayload.taskIds && Array.isArray(cyclePayload.taskIds)) {\n if (!cyclePayload.taskIds.includes(recordId)) {\n results.push({\n level: \"warning\",\n filePath,\n validator: \"BIDIRECTIONAL_CONSISTENCY\",\n message: `Task references cycle '${cycleId}' in cycleIds but cycle doesn't include this task in taskIds[]`,\n entity: {\n type: entityType,\n id: recordId\n },\n fixable: true,\n context: {\n field: \"cycleIds\",\n actual: cycleId,\n expected: `cycle should include task ${recordId} in taskIds[]`\n }\n });\n }\n }\n }\n } catch (error) {\n // Already reported as REFERENTIAL_INTEGRITY above\n }\n }\n }\n\n if (entityType === \"cycle\" && isCycleRecord(payload) && payload.taskIds && Array.isArray(payload.taskIds)) {\n for (const taskId of payload.taskIds) {\n try {\n const taskRecord = await this.recordStore.read(taskId);\n if (taskRecord) {\n // TaskRecord has cycleIds in its schema\n const taskPayload = taskRecord.payload as TaskRecord;\n if (!taskPayload.cycleIds || !taskPayload.cycleIds.includes(recordId)) {\n results.push({\n level: \"warning\",\n filePath,\n validator: \"BIDIRECTIONAL_CONSISTENCY\",\n message: `Cycle includes task '${taskId}' in taskIds[] but task doesn't include this cycle in cycleIds[]`,\n entity: {\n type: entityType,\n id: recordId\n },\n fixable: true,\n context: {\n field: \"taskIds\",\n actual: taskPayload.cycleIds || [],\n expected: `task should include cycle ${recordId} in cycleIds[]`\n }\n });\n }\n }\n } catch (error) {\n // Already reported as REFERENTIAL_INTEGRITY\n }\n }\n }\n\n return results;\n }\n\n /**\n * Validates actorIds (resolution in .gitgov/actors/).\n * Implements EARS-19.\n * @private\n */\n private async validateActors(\n record: GitGovRecord,\n recordId: string,\n filePath: string,\n entityType: Exclude<GitGovRecordType, 'custom'>\n ): Promise<LintResult[]> {\n const results: LintResult[] = [];\n\n // Extract all actorIds from signatures\n if (record.header && record.header.signatures && Array.isArray(record.header.signatures)) {\n for (const signature of record.header.signatures) {\n if (signature.keyId) {\n try {\n const actorRecord = await this.recordStore.read(signature.keyId);\n if (!actorRecord) {\n results.push({\n level: \"warning\",\n filePath,\n validator: \"ACTOR_RESOLUTION\",\n message: `Actor '${signature.keyId}' referenced in signature not found in .gitgov/actors/`,\n entity: {\n type: entityType,\n id: recordId\n },\n fixable: false,\n context: {\n field: \"signatures.keyId\",\n actual: signature.keyId,\n expected: \"existing actor record\"\n }\n });\n }\n } catch (error) {\n results.push({\n level: \"warning\",\n filePath,\n validator: \"ACTOR_RESOLUTION\",\n message: `Failed to validate actor '${signature.keyId}': ${error instanceof Error ? error.message : String(error)}`,\n entity: {\n type: entityType,\n id: recordId\n },\n fixable: false\n });\n }\n }\n }\n }\n\n // Check actorId field in payload (for some record types)\n // Note: Most records don't have actorId in their schema, but it may exist in legacy records\n const payload = record.payload;\n if ('actorId' in payload && payload.actorId) {\n const actorId = (payload as { actorId?: string }).actorId;\n if (actorId) {\n try {\n const actorRecord = await this.recordStore.read(actorId);\n if (!actorRecord) {\n results.push({\n level: \"warning\",\n filePath,\n validator: \"ACTOR_RESOLUTION\",\n message: `Actor '${actorId}' referenced in payload not found`,\n entity: {\n type: entityType,\n id: recordId\n },\n fixable: false,\n context: {\n field: \"actorId\",\n actual: actorId,\n expected: \"existing actor record\"\n }\n });\n }\n } catch (error) {\n // Silently continue\n }\n }\n }\n\n return results;\n }\n\n /**\n * Applies a specific repair based on the problem type.\n * @private\n */\n private async applyFix(result: LintResult, options: FixOptions, allErrors?: LintResult[]): Promise<void> {\n switch (result.validator) {\n case \"EMBEDDED_METADATA_STRUCTURE\":\n await this.fixLegacyRecord(result, options, allErrors);\n break;\n\n case \"BIDIRECTIONAL_CONSISTENCY\":\n await this.fixBidirectionalReference(result);\n break;\n\n case \"CHECKSUM_VERIFICATION\":\n await this.recalculateChecksum(result);\n break;\n\n case \"SIGNATURE_STRUCTURE\":\n await this.fixSignatureStructure(result, options, allErrors || [result]);\n break;\n\n default:\n throw new Error(`Fix not implemented for validator: ${result.validator}`);\n }\n }\n\n /**\n * Repairs a legacy record by wrapping it in embedded metadata.\n * Implements EARS-24: Normalize legacy records with signature.\n * @private\n */\n private async fixLegacyRecord(result: LintResult, options: FixOptions, allErrors?: LintResult[]): Promise<void> {\n if (!options.privateKey) {\n throw new Error(\"privateKey is required in FixOptions to sign legacy records\");\n }\n\n // Read the raw file\n // All records MUST have EmbeddedMetadataRecord structure (header + payload)\n const fileContent = await this.fileSystem.readFile(result.filePath, \"utf-8\");\n const rawData = JSON.parse(fileContent) as unknown;\n\n // Validate that it has the required EmbeddedMetadataRecord structure\n if (typeof rawData !== 'object' || rawData === null || !('header' in rawData) || !('payload' in rawData)) {\n throw new Error(`Record does not have EmbeddedMetadataRecord structure (missing header or payload): ${result.filePath}`);\n }\n\n const rawObj = rawData as Record<string, unknown>;\n if (!rawObj['header'] || !rawObj['payload']) {\n throw new Error(`Record does not have EmbeddedMetadataRecord structure (missing header or payload): ${result.filePath}`);\n }\n\n const embeddedRecord = rawData as GitGovRecord;\n\n // Check if there are errors about additional properties in payload\n const hasAdditionalProperties = allErrors?.some(e =>\n e.message.includes(\"must NOT have additional properties\") &&\n e.message.includes(\"/payload\")\n );\n\n if (hasAdditionalProperties) {\n // Remove additional properties from payload by loading it through the factory\n // which will validate and return only valid properties\n const entityType = this.getEntityType(result.entity.id);\n let cleanPayload: GitGovRecordPayload;\n\n try {\n // Try to load the payload through the appropriate factory\n // This will fail if there are additional properties, but we can catch and clean manually\n switch (entityType) {\n case 'task':\n // Extract only valid properties from task schema\n const taskPayload = embeddedRecord.payload as Partial<TaskRecord>;\n cleanPayload = {\n id: taskPayload.id!,\n title: taskPayload.title!,\n status: taskPayload.status!,\n priority: taskPayload.priority!,\n description: taskPayload.description!,\n ...(taskPayload.cycleIds && { cycleIds: taskPayload.cycleIds }),\n ...(taskPayload.tags && { tags: taskPayload.tags }),\n ...(taskPayload.references && { references: taskPayload.references }),\n ...(taskPayload.notes && { notes: taskPayload.notes })\n } as TaskRecord;\n break;\n case 'cycle':\n const cyclePayload = embeddedRecord.payload as Partial<CycleRecord>;\n cleanPayload = {\n id: cyclePayload.id!,\n title: cyclePayload.title!,\n status: cyclePayload.status!,\n ...(cyclePayload.taskIds && { taskIds: cyclePayload.taskIds }),\n ...(cyclePayload.childCycleIds && { childCycleIds: cyclePayload.childCycleIds }),\n ...(cyclePayload.tags && { tags: cyclePayload.tags }),\n ...(cyclePayload.notes && { notes: cyclePayload.notes })\n } as CycleRecord;\n break;\n default:\n // For other types, just recalculate checksum (can't safely remove properties without schema)\n await this.recalculateChecksum(result);\n return;\n }\n\n // Recalculate checksum with cleaned payload\n const payloadChecksum = calculatePayloadChecksum(cleanPayload);\n\n // Regenerate signature\n const signature = signPayload(\n cleanPayload,\n options.privateKey,\n options.keyId || result.entity.id,\n 'author',\n 'Signature regenerated after removing additional properties'\n );\n\n // Update record\n const fixedRecord: GitGovRecord = {\n header: {\n ...embeddedRecord.header,\n payloadChecksum,\n signatures: [signature]\n },\n payload: cleanPayload\n };\n\n await this.fileSystem.writeFile(\n result.filePath,\n JSON.stringify(fixedRecord, null, 2)\n );\n\n logger.info(`Removed additional properties from payload: ${result.filePath}`);\n return;\n } catch (error) {\n // If cleaning fails, fall back to recalculating checksum\n logger.warn(`Could not clean additional properties, recalculating checksum only: ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n\n // If no additional properties or cleaning failed, just recalculate checksum\n await this.recalculateChecksum(result);\n }\n\n /**\n * Repairs bidirectional inconsistencies between Task and Cycle.\n * Implements EARS-25: Sync bidirectional references.\n * @private\n */\n private async fixBidirectionalReference(result: LintResult): Promise<void> {\n const entityType = result.entity.type;\n const recordId = result.entity.id;\n\n if (entityType === \"task\") {\n // Task references cycles in cycleIds[] that don't include it in their taskIds[]\n const taskRecord = await this.recordStore.read(recordId);\n if (!taskRecord) return;\n\n const taskPayload = taskRecord.payload as TaskRecord;\n if (!taskPayload.cycleIds || taskPayload.cycleIds.length === 0) return;\n\n // For each cycleId in the task, ensure the cycle includes this task\n for (const cycleId of taskPayload.cycleIds) {\n const cycleRecord = await this.recordStore.read(cycleId);\n if (!cycleRecord) continue;\n\n const mutableCyclePayload = cycleRecord.payload as CycleRecord;\n if (!mutableCyclePayload.taskIds) {\n mutableCyclePayload.taskIds = [];\n }\n\n if (!mutableCyclePayload.taskIds.includes(recordId)) {\n mutableCyclePayload.taskIds.push(recordId);\n\n // Write updated cycle\n const cycleFilePath = this.getFilePath(cycleId);\n await this.fileSystem.writeFile(\n cycleFilePath,\n JSON.stringify(cycleRecord, null, 2)\n );\n\n logger.info(`Fixed bidirectional reference: Added task ${recordId} to cycle ${cycleId}`);\n }\n }\n } else if (entityType === \"cycle\") {\n // Cycle includes tasks in taskIds[] that don't include it in their cycleIds[]\n const cycleRecord = await this.recordStore.read(recordId);\n if (!cycleRecord) return;\n\n const cyclePayload = cycleRecord.payload as CycleRecord;\n if (!cyclePayload.taskIds || cyclePayload.taskIds.length === 0) return;\n\n // Extract taskId from context if available, otherwise fix all tasks\n const taskIdFromContext = result.context?.actual as string | undefined;\n const tasksToFix = taskIdFromContext ? [taskIdFromContext] : cyclePayload.taskIds;\n\n for (const taskId of tasksToFix) {\n const taskRecord = await this.recordStore.read(taskId);\n if (!taskRecord) continue;\n\n const taskPayload = taskRecord.payload as TaskRecord;\n if (!taskPayload.cycleIds) {\n taskPayload.cycleIds = [];\n }\n\n if (!taskPayload.cycleIds.includes(recordId)) {\n taskPayload.cycleIds.push(recordId);\n\n // Write updated task\n const taskFilePath = this.getFilePath(taskId);\n await this.fileSystem.writeFile(\n taskFilePath,\n JSON.stringify(taskRecord, null, 2)\n );\n\n logger.info(`Fixed bidirectional reference: Added cycle ${recordId} to task ${taskId} in cycleIds[]`);\n }\n }\n }\n }\n\n /**\n * Recalculates the checksum of a record.\n * Implements checksum repair for corrupted checksums.\n * @private\n */\n private async recalculateChecksum(result: LintResult): Promise<void> {\n const fileContent = await this.fileSystem.readFile(result.filePath, \"utf-8\");\n const record = JSON.parse(fileContent) as GitGovRecord;\n\n if (!record.header || !record.payload) {\n throw new Error(\"Cannot recalculate checksum: invalid record structure\");\n }\n\n // Recalculate checksum\n const correctChecksum = calculatePayloadChecksum(record.payload);\n record.header.payloadChecksum = correctChecksum;\n\n // Write updated record\n await this.fileSystem.writeFile(\n result.filePath,\n JSON.stringify(record, null, 2)\n );\n\n logger.info(`Recalculated checksum for: ${result.filePath}`);\n }\n\n /**\n * Creates a backup of a file.\n * @private\n */\n private async createBackup(filePath: string): Promise<string> {\n const timestamp = Date.now();\n const backupPath = `${filePath}.backup-${timestamp}`;\n\n const content = await this.fileSystem.readFile(filePath, \"utf-8\");\n await this.fileSystem.writeFile(backupPath, content);\n\n // Store backup path for later restoration\n this.lastBackupPath = backupPath;\n\n return backupPath;\n }\n\n /**\n * Fixes signature structure errors by analyzing specific errors and applying targeted fixes.\n * Reads the record directly (bypassing validation), extracts payload, and fixes signature issues:\n * - Adds missing 'notes' field with a valid value\n * - Removes additional properties not allowed\n * - Regenerates invalid signatures\n * Works even when signatures have invalid format (e.g., \"placeholder\" instead of base64).\n * @private\n */\n private async fixSignatureStructure(result: LintResult, options: FixOptions, allErrors: LintResult[]): Promise<void> {\n if (!options.privateKey) {\n throw new Error('Private key required to fix signature structure errors');\n }\n\n // Read the record file directly (bypassing validation - signatures may be invalid)\n // All records MUST have EmbeddedMetadataRecord structure (header + payload)\n const content = await this.fileSystem.readFile(result.filePath, 'utf-8');\n let raw: unknown;\n try {\n raw = JSON.parse(content);\n } catch (parseError) {\n throw new Error(`Invalid JSON in file: ${result.filePath}`);\n }\n\n // Validate that it has the required EmbeddedMetadataRecord structure\n if (typeof raw !== 'object' || raw === null || !('header' in raw) || !('payload' in raw)) {\n throw new Error(`Record does not have EmbeddedMetadataRecord structure (missing header or payload): ${result.filePath}`);\n }\n\n const rawObj = raw as Record<string, unknown>;\n if (!rawObj['header'] || !rawObj['payload']) {\n throw new Error(`Record does not have EmbeddedMetadataRecord structure (missing header or payload): ${result.filePath}`);\n }\n\n const embeddedRecord = raw as GitGovRecord;\n const payload = embeddedRecord.payload;\n const existingHeader = embeddedRecord.header;\n\n // Recalculate checksum\n const payloadChecksum = calculatePayloadChecksum(payload);\n\n // Analyze all errors to determine what needs to be fixed\n const needsNotes = allErrors.some(e => e.message.includes(\"must have required property 'notes'\"));\n const hasAdditionalProperties = allErrors.some(e => e.message.includes(\"must NOT have additional properties\"));\n const hasInvalidSignature = allErrors.some(e => e.message.includes(\"signature: must match pattern\"));\n\n // Determine keyId and role - try to use existing signature values, or fallback to options/entity id\n let keyId = options.keyId || result.entity.id;\n let role = 'author';\n let notes = 'Signature regenerated by lint --fix';\n\n if (existingHeader?.signatures?.[0]) {\n const existingSig = existingHeader.signatures[0];\n // Prefer keyId from existing signature if available\n if (existingSig.keyId) {\n keyId = existingSig.keyId;\n }\n // Preserve role if it exists and is valid\n if (existingSig.role) {\n role = existingSig.role;\n }\n // Preserve notes if they exist and are valid, otherwise use default\n if (existingSig.notes && typeof existingSig.notes === 'string' && existingSig.notes.length > 0) {\n notes = existingSig.notes;\n }\n }\n\n // If we need to add notes but don't have a valid one, use a sensible default\n if (needsNotes && !notes) {\n notes = 'Signature regenerated by lint --fix';\n }\n\n // Determine if we need to regenerate signature or just fix structure\n // EARS-40: Only regenerate if there are other errors besides missing notes\n // If only notes is missing, just add it without regenerating the signature\n const needsRegeneration = hasInvalidSignature || hasAdditionalProperties || (needsNotes && (hasInvalidSignature || hasAdditionalProperties));\n\n let fixedSignature: Signature;\n if (needsRegeneration) {\n // Regenerate signature using private key (this creates a properly formatted signature)\n fixedSignature = signPayload(\n payload,\n options.privateKey,\n keyId,\n role,\n notes\n );\n } else {\n // EARS-40: Just fix the structure without regenerating (preserve existing signature if valid)\n // This handles the case where only notes is missing - we add notes without regenerating\n const existingSig = existingHeader?.signatures?.[0];\n fixedSignature = {\n keyId: existingSig?.keyId || keyId,\n role: existingSig?.role || role,\n notes: needsNotes ? (notes || 'Signature regenerated by lint --fix') : (existingSig?.notes || notes),\n signature: existingSig?.signature || '',\n timestamp: existingSig?.timestamp || Math.floor(Date.now() / 1000)\n };\n }\n\n // Create fixed record with proper structure\n // Preserve existing header fields if they exist, but replace signatures\n const entityType = this.getEntityType(result.entity.id);\n const fixedRecord: GitGovRecord = {\n header: {\n version: existingHeader?.version || '1.0',\n type: (existingHeader?.type || entityType) as GitGovRecordType,\n payloadChecksum,\n signatures: [fixedSignature] // Replace all signatures with one valid signature\n },\n payload\n };\n\n // Write fixed record\n await this.fileSystem.writeFile(\n result.filePath,\n JSON.stringify(fixedRecord, null, 2)\n );\n\n const action = needsRegeneration ? 'regenerated' : 'fixed structure';\n logger.info(`Fixed signature structure: ${result.filePath} (${action} signature for ${keyId})`);\n }\n\n /**\n * Restores a file from its most recent backup.\n * Implements EARS-32: Restore backup if fix fails.\n * @private\n */\n private async restoreBackup(filePath: string): Promise<void> {\n // First try to use the last backup path we created\n if (this.lastBackupPath) {\n try {\n const exists = await this.fileSystem.exists(this.lastBackupPath);\n if (exists) {\n const backupContent = await this.fileSystem.readFile(this.lastBackupPath, \"utf-8\");\n await this.fileSystem.writeFile(filePath, backupContent);\n logger.info(`Restored ${filePath} from backup ${this.lastBackupPath}`);\n this.lastBackupPath = null; // Clear after use\n return;\n }\n } catch (error) {\n // Fall through to timestamp search\n }\n }\n\n // Fallback: Find most recent backup file by trying recent timestamps\n const now = Date.now();\n const timeWindows = [0, 1000, 5000, 10000, 60000]; // 0s, 1s, 5s, 10s, 1min ago\n\n for (const delta of timeWindows) {\n const timestamp = now - delta;\n const backupPath = `${filePath}.backup-${timestamp}`;\n\n try {\n const exists = await this.fileSystem.exists(backupPath);\n if (exists) {\n // Restore from backup\n const backupContent = await this.fileSystem.readFile(backupPath, \"utf-8\");\n await this.fileSystem.writeFile(filePath, backupContent);\n logger.info(`Restored ${filePath} from backup ${backupPath}`);\n return;\n }\n } catch (error) {\n // Try next backup\n continue;\n }\n }\n\n throw new Error(`No backup found for ${filePath}`);\n }\n}\n\n","// Main module\nexport { SyncModule } from \"./sync_module\";\nexport { PullScheduler } from \"./pull_scheduler\";\n\n// Types\nexport type {\n SyncModuleDependencies,\n SyncPushOptions,\n SyncPushResult,\n SyncPullOptions,\n SyncPullResult,\n SyncResolveOptions,\n SyncResolveResult,\n ConflictInfo,\n ConflictType,\n IntegrityViolation,\n AuditStateOptions,\n AuditStateReport,\n AuditScope,\n ExpectedFilesScope,\n ConflictDiff,\n ConflictFileDiff,\n StateDeltaFile,\n} from \"./types\";\n\nexport type {\n PullSchedulerConfig,\n PullSchedulerDependencies,\n PullSchedulerResult,\n} from \"./pull_scheduler\";\n\n// Errors\nexport {\n SyncError,\n PushFromStateBranchError,\n IntegrityViolationError,\n ConflictMarkersPresentError,\n NoRebaseInProgressError,\n StateBranchSetupError,\n UncommittedChangesError,\n CryptoModuleRequiredError,\n // Type guards for error handling (additive - backward compatible)\n isSyncError,\n isPushFromStateBranchError,\n isIntegrityViolationError,\n isConflictMarkersPresentError,\n isUncommittedChangesError,\n isNoRebaseInProgressError,\n isStateBranchSetupError,\n isCryptoModuleRequiredError,\n} from \"./errors\";\n\n","/**\n * Base error class for all sync-related errors\n */\nexport class SyncError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"SyncError\";\n Object.setPrototypeOf(this, SyncError.prototype);\n }\n}\n\n/**\n * Error thrown when attempting to push from gitgov-state branch\n */\nexport class PushFromStateBranchError extends SyncError {\n public branch: string;\n\n constructor(branchName: string) {\n super(\n `Cannot push from ${branchName} branch. ` +\n `Please switch to a working branch before pushing state.`\n );\n this.name = \"PushFromStateBranchError\";\n this.branch = branchName;\n Object.setPrototypeOf(this, PushFromStateBranchError.prototype);\n }\n}\n\n/**\n * Error thrown when integrity violations are detected during audit\n */\nexport class IntegrityViolationError extends SyncError {\n constructor(\n public violations: Array<{\n type: \"resolution\" | \"signature\" | \"checksum\" | \"missing_file\";\n details: string;\n }>\n ) {\n const violationSummary = violations\n .map((v) => `${v.type}: ${v.details}`)\n .join(\"; \");\n super(`Integrity violations detected: ${violationSummary}`);\n this.name = \"IntegrityViolationError\";\n Object.setPrototypeOf(this, IntegrityViolationError.prototype);\n }\n}\n\n/**\n * Error thrown when conflict markers are still present in files\n */\nexport class ConflictMarkersPresentError extends SyncError {\n constructor(public filesWithMarkers: string[]) {\n super(\n `Conflict markers still present in ${filesWithMarkers.length} file(s). ` +\n `Please resolve all conflicts before continuing.`\n );\n this.name = \"ConflictMarkersPresentError\";\n Object.setPrototypeOf(this, ConflictMarkersPresentError.prototype);\n }\n}\n\n/**\n * Error thrown when attempting to resolve conflict without rebase in progress\n */\nexport class NoRebaseInProgressError extends SyncError {\n constructor() {\n super(\n `No rebase in progress. Cannot resolve conflict without an active rebase. ` +\n `Use 'pullState' or 'pushState' to trigger synchronization first.`\n );\n this.name = \"NoRebaseInProgressError\";\n Object.setPrototypeOf(this, NoRebaseInProgressError.prototype);\n }\n}\n\n/**\n * Error thrown when CryptoModule is required but not available\n */\nexport class CryptoModuleRequiredError extends SyncError {\n constructor(operation: string) {\n super(\n `CryptoModule is required for ${operation} operation. ` +\n `Please provide crypto_module in SyncModuleDependencies.`\n );\n this.name = \"CryptoModuleRequiredError\";\n Object.setPrototypeOf(this, CryptoModuleRequiredError.prototype);\n }\n}\n\n/**\n * Error thrown when state branch cannot be created or configured\n */\nexport class StateBranchSetupError extends SyncError {\n constructor(\n public reason: string,\n public underlyingError?: Error\n ) {\n super(`Failed to setup state branch: ${reason}`);\n this.name = \"StateBranchSetupError\";\n Object.setPrototypeOf(this, StateBranchSetupError.prototype);\n }\n}\n\n/**\n * Error thrown when uncommitted changes exist in state branch\n */\nexport class UncommittedChangesError extends SyncError {\n public branch: string;\n\n constructor(branchName: string) {\n super(\n `Uncommitted changes detected in ${branchName}. ` +\n `Please commit or stash changes before synchronizing.`\n );\n this.name = \"UncommittedChangesError\";\n this.branch = branchName;\n Object.setPrototypeOf(this, UncommittedChangesError.prototype);\n }\n}\n\n/**\n * Type guards for error handling\n * \n * These functions enable type-safe error handling by narrowing the error type.\n * They are additive and don't break any existing code.\n * \n * Example usage:\n * ```typescript\n * try {\n * await syncModule.pushState(options);\n * } catch (error) {\n * if (isPushFromStateBranchError(error)) {\n * // TypeScript knows error.branch exists here\n * console.log(`Cannot push from ${error.branch}`);\n * }\n * }\n * ```\n */\n\nexport function isSyncError(error: unknown): error is SyncError {\n return error instanceof SyncError;\n}\n\nexport function isPushFromStateBranchError(\n error: unknown\n): error is PushFromStateBranchError {\n return error instanceof PushFromStateBranchError;\n}\n\nexport function isIntegrityViolationError(\n error: unknown\n): error is IntegrityViolationError {\n return error instanceof IntegrityViolationError;\n}\n\nexport function isConflictMarkersPresentError(\n error: unknown\n): error is ConflictMarkersPresentError {\n return error instanceof ConflictMarkersPresentError;\n}\n\nexport function isUncommittedChangesError(\n error: unknown\n): error is UncommittedChangesError {\n return error instanceof UncommittedChangesError;\n}\n\nexport function isNoRebaseInProgressError(\n error: unknown\n): error is NoRebaseInProgressError {\n return error instanceof NoRebaseInProgressError;\n}\n\nexport function isStateBranchSetupError(\n error: unknown\n): error is StateBranchSetupError {\n return error instanceof StateBranchSetupError;\n}\n\nexport function isCryptoModuleRequiredError(\n error: unknown\n): error is CryptoModuleRequiredError {\n return error instanceof CryptoModuleRequiredError;\n}\n\n","import type { GitModule } from \"../git\";\nimport type { ConfigManager } from \"../config_manager\";\nimport type { IIdentityAdapter } from \"../adapters/identity_adapter\";\nimport type { LintModule, LintReport } from \"../lint\";\nimport type { IIndexerAdapter } from \"../adapters/indexer_adapter\";\n\n/**\n * SyncModule Dependencies\n */\nexport interface SyncModuleDependencies {\n /** Low-level Git module (required) */\n git: GitModule;\n /** Configuration manager (required) */\n config: ConfigManager;\n /** Identity adapter for signature verification and signing (required) */\n identity: IIdentityAdapter;\n /** Lint module for record validation (required) */\n lint: LintModule;\n /** Indexer adapter for automatic re-indexing after pull/resolve (required) */\n indexer: IIndexerAdapter;\n}\n\n/**\n * Options for pushState operation\n */\nexport interface SyncPushOptions {\n /** Branch to push from (default: current branch) */\n sourceBranch?: string;\n /** Actor ID publishing the state (required) */\n actorId: string;\n /** Simulate operation without making real changes */\n dryRun?: boolean;\n /** Force push even if there are unsynced remote changes */\n force?: boolean;\n}\n\n/**\n * Result of pushState operation\n */\nexport interface SyncPushResult {\n /** Indicates if the operation was successful */\n success: boolean;\n /** Number of files synced */\n filesSynced: number;\n /** Name of the branch pushed from */\n sourceBranch: string;\n /** Created commit hash (null if no changes or dry-run) */\n commitHash: string | null;\n /** Created commit message */\n commitMessage: string | null;\n /** Indicates if a conflict was detected during reconciliation */\n conflictDetected: boolean;\n /** Conflict information if detected */\n conflictInfo?: ConflictInfo;\n /** Error message if operation failed */\n error?: string;\n}\n\n/**\n * Options for pullState operation\n */\nexport interface SyncPullOptions {\n /** Force re-indexing even if there are no new changes */\n forceReindex?: boolean;\n}\n\n/**\n * Result of pullState operation\n */\nexport interface SyncPullResult {\n /** Indicates if the operation was successful */\n success: boolean;\n /** Indicates if there were new remote changes */\n hasChanges: boolean;\n /** Number of files updated */\n filesUpdated: number;\n /** Indicates if re-indexing was executed */\n reindexed: boolean;\n /** Indicates if a conflict was detected during pull */\n conflictDetected: boolean;\n /** Conflict information if detected */\n conflictInfo?: ConflictInfo;\n /** Error message if operation failed */\n error?: string;\n}\n\n/**\n * Options for resolveConflict operation\n */\nexport interface SyncResolveOptions {\n /** Justification for the conflict resolution (required) */\n reason: string;\n /** Actor ID resolving the conflict (required) */\n actorId: string;\n}\n\n/**\n * Result of resolveConflict operation\n */\nexport interface SyncResolveResult {\n /** Indicates if the operation was successful */\n success: boolean;\n /** Commit hash of the created rebase commit */\n rebaseCommitHash: string;\n /** Commit hash of the signed resolution commit */\n resolutionCommitHash: string;\n /** Number of conflicts resolved */\n conflictsResolved: number;\n /** Actor ID who resolved the conflict */\n resolvedBy: string;\n /** Reason for resolution */\n reason: string;\n /** Error message if operation failed */\n error?: string;\n}\n\n/**\n * Detailed information about a detected conflict\n */\nexport interface ConflictInfo {\n /** Type of conflict detected */\n type: ConflictType;\n /** Files affected by the conflict */\n affectedFiles: string[];\n /** Descriptive message of the conflict */\n message: string;\n /** Instructions to resolve the conflict */\n resolutionSteps: string[];\n}\n\n/**\n * Auxiliary type to identify the conflict type\n */\nexport type ConflictType =\n | \"rebase_conflict\" // Conflict during automatic rebase\n | \"merge_conflict\" // Conflict during merge\n | \"integrity_violation\" // Integrity violation (rebase without resolution)\n | \"unresolved_markers\"; // Conflict markers present in files\n\n/**\n * Information about a detected integrity violation\n */\nexport interface IntegrityViolation {\n /** Commit hash of the rebase commit without resolution */\n rebaseCommitHash: string;\n /** Message of the rebase commit */\n commitMessage: string;\n /** Timestamp of the commit */\n timestamp: string;\n /** Author of the commit */\n author: string;\n}\n\n/**\n * Verification scope for state audit\n */\nexport type AuditScope =\n | \"current\" // Only verify Records in the current branch (useful for pre-push)\n | \"state-branch\" // Only verify Records in gitgov-state (useful for remote audit)\n | \"all\"; // Verify both (useful for complete audit)\n\n/**\n * Scope for expected files verification\n */\nexport type ExpectedFilesScope =\n | \"head\" // Only verify in HEAD of gitgov-state (default, faster)\n | \"all-commits\"; // Verify in all commits (more exhaustive, slower)\n\n/**\n * Options for state audit\n */\nexport interface AuditStateOptions {\n /** Verification scope: which Records to verify (default: \"all\") */\n scope?: AuditScope;\n /** Verify signatures in Records (default: true) */\n verifySignatures?: boolean;\n /** Verify checksums of Records (default: true) */\n verifyChecksums?: boolean;\n /** Verify that expected files exist (default: true) */\n verifyExpectedFiles?: boolean;\n /** Scope for expected files verification (default: \"head\") */\n expectedFilesScope?: ExpectedFilesScope;\n /** Path of specific files to audit (default: all in .gitgov/) */\n filePaths?: string[];\n}\n\n/**\n * Conflict diff information for a file\n */\nexport interface ConflictFileDiff {\n /** Path of the conflicted file */\n filePath: string;\n /** Content of the local version (ours) */\n localContent: string;\n /** Content of the remote version (theirs) */\n remoteContent: string;\n /** Base content (common ancestor) */\n baseContent: string | null;\n /** Lines with conflict markers (if they still exist) */\n conflictMarkers?: Array<{\n line: number;\n marker: string; // \"<<<<<\", \"=====\", \">>>>>\"\n }>;\n}\n\n/**\n * Structured conflict diff\n */\nexport interface ConflictDiff {\n /** Conflicted files with their diff */\n files: ConflictFileDiff[];\n /** Descriptive message of the conflict */\n message: string;\n /** Instructions to resolve */\n resolutionSteps: string[];\n}\n\n/**\n * Complete state audit report\n * \n * This report combines SyncModule-specific audits (rebase integrity, commits)\n * with structural validation from LintModule (signatures, checksums, schemas).\n */\nexport interface AuditStateReport {\n /** Indicates if the audit passed without violations */\n passed: boolean;\n /** Scope used for the audit */\n scope: AuditScope;\n /** Total commits analyzed */\n totalCommits: number;\n /** Rebase commits found */\n rebaseCommits: number;\n /** Resolution commits found */\n resolutionCommits: number;\n /** Integrity violations of resolutions (SyncModule-specific) */\n integrityViolations: IntegrityViolation[];\n /** Summary message of the audit */\n summary: string;\n /** Complete LintModule report for structural validation (signatures, checksums, schemas, etc.) */\n lintReport?: LintReport;\n}\n\n/**\n * Information of a changed file in the delta\n */\nexport interface StateDeltaFile {\n /** File status: Added, Modified, Deleted */\n status: \"A\" | \"M\" | \"D\";\n /** File path */\n file: string;\n}\n\n/**\n * Whitelist of files and directories allowed for synchronization.\n * Only these paths will be copied from .gitgov/ to gitgov-state.\n * \n * [EARS-42] Explicitly defines what gets synced, avoiding temporary files,\n * builds, scripts, and local configurations like .gitignore\n * \n * Excluded (not in whitelist):\n * - builds/ (local build artifacts)\n * - scripts/ (local helper scripts)\n * - .gitignore (per-branch file, should not be synced)\n * - *.backup-* (backup files)\n * - *.tmp (temporary files)\n * - .DS_Store (macOS metadata)\n */\n/**\n * Directories to SYNC to gitgov-state branch (shared state)\n * Only *.json files within these directories will be synced\n */\nexport const SYNC_DIRECTORIES = [\n 'tasks',\n 'cycles',\n 'actors',\n 'agents',\n 'feedback',\n 'executions',\n 'changelogs',\n 'workflows',\n] as const;\n\n/**\n * Root-level files to SYNC to gitgov-state\n */\nexport const SYNC_ROOT_FILES = [\n 'config.json',\n] as const;\n\n/**\n * File extensions that are ALLOWED to be synced\n * Only these extensions will be copied to gitgov-state\n */\nexport const SYNC_ALLOWED_EXTENSIONS = ['.json'] as const;\n\n/**\n * File patterns that are NEVER synced (even if they match allowed extensions)\n * These are excluded from gitgov-state branch\n */\nexport const SYNC_EXCLUDED_PATTERNS = [\n /\\.key$/, // Private keys (e.g., actors/*.key)\n /\\.backup$/, // Backup files from lint\n /\\.backup-\\d+$/, // Numbered backup files\n /\\.tmp$/, // Temporary files\n /\\.bak$/, // Backup files\n] as const;\n\n/**\n * Files/directories that are LOCAL-ONLY (never synced to gitgov-state)\n * These are regenerated or machine-specific\n */\nexport const LOCAL_ONLY_FILES = [\n 'index.json', // Generated index, rebuilt on each machine\n '.session.json', // Local session state for current user/agent\n 'gitgov', // Local binary/script\n] as const;\n\n","import type { GitModule } from \"../git\";\nimport type { ConfigManager } from \"../config_manager\";\nimport type { IIdentityAdapter } from \"../adapters/identity_adapter\";\nimport type { LintModule } from \"../lint\";\nimport type { IIndexerAdapter } from \"../adapters/indexer_adapter\";\nimport { createLogger } from \"../logger/logger\";\nimport type { EmbeddedMetadataRecord, GitGovRecordPayload } from \"../types\";\nimport {\n SyncError,\n PushFromStateBranchError,\n ConflictMarkersPresentError,\n NoRebaseInProgressError,\n StateBranchSetupError,\n UncommittedChangesError,\n} from \"./errors\";\nimport type {\n SyncModuleDependencies,\n SyncPushOptions,\n SyncPushResult,\n SyncPullOptions,\n SyncPullResult,\n SyncResolveOptions,\n SyncResolveResult,\n IntegrityViolation,\n AuditStateOptions,\n AuditStateReport,\n ConflictDiff,\n ConflictFileDiff,\n StateDeltaFile,\n} from \"./types\";\nimport { readFileSync, existsSync, promises as fs, writeFileSync } from \"fs\";\nimport { join } from \"path\";\nimport path from \"path\";\nimport { exec } from \"child_process\";\nimport { promisify } from \"util\";\nimport os from \"os\";\nimport { SYNC_DIRECTORIES, SYNC_ROOT_FILES, SYNC_ALLOWED_EXTENSIONS, SYNC_EXCLUDED_PATTERNS, LOCAL_ONLY_FILES } from \"./types\";\n\n// Create reusable helper\nconst execAsync = promisify(exec);\n\nconst logger = createLogger(\"[SyncModule] \");\n\n/**\n * Helper: Check if a file should be synced to gitgov-state\n * Returns true only for allowed *.json files in sync directories\n */\nfunction shouldSyncFile(filePath: string): boolean {\n const fileName = path.basename(filePath);\n const ext = path.extname(filePath);\n\n // Check if extension is allowed\n if (!SYNC_ALLOWED_EXTENSIONS.includes(ext as typeof SYNC_ALLOWED_EXTENSIONS[number])) {\n return false;\n }\n\n // Check if file matches any excluded pattern\n for (const pattern of SYNC_EXCLUDED_PATTERNS) {\n if (pattern.test(fileName)) {\n return false;\n }\n }\n\n // Check if it's a local-only file\n if (LOCAL_ONLY_FILES.includes(fileName as typeof LOCAL_ONLY_FILES[number])) {\n return false;\n }\n\n return true;\n}\n\n/**\n * Helper: Recursively get all files in a directory\n */\nasync function getAllFiles(dir: string, baseDir: string = dir): Promise<string[]> {\n const files: string[] = [];\n\n try {\n const entries = await fs.readdir(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n const subFiles = await getAllFiles(fullPath, baseDir);\n files.push(...subFiles);\n } else if (entry.isFile()) {\n files.push(path.relative(baseDir, fullPath));\n }\n }\n } catch {\n // Directory doesn't exist\n }\n\n return files;\n}\n\n/**\n * Helper: Copy only syncable files from source directory to destination\n * Filters to only copy *.json files, excluding keys, backups, etc.\n */\nasync function copySyncableFiles(\n sourceDir: string,\n destDir: string,\n log: (msg: string) => void\n): Promise<number> {\n let copiedCount = 0;\n\n // Copy sync directories (only *.json files)\n for (const dirName of SYNC_DIRECTORIES) {\n const sourcePath = path.join(sourceDir, dirName);\n const destPath = path.join(destDir, dirName);\n\n try {\n const stat = await fs.stat(sourcePath);\n if (!stat.isDirectory()) continue;\n\n // Get all files recursively\n const allFiles = await getAllFiles(sourcePath);\n\n for (const relativePath of allFiles) {\n const fullSourcePath = path.join(sourcePath, relativePath);\n const fullDestPath = path.join(destPath, relativePath);\n\n if (shouldSyncFile(fullSourcePath)) {\n await fs.mkdir(path.dirname(fullDestPath), { recursive: true });\n await fs.copyFile(fullSourcePath, fullDestPath);\n log(`Copied: ${dirName}/${relativePath}`);\n copiedCount++;\n } else {\n log(`Skipped (not syncable): ${dirName}/${relativePath}`);\n }\n }\n } catch (error) {\n const errCode = (error as NodeJS.ErrnoException).code;\n if (errCode !== 'ENOENT') {\n log(`Error processing ${dirName}: ${error}`);\n }\n }\n }\n\n // Copy root-level sync files\n for (const fileName of SYNC_ROOT_FILES) {\n const sourcePath = path.join(sourceDir, fileName);\n const destPath = path.join(destDir, fileName);\n\n try {\n await fs.copyFile(sourcePath, destPath);\n log(`Copied root file: ${fileName}`);\n copiedCount++;\n } catch (error) {\n const errCode = (error as NodeJS.ErrnoException).code;\n if (errCode !== 'ENOENT') {\n log(`Error copying ${fileName}: ${error}`);\n }\n }\n }\n\n return copiedCount;\n}\n\n/**\n * SyncModule - Manages state synchronization between local environment and gitgov-state branch\n *\n * Responsibilities:\n * - Create and maintain the gitgov-state branch (local and remote)\n * - Publish local changes (pushState)\n * - Pull remote changes (pullState)\n * - Resolve conflicts in a governed manner (resolveConflict)\n * - Audit state integrity (auditState)\n *\n * Philosophy:\n * - Pipeline Pattern: Sequential operations with validation at each phase\n * - Fail-Fast: Early verifications to avoid costly operations\n * - Strict Dependencies: All dependencies (git, config, identity, lint, indexer) are required for robust operations\n */\nexport class SyncModule {\n private git: GitModule;\n private config: ConfigManager;\n private identity: IIdentityAdapter;\n private lint: LintModule;\n private indexer: IIndexerAdapter;\n\n /**\n * Constructor with dependency injection\n */\n constructor(dependencies: SyncModuleDependencies) {\n // Validate required dependencies\n if (!dependencies.git) {\n throw new Error(\"GitModule is required for SyncModule\");\n }\n if (!dependencies.config) {\n throw new Error(\"ConfigManager is required for SyncModule\");\n }\n if (!dependencies.identity) {\n throw new Error(\"IdentityAdapter is required for SyncModule\");\n }\n if (!dependencies.lint) {\n throw new Error(\"LintModule is required for SyncModule\");\n }\n if (!dependencies.indexer) {\n throw new Error(\"IndexerAdapter is required for SyncModule\");\n }\n\n this.git = dependencies.git;\n this.config = dependencies.config;\n this.identity = dependencies.identity;\n this.lint = dependencies.lint;\n this.indexer = dependencies.indexer;\n }\n\n /**\n * Static method to bootstrap .gitgov/ from gitgov-state branch.\n * Used when cloning a repo that has gitgov-state but .gitgov/ is not in the work branch.\n *\n * This method only requires GitModule and can be called before full SyncModule initialization.\n *\n * @param gitModule - GitModule instance for git operations\n * @param stateBranch - Name of the state branch (default: \"gitgov-state\")\n * @returns Promise<{ success: boolean; error?: string }>\n */\n static async bootstrapFromStateBranch(\n gitModule: GitModule,\n stateBranch: string = \"gitgov-state\"\n ): Promise<{ success: boolean; error?: string }> {\n try {\n const repoRoot = await gitModule.getRepoRoot();\n\n // 1. Check if gitgov-state branch exists (local or remote)\n const hasLocalBranch = await gitModule.branchExists(stateBranch);\n\n let hasRemoteBranch = false;\n try {\n const remoteBranches = await gitModule.listRemoteBranches(\"origin\");\n hasRemoteBranch = remoteBranches.includes(stateBranch);\n } catch {\n // Remote might not be configured, continue with local check\n }\n\n if (!hasLocalBranch && !hasRemoteBranch) {\n return {\n success: false,\n error: `State branch '${stateBranch}' does not exist locally or remotely`,\n };\n }\n\n // 2. If only remote exists, fetch it\n if (!hasLocalBranch && hasRemoteBranch) {\n try {\n const currentBranch = await gitModule.getCurrentBranch();\n await gitModule.fetch(\"origin\");\n await execAsync(`git checkout -b ${stateBranch} origin/${stateBranch}`, { cwd: repoRoot });\n // Return to previous branch\n if (currentBranch && currentBranch !== stateBranch) {\n await gitModule.checkoutBranch(currentBranch);\n }\n } catch (error) {\n return {\n success: false,\n error: `Failed to fetch state branch: ${(error as Error).message}`,\n };\n }\n }\n\n // 3. Check if .gitgov/ exists in gitgov-state\n try {\n const { stdout } = await execAsync(`git ls-tree -r ${stateBranch} --name-only .gitgov/`, { cwd: repoRoot });\n if (!stdout.trim()) {\n return {\n success: false,\n error: `No .gitgov/ directory found in '${stateBranch}' branch`,\n };\n }\n } catch {\n return {\n success: false,\n error: `Failed to check .gitgov/ in '${stateBranch}' branch`,\n };\n }\n\n // 4. Copy .gitgov/ from gitgov-state to filesystem\n try {\n await execAsync(`git checkout ${stateBranch} -- .gitgov/`, { cwd: repoRoot });\n // Unstage the files (keep them untracked if .gitgov/ is ignored)\n await execAsync(\"git reset HEAD .gitgov/\", { cwd: repoRoot });\n logger.info(`[bootstrapFromStateBranch] Successfully restored .gitgov/ from ${stateBranch}`);\n } catch (error) {\n return {\n success: false,\n error: `Failed to copy .gitgov/ from state branch: ${(error as Error).message}`,\n };\n }\n\n return { success: true };\n } catch (error) {\n return {\n success: false,\n error: `Bootstrap failed: ${(error as Error).message}`,\n };\n }\n }\n\n /**\n * Gets the state branch name from configuration.\n * Default: \"gitgov-state\"\n *\n * [EARS-4]\n */\n async getStateBranchName(): Promise<string> {\n try {\n const config = await this.config.loadConfig();\n return config?.state?.branch ?? \"gitgov-state\";\n } catch {\n // If config loading fails, use default\n return \"gitgov-state\";\n }\n }\n\n /**\n * Ensures that the gitgov-state branch exists both locally and remotely.\n * If it doesn't exist, creates it as an orphan branch.\n *\n * Use cases (4 edge cases):\n * 1. Doesn't exist locally or remotely → Create orphan branch + initial commit + push\n * 2. Exists remotely, not locally → Fetch + create local + set tracking\n * 3. Exists locally, not remotely → Push + set tracking\n * 4. Exists both → Verify tracking\n *\n * [EARS-1, EARS-2, EARS-3]\n */\n async ensureStateBranch(): Promise<void> {\n const stateBranch = await this.getStateBranchName();\n const remoteName = \"origin\";\n\n try {\n // Check local and remote existence\n const existsLocal = await this.git.branchExists(stateBranch);\n\n // Fetch to update remote references\n try {\n await this.git.fetch(remoteName);\n } catch {\n // If fetch fails (e.g., no remote configured), continue with local logic\n }\n\n // Check remote branch existence using GitModule\n const remoteBranches = await this.git.listRemoteBranches(remoteName);\n const existsRemote = remoteBranches.includes(stateBranch);\n\n // CASE 1: Doesn't exist locally or remotely → Create orphan branch + initial commit + push\n if (!existsLocal && !existsRemote) {\n await this.createOrphanStateBranch(stateBranch, remoteName);\n return;\n }\n\n // CASE 2: Exists remotely, not locally → Create local tracking remote\n if (!existsLocal && existsRemote) {\n const currentBranch = await this.git.getCurrentBranch();\n\n // Create local branch tracking remote\n // Use git checkout -b instead of checkoutOrphanBranch to create a tracking branch\n const repoRoot = await this.git.getRepoRoot();\n\n try {\n // Create local branch tracking the remote branch\n await execAsync(`git checkout -b ${stateBranch} ${remoteName}/${stateBranch}`, { cwd: repoRoot });\n\n // Branch is now created and tracking remote, return to original branch\n if (currentBranch !== stateBranch) {\n await this.git.checkoutBranch(currentBranch);\n }\n } catch (checkoutError) {\n // If checkout fails, try to return to original branch\n try {\n await this.git.checkoutBranch(currentBranch);\n } catch {\n // Ignore rollback error\n }\n throw checkoutError;\n }\n\n return;\n }\n\n // CASE 3: Exists locally, not remotely → Push + set tracking\n if (existsLocal && !existsRemote) {\n // Checkout to the branch to be able to push\n const currentBranch = await this.git.getCurrentBranch();\n if (currentBranch !== stateBranch) {\n await this.git.checkoutBranch(stateBranch);\n }\n\n try {\n await this.git.pushWithUpstream(remoteName, stateBranch);\n } catch {\n // If push fails (e.g., no remote configured), continue without error\n // Local branch remains available for local use\n }\n\n // Return to the original branch if it was different\n if (currentBranch !== stateBranch) {\n await this.git.checkoutBranch(currentBranch);\n }\n return;\n }\n\n // CASE 4: Exists both → Verify tracking\n if (existsLocal && existsRemote) {\n const upstreamBranch = await this.git.getBranchRemote(stateBranch);\n if (!upstreamBranch || upstreamBranch !== `${remoteName}/${stateBranch}`) {\n await this.git.setUpstream(stateBranch, remoteName, stateBranch);\n }\n return;\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n throw new StateBranchSetupError(\n `Failed to ensure state branch ${stateBranch}: ${errorMessage}`,\n error as Error\n );\n }\n }\n\n /**\n * Creates the gitgov-state orphan branch with an empty initial commit.\n * Used by ensureStateBranch when the branch doesn't exist locally or remotely.\n *\n * [EARS-1]\n */\n private async createOrphanStateBranch(\n stateBranch: string,\n remoteName: string\n ): Promise<void> {\n const currentBranch = await this.git.getCurrentBranch();\n const repoRoot = await this.git.getRepoRoot();\n\n // Check if current branch has any commits (required to return after creating orphan)\n const currentBranchHasCommits = await this.git.branchExists(currentBranch);\n if (!currentBranchHasCommits) {\n throw new Error(\n `Cannot initialize GitGovernance: branch '${currentBranch}' has no commits. ` +\n `Please create an initial commit first (e.g., 'git commit --allow-empty -m \"Initial commit\"').`\n );\n }\n\n try {\n // 1. Create orphan branch\n await this.git.checkoutOrphanBranch(stateBranch);\n\n // 2. Clean staging area and create initial commit\n // After `git checkout --orphan`, all files from previous branch are staged\n // We need to clear them and create an empty initial commit\n\n try {\n // Remove all staged files\n await execAsync(\"git rm -rf . 2>/dev/null || true\", { cwd: repoRoot });\n\n // Create initial commit directly with exec (more reliable than GitModule methods for orphan branch)\n await execAsync('git commit --allow-empty -m \"Initialize state branch\"', { cwd: repoRoot });\n } catch (commitError) {\n const error = commitError as { stderr?: string; message?: string };\n throw new Error(`Failed to create initial commit on orphan branch: ${error.stderr || error.message}`);\n }\n\n // 5. Push with upstream (if remote is configured)\n // First check if the remote is actually configured\n const hasRemote = await this.git.isRemoteConfigured(remoteName);\n\n if (hasRemote) {\n try {\n await this.git.pushWithUpstream(remoteName, stateBranch);\n } catch (pushError) {\n const pushErrorMsg = pushError instanceof Error ? pushError.message : String(pushError);\n // Only ignore error if it's a remote connectivity issue\n // All other errors should be investigated/thrown\n const isRemoteError =\n pushErrorMsg.includes(\"does not appear to be\") ||\n pushErrorMsg.includes(\"Could not read from remote\") ||\n pushErrorMsg.includes(\"repository not found\");\n\n if (!isRemoteError) {\n // For other errors, propagate them (something went wrong)\n throw new Error(`Failed to push state branch to remote: ${pushErrorMsg}`);\n }\n // If remote connectivity issue, continue - local branch is functional\n logger.info(`Remote '${remoteName}' not reachable, gitgov-state branch created locally only`);\n }\n } else {\n // No remote configured, continue - local branch is functional\n logger.info(`No remote '${remoteName}' configured, gitgov-state branch created locally only`);\n }\n\n // 6. Return to original branch\n await this.git.checkoutBranch(currentBranch);\n } catch (error) {\n // Rollback: try to return to original branch\n try {\n await this.git.checkoutBranch(currentBranch);\n } catch {\n // Ignore rollback error\n }\n throw error;\n }\n }\n\n /**\n * Calculates the file delta in .gitgov/ between the current branch and gitgov-state.\n *\n * [EARS-5]\n */\n async calculateStateDelta(sourceBranch: string): Promise<StateDeltaFile[]> {\n const stateBranch = await this.getStateBranchName();\n if (!stateBranch) {\n throw new SyncError(\"Failed to get state branch name\");\n }\n\n try {\n // Get changes between stateBranch and sourceBranch, filtering only .gitgov/\n const changedFiles = await this.git.getChangedFiles(\n stateBranch,\n sourceBranch,\n \".gitgov/\"\n );\n\n return changedFiles.map((file) => ({\n status: file.status,\n file: file.file,\n }));\n } catch (error) {\n throw new SyncError(\n `Failed to calculate state delta: ${(error as Error).message}`\n );\n }\n }\n\n /**\n * Checks if a rebase is in progress.\n *\n * [EARS-22]\n */\n async isRebaseInProgress(): Promise<boolean> {\n return await this.git.isRebaseInProgress();\n }\n\n /**\n * Checks for absence of conflict markers in specified files.\n * Returns list of files that still have markers.\n *\n * [EARS-23]\n */\n async checkConflictMarkers(filePaths: string[]): Promise<string[]> {\n const repoRoot = await this.git.getRepoRoot();\n const filesWithMarkers: string[] = [];\n\n for (const filePath of filePaths) {\n try {\n const fullPath = join(repoRoot, filePath);\n if (!existsSync(fullPath)) {\n continue;\n }\n\n const content = readFileSync(fullPath, \"utf-8\");\n const hasMarkers =\n content.includes(\"<<<<<<<\") ||\n content.includes(\"=======\") ||\n content.includes(\">>>>>>>\");\n\n if (hasMarkers) {\n filesWithMarkers.push(filePath);\n }\n } catch {\n // If read fails, assume no markers\n continue;\n }\n }\n\n return filesWithMarkers;\n }\n\n /**\n * Gets the diff of conflicted files for manual analysis.\n * Useful so the actor can analyze conflicted changes before resolving.\n *\n * [EARS-31]\n */\n async getConflictDiff(filePaths?: string[]): Promise<ConflictDiff> {\n try {\n // Get conflicted files\n let conflictedFiles: string[];\n if (filePaths && filePaths.length > 0) {\n conflictedFiles = filePaths;\n } else {\n conflictedFiles = await this.git.getConflictedFiles();\n }\n\n if (conflictedFiles.length === 0) {\n return {\n files: [],\n message: \"No conflicted files found\",\n resolutionSteps: [],\n };\n }\n\n const repoRoot = await this.git.getRepoRoot();\n const files: ConflictFileDiff[] = [];\n\n for (const filePath of conflictedFiles) {\n const fullPath = join(repoRoot, filePath);\n\n try {\n // Read current content (with conflict markers)\n const localContent = existsSync(fullPath)\n ? readFileSync(fullPath, \"utf-8\")\n : \"\";\n\n // For simplicity, remote and base content are left empty\n // In a complete implementation, git show :1:path and :3:path would be used\n const remoteContent = \"\";\n const baseContent: string | null = null;\n\n // Detect lines with markers\n const conflictMarkers: Array<{ line: number; marker: string }> = [];\n const lines = localContent.split(\"\\n\");\n lines.forEach((line, index) => {\n if (line.startsWith(\"<<<<<<<\")) {\n conflictMarkers.push({ line: index + 1, marker: \"<<<<<<\" });\n } else if (line.startsWith(\"=======\")) {\n conflictMarkers.push({ line: index + 1, marker: \"=======\" });\n } else if (line.startsWith(\">>>>>>>\")) {\n conflictMarkers.push({ line: index + 1, marker: \">>>>>>>\" });\n }\n });\n\n const fileDiff: ConflictFileDiff = {\n filePath,\n localContent,\n remoteContent,\n baseContent,\n };\n\n if (conflictMarkers.length > 0) {\n fileDiff.conflictMarkers = conflictMarkers;\n }\n\n files.push(fileDiff);\n } catch {\n // If reading a file fails, continue with the rest\n continue;\n }\n }\n\n return {\n files,\n message: `${files.length} file(s) in conflict`,\n resolutionSteps: [\n \"1. Review the conflict diff for each file\",\n \"2. Manually edit conflicted files to resolve conflicts\",\n \"3. Remove all conflict markers (<<<<<<<, =======, >>>>>>>)\",\n \"4. Run 'gitgov sync resolve' to complete the resolution\",\n ],\n };\n } catch (error) {\n throw new SyncError(\n `Failed to get conflict diff: ${(error as Error).message}`\n );\n }\n }\n\n /**\n * Verifies integrity of previous resolutions in gitgov-state history.\n * Returns list of violations if any exist.\n *\n * [EARS-24, EARS-25, EARS-26]\n */\n async verifyResolutionIntegrity(): Promise<IntegrityViolation[]> {\n const stateBranch = await this.getStateBranchName();\n if (!stateBranch) {\n throw new SyncError(\"Failed to get state branch name\");\n }\n const violations: IntegrityViolation[] = [];\n\n try {\n // Check if state branch exists\n const branchExists = await this.git.branchExists(stateBranch);\n if (!branchExists) {\n // Branch doesn't exist yet - no violations\n return violations;\n }\n\n // Get commit history from gitgov-state\n let commits;\n try {\n commits = await this.git.getCommitHistory(stateBranch, {\n maxCount: 1000, // Analyze last 1000 commits\n });\n } catch (error) {\n // If branch has no commits or getCommitHistory fails, return no violations\n return violations;\n }\n\n // Analyze history to detect rebase commits without resolution\n for (let i = 0; i < commits.length; i++) {\n const commit = commits[i];\n if (!commit) continue;\n\n const message = commit.message.toLowerCase();\n\n // Detect rebase commits (common patterns)\n const isRebaseCommit =\n message.includes(\"rebase\") ||\n message.includes(\"pick\") ||\n message.includes(\"conflict\");\n\n if (isRebaseCommit) {\n // Check if the next commit is a resolution\n const nextCommit = commits[i + 1];\n const isResolutionNext =\n nextCommit && nextCommit.message.toLowerCase().startsWith(\"resolution:\");\n\n if (!isResolutionNext) {\n violations.push({\n rebaseCommitHash: commit.hash,\n commitMessage: commit.message,\n timestamp: commit.date,\n author: commit.author,\n });\n }\n }\n }\n\n return violations;\n } catch (error) {\n // If verification fails for any reason, return empty violations\n // This prevents audit from blocking operations due to verification errors\n return violations;\n }\n }\n\n /**\n * Complete audit of gitgov-state status.\n * Verifies integrity of resolutions, signatures in Records, checksums and expected files.\n *\n * [EARS-27, EARS-28, EARS-29, EARS-30]\n */\n async auditState(\n options: AuditStateOptions = {}\n ): Promise<AuditStateReport> {\n const scope = options.scope ?? \"all\";\n const verifySignatures = options.verifySignatures ?? true;\n const verifyChecksums = options.verifyChecksums ?? true;\n\n const report: AuditStateReport = {\n passed: true,\n scope,\n totalCommits: 0,\n rebaseCommits: 0,\n resolutionCommits: 0,\n integrityViolations: [],\n summary: \"\",\n };\n\n try {\n // 1. Verify resolution integrity\n const integrityViolations = await this.verifyResolutionIntegrity();\n report.integrityViolations = integrityViolations;\n\n if (integrityViolations.length > 0) {\n report.passed = false;\n }\n\n // 2. Count rebase and resolution commits\n const stateBranch = await this.getStateBranchName();\n const branchExists = await this.git.branchExists(stateBranch);\n\n if (branchExists) {\n try {\n const commits = await this.git.getCommitHistory(stateBranch, {\n maxCount: 1000,\n });\n\n report.totalCommits = commits.length;\n report.rebaseCommits = commits.filter((c) =>\n c.message.toLowerCase().includes(\"rebase\")\n ).length;\n report.resolutionCommits = commits.filter((c) =>\n c.message.toLowerCase().startsWith(\"resolution:\")\n ).length;\n } catch {\n // If getCommitHistory fails, use defaults (0)\n report.totalCommits = 0;\n report.rebaseCommits = 0;\n report.resolutionCommits = 0;\n }\n }\n\n // 3. Verify signatures and checksums using LintModule\n if (verifySignatures || verifyChecksums) {\n const lintReport = await this.lint.lint({\n validateChecksums: verifyChecksums,\n validateSignatures: verifySignatures,\n validateReferences: false,\n concurrent: true,\n });\n\n // Store complete LintReport for consumers to access detailed validation results\n report.lintReport = lintReport;\n\n // Update audit passed status based on lint errors\n if (lintReport.summary.errors > 0) {\n report.passed = false;\n }\n }\n\n // Note: Signature/checksum/file validation is delegated to LintModule\n\n // Generate summary\n const lintErrorCount = report.lintReport?.summary.errors || 0;\n const violationCount = report.integrityViolations.length + lintErrorCount;\n\n report.summary = report.passed\n ? `Audit passed. No violations found (scope: ${scope}).`\n : `Audit failed. Found ${violationCount} violation(s): ${report.integrityViolations.length} integrity + ${lintErrorCount} structural (scope: ${scope}).`;\n\n return report;\n } catch (error) {\n throw new SyncError(\n `Failed to audit state: ${(error as Error).message}`\n );\n }\n }\n\n /**\n * Publishes local state changes to gitgov-state.\n * Implements 3 phases: verification, reconciliation, publication.\n *\n * [EARS-6 through EARS-12]\n */\n async pushState(options: SyncPushOptions): Promise<SyncPushResult> {\n const { actorId, dryRun = false } = options;\n const stateBranch = await this.getStateBranchName();\n if (!stateBranch) {\n throw new SyncError(\"Failed to get state branch name\");\n }\n let sourceBranch = options.sourceBranch;\n\n // Debug logging helper\n const log = (msg: string) => logger.debug(`[pushState] ${msg}`);\n\n // Initialize result\n const result: SyncPushResult = {\n success: false,\n filesSynced: 0,\n sourceBranch: \"\",\n commitHash: null,\n commitMessage: null,\n conflictDetected: false,\n };\n\n // [EARS-43] Declare stash tracking variables in outer scope for error handling\n let stashHash: string | null = null;\n let savedBranch: string = sourceBranch || \"\";\n\n try {\n log('=== STARTING pushState ===');\n\n // PRE-CHECK: Get current branch if not specified\n if (!sourceBranch) {\n sourceBranch = await this.git.getCurrentBranch();\n log(`Got current branch: ${sourceBranch}`);\n }\n result.sourceBranch = sourceBranch;\n\n // PRE-CHECK: Verify we're not on gitgov-state (EARS-8)\n // This check must be FIRST, before audit\n if (sourceBranch === stateBranch) {\n log(`ERROR: Attempting to push from state branch ${stateBranch}`);\n throw new PushFromStateBranchError(stateBranch);\n }\n log(`Pre-check passed: pushing from ${sourceBranch} to ${stateBranch}`);\n\n // [EARS-44] PRE-CHECK 1: Verify remote is configured for push (FIRST!)\n // This must be checked first because without remote, sync makes no sense\n const remoteName = \"origin\";\n const hasRemote = await this.git.isRemoteConfigured(remoteName);\n if (!hasRemote) {\n log(`ERROR: No remote '${remoteName}' configured`);\n throw new SyncError(\n `No remote repository configured. ` +\n `State sync requires a remote for multi-machine collaboration.\\n` +\n `Add a remote with: git remote add origin <url>\\n` +\n `Then push your changes: git push -u origin ${sourceBranch}`\n );\n }\n log(`Pre-check passed: remote '${remoteName}' configured`);\n\n // [EARS-44] PRE-CHECK 2: Verify current branch has commits\n // This is required for creating gitgov-state orphan branch and returning to original branch\n const hasCommits = await this.git.branchExists(sourceBranch);\n if (!hasCommits) {\n log(`ERROR: Branch '${sourceBranch}' has no commits`);\n throw new SyncError(\n `Cannot sync: branch '${sourceBranch}' has no commits. ` +\n `Please create an initial commit first (e.g., 'git commit --allow-empty -m \"Initial commit\"').`\n );\n }\n log(`Pre-check passed: branch '${sourceBranch}' has commits`);\n\n // PHASE 0: Integrity Verification and Audit (EARS-6, EARS-7)\n log('Phase 0: Starting audit...');\n const auditReport = await this.auditState({ scope: \"current\" });\n log(`Audit result: ${auditReport.passed ? 'PASSED' : 'FAILED'}`);\n\n if (!auditReport.passed) {\n log(`Audit violations: ${auditReport.summary}`);\n result.conflictDetected = true;\n result.conflictInfo = {\n type: \"integrity_violation\",\n affectedFiles: [],\n message: auditReport.summary,\n resolutionSteps: [\n \"Review audit violations\",\n \"Fix integrity issues before pushing\",\n ],\n };\n result.error = \"Integrity violations detected. Cannot push.\";\n return result;\n }\n\n // Ensure state branch exists\n log('Ensuring state branch exists...');\n await this.ensureStateBranch();\n log('State branch confirmed');\n\n // PHASE 1: Automatic Reconciliation (EARS-9, EARS-10)\n log('=== Phase 1: Reconciliation ===');\n savedBranch = sourceBranch;\n log(`Saved branch: ${savedBranch}`);\n\n // [EARS-43] Check if current branch has untracked .gitgov/ files BEFORE stashing\n const isCurrentBranch = sourceBranch === (await this.git.getCurrentBranch());\n let hasUntrackedGitgovFiles = false;\n let tempDir: string | null = null;\n\n if (isCurrentBranch) {\n const repoRoot = await this.git.getRepoRoot();\n const gitgovPath = path.join(repoRoot, '.gitgov');\n\n // Check if .gitgov/ EXISTS ON FILESYSTEM (not git status)\n // This is critical because .gitgov/ may be in .gitignore and git status won't show it\n hasUntrackedGitgovFiles = existsSync(gitgovPath);\n log(`[EARS-43] .gitgov/ exists on filesystem: ${hasUntrackedGitgovFiles}`);\n\n // If untracked files exist, copy ENTIRE .gitgov/ to temp directory BEFORE stashing\n // This preserves ALL local files (not just SYNC_WHITELIST) for restoration after branch switch\n if (hasUntrackedGitgovFiles) {\n log('[EARS-43] Copying ENTIRE .gitgov/ to temp directory for preservation...');\n\n tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'gitgov-sync-'));\n log(`[EARS-43] Created temp directory: ${tempDir}`);\n\n // Copy entire .gitgov/ directory to preserve ALL files (including local-only files)\n await fs.cp(gitgovPath, tempDir, { recursive: true });\n log('[EARS-43] Entire .gitgov/ copied to temp');\n }\n }\n\n // [EARS-43] Stash uncommitted changes before checkout to allow sync from dirty working tree\n // This is safe because:\n // 1. Stash preserves all local changes including .gitgov/\n // 2. We restore the stash when returning to original branch\n // 3. Enables seamless workflow: dev can work + sync without committing\n log('[EARS-43] Checking for uncommitted changes before checkout...');\n const hasUncommittedBeforeCheckout = await this.git.hasUncommittedChanges();\n\n if (hasUncommittedBeforeCheckout) {\n log('[EARS-43] Uncommitted changes detected, stashing before checkout...');\n stashHash = await this.git.stash('gitgov-sync-temp-stash');\n log(`[EARS-43] Changes stashed: ${stashHash || 'none'}`);\n }\n\n // Helper function to restore stash AND tempDir when returning early\n const restoreStashAndReturn = async (returnResult: SyncPushResult): Promise<SyncPushResult> => {\n await this.git.checkoutBranch(savedBranch);\n\n // [EARS-47] CRITICAL: Always restore tempDir FIRST to preserve local files (keys, etc.)\n if (tempDir) {\n try {\n log('[EARS-47] Restoring .gitgov/ from temp directory (early return)...');\n const repoRoot = await this.git.getRepoRoot();\n const gitgovDir = path.join(repoRoot, '.gitgov');\n await fs.cp(tempDir, gitgovDir, { recursive: true, force: true });\n log('[EARS-47] .gitgov/ restored from temp (early return)');\n\n // Cleanup temp\n await fs.rm(tempDir, { recursive: true, force: true });\n log('[EARS-47] Temp directory cleaned up (early return)');\n } catch (tempRestoreError) {\n log(`[EARS-47] WARNING: Failed to restore tempDir: ${tempRestoreError}`);\n returnResult.error = returnResult.error\n ? `${returnResult.error}. Failed to restore .gitgov/ from temp.`\n : `Failed to restore .gitgov/ from temp. Check /tmp for gitgov-sync-* directory.`;\n }\n }\n\n if (stashHash) {\n try {\n await this.git.stashPop();\n log('[EARS-43] Stashed changes restored');\n } catch (stashError) {\n log(`[EARS-43] Failed to restore stash: ${stashError}`);\n returnResult.error = returnResult.error\n ? `${returnResult.error}. Failed to restore stashed changes.`\n : 'Failed to restore stashed changes. Run \\'git stash pop\\' manually.';\n }\n }\n return returnResult;\n };\n\n // Checkout to gitgov-state\n log(`Checking out to ${stateBranch}...`);\n await this.git.checkoutBranch(stateBranch);\n log(`Now on branch: ${await this.git.getCurrentBranch()}`);\n\n // Note: We don't check for uncommitted changes here because:\n // 1. Untracked files from working tree (like .gitgov/) are expected and harmless\n // 2. If there are actual staged changes, git commit will detect them\n // 3. This allows seamless workflow without false positives from untracked files\n\n // Attempt pull --rebase to reconcile with remote\n log('Attempting pull --rebase...');\n try {\n await this.git.pullRebase(\"origin\", stateBranch);\n log('Pull rebase successful');\n } catch (error) {\n // Check if error is because we're already up to date or remote doesn't exist\n const errorMsg = error instanceof Error ? error.message : String(error);\n log(`Pull rebase failed: ${errorMsg}`);\n\n const isAlreadyUpToDate = errorMsg.includes(\"up to date\") || errorMsg.includes(\"up-to-date\");\n const isNoRemote = errorMsg.includes(\"does not appear to be\") || errorMsg.includes(\"Could not read from remote\");\n\n if (isAlreadyUpToDate || isNoRemote) {\n log('Pull failed but continuing (already up-to-date or no remote)');\n // Not an error - we're up to date or no remote configured\n // Continue with local push\n } else {\n // Detect if it's a conflict\n const conflictedFiles = await this.git.getConflictedFiles();\n if (conflictedFiles.length > 0) {\n // Abort rebase and restore clean state\n await this.git.rebaseAbort();\n\n result.conflictDetected = true;\n result.conflictInfo = {\n type: \"rebase_conflict\",\n affectedFiles: conflictedFiles,\n message: \"Conflict detected during automatic reconciliation\",\n resolutionSteps: [\n \"Pull remote changes first: gitgov sync pull\",\n \"Resolve any conflicts\",\n \"Then push your changes\",\n ],\n };\n result.error = \"Conflict detected during reconciliation\";\n return await restoreStashAndReturn(result);\n }\n\n // If not conflict or \"already up to date\", propagate error\n throw error;\n }\n }\n\n // PHASE 2: Publication (EARS-11, EARS-12, EARS-41, EARS-42)\n log('=== Phase 2: Publication ===');\n\n // [EARS-41] Detect first push: check if .gitgov/ exists in gitgov-state\n log('Checking if .gitgov/ exists in gitgov-state...');\n let isFirstPush = false;\n try {\n const repoRoot = await this.git.getRepoRoot();\n\n // Check if .gitgov/ directory exists in gitgov-state branch\n const { stdout } = await execAsync(\n `git ls-tree -d ${stateBranch} .gitgov`,\n { cwd: repoRoot }\n );\n\n isFirstPush = !stdout.trim(); // If empty, .gitgov/ doesn't exist\n log(`First push detected: ${isFirstPush}`);\n } catch (error) {\n // If command fails, assume first push\n log('Error checking .gitgov/ existence, assuming first push');\n isFirstPush = true;\n }\n\n // Calculate change delta (skip for first push, will copy everything from whitelist)\n let delta: StateDeltaFile[] = [];\n if (!isFirstPush) {\n log('Calculating state delta...');\n delta = await this.calculateStateDelta(sourceBranch);\n log(`Delta: ${delta.length} file(s) changed`);\n\n // If no changes, return without commit (EARS-11)\n if (delta.length === 0) {\n log('No changes detected, returning without commit');\n result.success = true;\n result.filesSynced = 0;\n return await restoreStashAndReturn(result);\n }\n } else {\n log('First push: will copy all whitelisted files');\n }\n\n // [EARS-42] & [EARS-43] Copy ONLY syncable files (*.json, no keys, no backups)\n log(`Copying syncable .gitgov/ files from ${sourceBranch}...`);\n log(`Sync directories: ${SYNC_DIRECTORIES.join(', ')}`);\n log(`Sync root files: ${SYNC_ROOT_FILES.join(', ')}`);\n\n const repoRoot = await this.git.getRepoRoot();\n\n // Note: untracked file detection was moved earlier, before stashing\n\n // If we have temp directory with untracked files, copy from there\n // Otherwise, use git checkout from source branch\n if (tempDir) {\n log('[EARS-43] Copying ONLY syncable files from temp directory...');\n\n // Create .gitgov/ directory if it doesn't exist (first push to orphan branch)\n const gitgovDir = path.join(repoRoot, '.gitgov');\n await fs.mkdir(gitgovDir, { recursive: true });\n log(`[EARS-43] Ensured .gitgov/ directory exists: ${gitgovDir}`);\n\n // Use helper to copy only syncable files (*.json, no keys, no backups)\n const copiedCount = await copySyncableFiles(tempDir, gitgovDir, log);\n log(`[EARS-43] Syncable files copy complete: ${copiedCount} files copied`);\n } else {\n // Use git checkout for tracked files\n log('Copying syncable files from git...');\n\n // Build list of paths that exist in source branch AND are syncable\n const existingPaths: string[] = [];\n\n // Check sync directories\n for (const dirName of SYNC_DIRECTORIES) {\n const fullPath = `.gitgov/${dirName}`;\n try {\n const { stdout } = await execAsync(\n `git ls-tree -r ${sourceBranch} -- ${fullPath}`,\n { cwd: repoRoot }\n );\n // Filter to only include syncable files (*.json, no keys, no backups)\n const lines = stdout.trim().split('\\n').filter(l => l);\n for (const line of lines) {\n const parts = line.split('\\t');\n const filePath = parts[1];\n if (filePath && shouldSyncFile(filePath)) {\n existingPaths.push(filePath);\n } else if (filePath) {\n log(`Skipped (not syncable): ${filePath}`);\n }\n }\n } catch {\n log(`Directory ${dirName} does not exist in ${sourceBranch}, skipping`);\n }\n }\n\n // Check root sync files\n for (const fileName of SYNC_ROOT_FILES) {\n const fullPath = `.gitgov/${fileName}`;\n try {\n const { stdout } = await execAsync(\n `git ls-tree ${sourceBranch} -- ${fullPath}`,\n { cwd: repoRoot }\n );\n if (stdout.trim()) {\n existingPaths.push(fullPath);\n }\n } catch {\n log(`File ${fileName} does not exist in ${sourceBranch}, skipping`);\n }\n }\n\n log(`Syncable paths found: ${existingPaths.length}`);\n\n if (existingPaths.length === 0) {\n log('No syncable files to sync, aborting');\n result.success = true;\n result.filesSynced = 0;\n return await restoreStashAndReturn(result);\n }\n\n // Copy only syncable files\n await this.git.checkoutFilesFromBranch(sourceBranch, existingPaths);\n log('Syncable files checked out successfully');\n }\n\n // Create structured commit message\n const timestamp = new Date().toISOString();\n\n // For first push, we need to recalculate delta now that files are staged\n if (isFirstPush) {\n // Stage the copied files first\n // Use force: true because .gitgov/ may be in .gitignore (by design)\n await this.git.add([\".gitgov\"], { force: true });\n\n // Get list of staged files for commit message\n const repoRoot = await this.git.getRepoRoot();\n\n try {\n const { stdout } = await execAsync(\n 'git diff --cached --name-status',\n { cwd: repoRoot }\n );\n\n const lines = stdout.trim().split('\\n').filter(l => l);\n delta = lines\n .map(line => {\n const [status, file] = line.split('\\t');\n if (!file) return null; // Skip invalid lines\n return {\n status: status as 'A' | 'M' | 'D',\n file\n };\n })\n .filter((item): item is StateDeltaFile => item !== null);\n log(`First push delta calculated: ${delta.length} file(s)`);\n } catch (error) {\n log('Error calculating first push delta, using empty delta');\n delta = [];\n }\n }\n\n const commitMessage =\n `sync: ${isFirstPush ? 'Initial state' : 'Publish state'} from ${sourceBranch}\\n\\n` +\n `Actor: ${actorId}\\n` +\n `Timestamp: ${timestamp}\\n` +\n `Files: ${delta.length} file(s) ${isFirstPush ? 'synced (initial)' : 'changed'}\\n\\n` +\n delta.map((d) => `${d.status} ${d.file}`).join(\"\\n\");\n\n result.commitMessage = commitMessage;\n\n if (!dryRun) {\n // IMPORTANT: Stage ALL files FIRST, then cleanup non-syncable files\n // This ensures EARS-47 can detect and remove untracked files from worktree\n // that shouldn't be synced (like .session.json, gitgov binary)\n if (!isFirstPush) {\n log('Staging all .gitgov/ files before cleanup...');\n // Use force: true because .gitgov/ may be in .gitignore (by design)\n await this.git.add([\".gitgov\"], { force: true });\n log('All files staged, proceeding to cleanup');\n }\n\n // [EARS-47] Remove ALL non-syncable files from gitgov-state\n // This ensures only files that pass shouldSyncFile() remain in shared state\n // MUST run AFTER git add so we can detect and remove untracked files\n log('[EARS-47] Scanning for non-syncable files in gitgov-state...');\n\n // Get ALL files currently in staging area for .gitgov/\n try {\n const { stdout: trackedFiles } = await execAsync(\n `git ls-files \".gitgov\" 2>/dev/null || true`,\n { cwd: repoRoot }\n );\n const allTrackedFiles = trackedFiles.trim().split('\\n').filter(f => f);\n log(`[EARS-47] Found ${allTrackedFiles.length} staged/tracked files in .gitgov/`);\n\n // Remove any file that should NOT be synced (using the same shouldSyncFile() logic)\n for (const trackedFile of allTrackedFiles) {\n if (!shouldSyncFile(trackedFile)) {\n try {\n await execAsync(`git rm -f \"${trackedFile}\"`, { cwd: repoRoot });\n log(`[EARS-47] Removed non-syncable file: ${trackedFile}`);\n } catch {\n // File might not exist or not be tracked anymore\n }\n }\n }\n } catch {\n // No tracked files, that's fine (first push)\n }\n\n log('[EARS-47] Non-syncable files cleanup complete');\n\n // Verify there are staged changes\n const hasStaged = await this.git.hasUncommittedChanges();\n log(`Has staged changes: ${hasStaged}`);\n\n if (!hasStaged) {\n log('No staged changes detected, returning without commit');\n // No changes to commit - return early\n result.success = true;\n result.filesSynced = 0;\n return await restoreStashAndReturn(result);\n }\n\n // Create commit\n log('Creating commit...');\n try {\n const commitHash = await this.git.commit(commitMessage);\n log(`Commit created: ${commitHash}`);\n result.commitHash = commitHash;\n } catch (commitError) {\n // Check if this is a \"nothing to commit\" error (common on second push with identical files)\n const errorMsg = commitError instanceof Error ? commitError.message : String(commitError);\n const stdout = (commitError as any).stdout || '';\n const stderr = (commitError as any).stderr || '';\n\n log(`Commit attempt output - stdout: ${stdout}, stderr: ${stderr}`);\n\n // Git returns exit code 1 with \"nothing to commit\" in stdout when there are no changes\n const isNothingToCommit =\n stdout.includes('nothing to commit') ||\n stderr.includes('nothing to commit') ||\n stdout.includes('nothing added to commit') ||\n stderr.includes('nothing added to commit');\n\n if (isNothingToCommit) {\n log('Nothing to commit - files are identical to gitgov-state HEAD');\n result.success = true;\n result.filesSynced = 0;\n return await restoreStashAndReturn(result);\n }\n\n // Otherwise, it's a real error\n log(`ERROR: Commit failed: ${errorMsg}`);\n log(`ERROR: Git stderr: ${stderr}`);\n throw new Error(`Failed to create commit: ${errorMsg} | stderr: ${stderr}`);\n }\n\n // Push\n log('Pushing to remote...');\n try {\n await this.git.push(\"origin\", stateBranch);\n log('Push successful');\n } catch (pushError) {\n // If push fails, check if it's a \"no remote\" error\n const pushErrorMsg = pushError instanceof Error ? pushError.message : String(pushError);\n log(`Push failed: ${pushErrorMsg}`);\n\n const isNoRemote = pushErrorMsg.includes(\"does not appear to be\") || pushErrorMsg.includes(\"Could not read from remote\");\n\n if (!isNoRemote) {\n log('ERROR: Push failed with non-remote error');\n // If it's not a \"no remote\" error, propagate it\n throw pushError;\n }\n log('Push failed due to no remote, continuing (local commit succeeded)');\n // Otherwise, continue - commit succeeded locally even if push failed\n }\n }\n\n // Return to original branch\n log(`Returning to ${savedBranch}...`);\n await this.git.checkoutBranch(savedBranch);\n log(`Back on ${await this.git.getCurrentBranch()}`);\n\n // [EARS-43] Restore stashed changes\n if (stashHash) {\n log('[EARS-43] Restoring stashed changes...');\n try {\n await this.git.stashPop();\n log('[EARS-43] Stashed changes restored successfully');\n } catch (stashError) {\n log(`[EARS-43] Warning: Failed to restore stashed changes: ${stashError}`);\n // Don't fail the push if stash pop fails, but warn the user\n result.error = `Push succeeded but failed to restore stashed changes. Run 'git stash pop' manually. Error: ${stashError}`;\n }\n }\n\n // [EARS-43] Restore ALL files from temp directory back to working tree\n // This is CRITICAL: we preserve ENTIRE .gitgov/ including local-only files\n if (tempDir) {\n log('[EARS-43] Restoring ENTIRE .gitgov/ from temp directory to working tree...');\n const repoRoot = await this.git.getRepoRoot();\n const gitgovDir = path.join(repoRoot, '.gitgov');\n\n // Copy entire temp back to .gitgov/ (this restores ALL files including local-only)\n await fs.cp(tempDir, gitgovDir, { recursive: true, force: true });\n log('[EARS-43] Entire .gitgov/ restored from temp');\n\n // Cleanup temp directory\n log('[EARS-43] Cleaning up temp directory...');\n try {\n await fs.rm(tempDir, { recursive: true, force: true });\n log('[EARS-43] Temp directory cleaned up');\n } catch (cleanupError) {\n log(`[EARS-43] Warning: Failed to cleanup temp directory: ${cleanupError}`);\n }\n }\n\n result.success = true;\n result.filesSynced = delta.length;\n log(`=== pushState COMPLETED SUCCESSFULLY: ${delta.length} files synced ===`);\n return result;\n } catch (error) {\n log(`=== pushState FAILED: ${(error as Error).message} ===`);\n\n // [EARS-43] Try to restore original branch even on error (ALWAYS, not just with stash)\n try {\n const currentBranch = await this.git.getCurrentBranch();\n if (currentBranch !== savedBranch && savedBranch) {\n log(`[EARS-43] Restoring original branch: ${savedBranch}...`);\n await this.git.checkoutBranch(savedBranch);\n log(`[EARS-43] Restored to ${savedBranch}`);\n }\n } catch (branchError) {\n log(`[EARS-43] Failed to restore original branch: ${branchError}`);\n }\n\n // [EARS-43] Try to restore stashed changes if any\n if (stashHash) {\n log('[EARS-43] Attempting to restore stashed changes after error...');\n try {\n await this.git.stashPop();\n log('[EARS-43] Stashed changes restored after error');\n } catch (stashError) {\n log(`[EARS-43] Failed to restore stashed changes after error: ${stashError}`);\n // Add to error message\n const originalError = (error as Error).message;\n (error as Error).message = `${originalError}. Additionally, failed to restore stashed changes. Run 'git stash pop' manually.`;\n }\n }\n\n // Re-throw critical errors that should fail fast\n if (\n error instanceof PushFromStateBranchError ||\n error instanceof UncommittedChangesError\n ) {\n throw error;\n }\n\n // For other errors, return result with error message\n result.error = (error as Error).message;\n return result;\n }\n }\n\n /**\n * Pulls remote changes from gitgov-state to the local environment.\n * Includes automatic re-indexing if there are new changes.\n *\n * [EARS-13 through EARS-16]\n * [EARS-44] Requires remote to be configured (pull without remote makes no sense)\n */\n async pullState(\n options: SyncPullOptions = {}\n ): Promise<SyncPullResult> {\n const { forceReindex = false } = options;\n const stateBranch = await this.getStateBranchName();\n if (!stateBranch) {\n throw new SyncError(\"Failed to get state branch name\");\n }\n\n // Debug logging helper\n const log = (msg: string) => logger.debug(`[pullState] ${msg}`);\n\n // Initialize result\n const result: SyncPullResult = {\n success: false,\n hasChanges: false,\n filesUpdated: 0,\n reindexed: false,\n conflictDetected: false,\n };\n\n try {\n log('=== STARTING pullState ===');\n\n // ═══════════════════════════════════════════════════════════\n // PHASE 0: Pre-flight Checks (EARS-44)\n // ═══════════════════════════════════════════════════════════\n log('Phase 0: Pre-flight checks...');\n\n // [EARS-44] PRE-CHECK: Verify remote is configured (pull without remote is meaningless)\n const remoteName = \"origin\";\n const hasRemote = await this.git.isRemoteConfigured(remoteName);\n\n if (!hasRemote) {\n throw new SyncError(\n `No remote '${remoteName}' configured. Pull requires a remote repository. ` +\n `Add a remote with: git remote add origin <url>`\n );\n }\n\n // [EARS-44] PRE-CHECK: Verify gitgov-state exists remotely\n // Fetch first to get latest remote refs\n await this.git.fetch(remoteName);\n const remoteBranches = await this.git.listRemoteBranches(remoteName);\n const existsRemote = remoteBranches.includes(stateBranch);\n\n if (!existsRemote) {\n // Check if local branch exists (maybe not pushed yet)\n const existsLocal = await this.git.branchExists(stateBranch);\n\n if (!existsLocal) {\n // Check if .gitgov/ exists - if so, user already ran init and just needs to push\n const repoRoot = await this.git.getRepoRoot();\n const gitgovPath = path.join(repoRoot, \".gitgov\");\n const gitgovExists = existsSync(gitgovPath);\n\n if (gitgovExists) {\n // User has .gitgov/ but hasn't pushed yet - suggest sync push\n throw new SyncError(\n `State branch '${stateBranch}' does not exist remotely yet. ` +\n `Run 'gitgov sync push' to publish your local state to the remote.`\n );\n } else {\n // User hasn't initialized at all\n throw new SyncError(\n `State branch '${stateBranch}' does not exist locally or remotely. ` +\n `Run 'gitgov init' first to initialize GitGovernance, then 'gitgov sync push' to publish.`\n );\n }\n }\n\n // Local exists but remote doesn't - nothing to pull\n result.success = true;\n result.hasChanges = false;\n result.filesUpdated = 0;\n logger.info(`[pullState] State branch exists locally but not remotely. Nothing to pull.`);\n return result;\n }\n\n log('Pre-flight checks complete');\n\n // ═══════════════════════════════════════════════════════════\n // PHASE 1: Branch Setup and Verification\n // ═══════════════════════════════════════════════════════════\n log('Phase 1: Setting up branches...');\n\n // Get repoRoot early for use throughout this function\n const pullRepoRoot = await this.git.getRepoRoot();\n\n // 1. Pre-checks - ensure local branch tracks remote\n await this.ensureStateBranch();\n\n const savedBranch = await this.git.getCurrentBranch();\n\n // [EARS-51] Save LOCAL_ONLY_FILES before checkout\n // When .gitgov/ is untracked on work branch but tracked on gitgov-state,\n // git checkout will fail or overwrite files. We save local-only files first.\n const savedLocalFiles: Map<string, string> = new Map();\n try {\n for (const fileName of LOCAL_ONLY_FILES) {\n const filePath = path.join(pullRepoRoot, \".gitgov\", fileName);\n try {\n const content = await fs.readFile(filePath, \"utf-8\");\n savedLocalFiles.set(fileName, content);\n log(`[EARS-51] Saved local-only file: ${fileName}`);\n } catch {\n // File doesn't exist, that's fine\n }\n }\n } catch (error) {\n log(`[EARS-51] Warning: Could not save local files: ${(error as Error).message}`);\n }\n\n // Checkout to gitgov-state\n // Use force to handle case where .gitgov/ is untracked on work branch\n // but tracked on gitgov-state (would otherwise fail with \"would be overwritten\")\n try {\n await this.git.checkoutBranch(stateBranch);\n } catch (checkoutError) {\n // If normal checkout fails, try with force\n log(`[EARS-51] Normal checkout failed, trying with force: ${(checkoutError as Error).message}`);\n try {\n await execAsync(`git checkout -f ${stateBranch}`, { cwd: pullRepoRoot });\n log(`[EARS-51] Force checkout successful`);\n } catch (forceError) {\n // Still failed - rethrow original error\n throw checkoutError;\n }\n }\n\n // Verify no staged or modified changes (ignore untracked files)\n // Untracked files from work branch are expected and harmless in gitgov-state\n try {\n // Check only for staged (A, M, D) or modified (M) files, NOT untracked (??)\n const { stdout } = await execAsync('git status --porcelain', { cwd: pullRepoRoot });\n const lines = stdout.trim().split('\\n').filter(l => l);\n const hasStagedOrModified = lines.some(line => {\n const status = line.substring(0, 2);\n // Ignore untracked files (??), only check for staged/modified\n return status !== '??' && status.trim().length > 0;\n });\n\n if (hasStagedOrModified) {\n await this.git.checkoutBranch(savedBranch);\n throw new UncommittedChangesError(stateBranch);\n }\n } catch (error) {\n if (error instanceof UncommittedChangesError) {\n throw error;\n }\n // If git status fails, continue (branch might be clean)\n }\n\n log('Branch setup complete');\n\n // ═══════════════════════════════════════════════════════════\n // PHASE 2: Pull Remote Changes (EARS-13, EARS-14)\n // ═══════════════════════════════════════════════════════════\n log('Phase 2: Pulling remote changes...');\n\n // 2. Save current commit to compare later\n const commitBefore = await this.git.getCommitHistory(stateBranch, {\n maxCount: 1,\n });\n const hashBefore = commitBefore[0]?.hash;\n\n // 3. Fetch + Pull --rebase (EARS-13, EARS-14)\n await this.git.fetch(\"origin\");\n\n try {\n await this.git.pullRebase(\"origin\", stateBranch);\n } catch (error) {\n // Detect conflict\n const conflictedFiles = await this.git.getConflictedFiles();\n if (conflictedFiles.length > 0) {\n // Pause rebase (DO NOT abort) and return conflict\n await this.git.checkoutBranch(savedBranch);\n\n result.conflictDetected = true;\n result.conflictInfo = {\n type: \"rebase_conflict\",\n affectedFiles: conflictedFiles,\n message: \"Conflict detected during pull\",\n resolutionSteps: [\n \"Review conflicted files\",\n \"Manually resolve conflicts\",\n \"Run 'gitgov sync resolve' to complete\",\n ],\n };\n result.error = \"Conflict detected during pull\";\n return result;\n }\n\n // If not a conflict, propagate error\n throw error;\n }\n\n log('Pull rebase successful');\n\n // ═══════════════════════════════════════════════════════════\n // PHASE 3: Re-indexing and File Updates (EARS-15, EARS-16)\n // ═══════════════════════════════════════════════════════════\n log('Phase 3: Checking for changes and re-indexing...');\n\n // 4. Check if there are new changes (EARS-15)\n const commitAfter = await this.git.getCommitHistory(stateBranch, {\n maxCount: 1,\n });\n const hashAfter = commitAfter[0]?.hash;\n\n const hasNewChanges = hashBefore !== hashAfter;\n result.hasChanges = hasNewChanges;\n\n // 5. Re-index if there are new changes or force requested (EARS-15, EARS-16)\n if (hasNewChanges || forceReindex) {\n result.reindexed = true;\n\n // Calculate number of changed files\n if (hasNewChanges && hashBefore && hashAfter) {\n const changedFiles = await this.git.getChangedFiles(\n hashBefore,\n hashAfter,\n \".gitgov/\"\n );\n result.filesUpdated = changedFiles.length;\n }\n\n // Invoke indexer to regenerate cache (EARS-15, EARS-16)\n logger.info(\"Invoking IndexerAdapter.generateIndex() after pull...\");\n try {\n await this.indexer.generateIndex();\n logger.info(\"Index regenerated successfully\");\n } catch (error) {\n logger.warn(`Failed to regenerate index: ${(error as Error).message}`);\n // Non-critical: index regeneration failure doesn't fail the pull\n }\n }\n\n // 6. Copy .gitgov/ to filesystem in work branch (EARS-43 complement)\n // When .gitgov/ is ignored in work branch, we need to manually copy files\n // from gitgov-state to the filesystem so they're available for CLI commands\n const gitgovPath = path.join(pullRepoRoot, \".gitgov\");\n\n // Check if .gitgov/ exists in gitgov-state\n const gitgovExists = await fs.access(gitgovPath).then(() => true).catch(() => false);\n\n if (gitgovExists && hasNewChanges) {\n logger.debug(\"[pullState] Copying .gitgov/ to filesystem for work branch access\");\n // Files will be copied when we return to savedBranch\n // Git will preserve .gitgov/ in the filesystem even though it's ignored\n }\n\n // ═══════════════════════════════════════════════════════════\n // PHASE 4: Restore Working Branch and Cleanup\n // ═══════════════════════════════════════════════════════════\n log('Phase 4: Restoring working branch...');\n\n // 7. Return to original branch\n await this.git.checkoutBranch(savedBranch);\n\n // After returning to work branch, ALWAYS restore .gitgov/ from gitgov-state\n // This is necessary because switching branches may have modified/deleted files\n // even if there are no \"new changes\" from the remote.\n // IMPORTANT: Only checkout SYNC_DIRECTORIES and SYNC_ROOT_FILES, preserving LOCAL_ONLY_FILES\n if (gitgovExists) {\n try {\n logger.debug(\"[pullState] Restoring .gitgov/ to filesystem from gitgov-state (preserving local-only files)\");\n\n // Build list of paths to checkout (SYNC_DIRECTORIES + SYNC_ROOT_FILES)\n // This preserves LOCAL_ONLY_FILES like .session.json, index.json, gitgov binary\n const pathsToCheckout: string[] = [];\n\n // Add sync directories\n for (const dirName of SYNC_DIRECTORIES) {\n pathsToCheckout.push(`.gitgov/${dirName}`);\n }\n\n // Add root-level sync files\n for (const fileName of SYNC_ROOT_FILES) {\n pathsToCheckout.push(`.gitgov/${fileName}`);\n }\n\n // Checkout only syncable paths, one at a time (some may not exist)\n for (const checkoutPath of pathsToCheckout) {\n try {\n await execAsync(`git checkout ${stateBranch} -- \"${checkoutPath}\"`, { cwd: pullRepoRoot });\n logger.debug(`[pullState] Checked out: ${checkoutPath}`);\n } catch {\n // Path might not exist in gitgov-state, that's fine\n logger.debug(`[pullState] Skipped (not in gitgov-state): ${checkoutPath}`);\n }\n }\n\n // Unstage the files (keep them untracked if .gitgov/ is ignored)\n try {\n await execAsync('git reset HEAD .gitgov/', { cwd: pullRepoRoot });\n } catch {\n // Nothing staged, that's fine\n }\n\n // [EARS-51] Restore saved LOCAL_ONLY_FILES (they may have been lost during checkout)\n for (const [fileName, content] of savedLocalFiles) {\n try {\n const filePath = path.join(pullRepoRoot, \".gitgov\", fileName);\n await fs.writeFile(filePath, content, \"utf-8\");\n logger.debug(`[EARS-51] Restored local-only file: ${fileName}`);\n } catch (writeError) {\n logger.warn(`[EARS-51] Failed to restore ${fileName}: ${(writeError as Error).message}`);\n }\n }\n\n logger.debug(\"[pullState] .gitgov/ restored to filesystem successfully (local-only files preserved)\");\n } catch (error) {\n logger.warn(`[pullState] Failed to restore .gitgov/ to filesystem: ${(error as Error).message}`);\n // Non-critical: user can manually restore with 'git checkout gitgov-state -- .gitgov/'\n }\n }\n\n result.success = true;\n log(`=== pullState COMPLETED: ${hasNewChanges ? 'new changes pulled' : 'no changes'}, reindexed: ${result.reindexed} ===`);\n return result;\n } catch (error) {\n log(`=== pullState FAILED: ${(error as Error).message} ===`);\n // Re-throw critical errors that should fail fast\n if (error instanceof UncommittedChangesError) {\n throw error;\n }\n\n // For other errors, return result with error message\n result.error = (error as Error).message;\n return result;\n }\n }\n\n /**\n * Resolves state conflicts in a governed manner.\n * Updates resolved Records (recalculates checksum and adds resolver signature),\n * creates rebase and resolution commits signed according to protocol.\n *\n * [EARS-17 through EARS-23]\n */\n async resolveConflict(\n options: SyncResolveOptions\n ): Promise<SyncResolveResult> {\n const { reason, actorId } = options;\n\n // Debug logging helper\n const log = (msg: string) => logger.debug(`[resolveConflict] ${msg}`);\n log('=== STARTING resolveConflict ===');\n\n // ═══════════════════════════════════════════════════════════\n // PHASE 0: Pre-flight Checks (EARS-17, EARS-18)\n // ═══════════════════════════════════════════════════════════\n log('Phase 0: Verifying rebase state...');\n\n // 1. Verify rebase is in progress (EARS-17)\n const rebaseInProgress = await this.isRebaseInProgress();\n if (!rebaseInProgress) {\n throw new NoRebaseInProgressError();\n }\n\n // 2. Get STAGED files (user already resolved and added them)\n console.log(\"[resolveConflict] Getting staged files...\");\n const allStagedFiles = await this.git.getStagedFiles();\n console.log(\"[resolveConflict] All staged files:\", allStagedFiles);\n\n // Filter to only .gitgov/*.json files (Records)\n const resolvedRecords = allStagedFiles.filter(f =>\n f.startsWith('.gitgov/') && f.endsWith('.json')\n );\n console.log(\"[resolveConflict] Resolved Records (staged .gitgov/*.json):\", resolvedRecords);\n\n // 3. Verify conflict markers (EARS-18)\n console.log(\"[resolveConflict] Checking for conflict markers...\");\n const filesWithMarkers = await this.checkConflictMarkers(resolvedRecords);\n console.log(\"[resolveConflict] Files with markers:\", filesWithMarkers);\n if (filesWithMarkers.length > 0) {\n throw new ConflictMarkersPresentError(filesWithMarkers);\n }\n\n // 4. Update resolved Records (EARS-19)\n console.log(\"[resolveConflict] Updating resolved Records...\");\n if (resolvedRecords.length > 0) {\n // Get current actor for signing\n const currentActor = await this.identity.getCurrentActor();\n console.log(\"[resolveConflict] Current actor:\", currentActor);\n\n // Process each resolved Record\n console.log(\"[resolveConflict] Processing\", resolvedRecords.length, \"resolved Records\");\n for (const filePath of resolvedRecords) {\n console.log(\"[resolveConflict] Processing Record:\", filePath);\n\n try {\n const repoRoot = await this.git.getRepoRoot();\n const fullPath = join(repoRoot, filePath);\n\n // Read the resolved Record\n const content = readFileSync(fullPath, 'utf-8');\n const record = JSON.parse(content) as EmbeddedMetadataRecord<GitGovRecordPayload>;\n\n // Skip if not a valid EmbeddedMetadataRecord structure\n if (!record.header || !record.payload) {\n continue;\n }\n\n // Re-sign the record (this recalculates checksum AND adds new signature)\n const signedRecord = await this.identity.signRecord(\n record,\n currentActor.id,\n 'resolver'\n );\n\n // Write back the updated Record\n writeFileSync(fullPath, JSON.stringify(signedRecord, null, 2) + '\\n', 'utf-8');\n\n logger.info(`Updated Record: ${filePath} (new checksum + resolver signature)`);\n console.log(\"[resolveConflict] Successfully updated Record:\", filePath);\n } catch (error) {\n // Log but don't fail - some files might not be Records\n logger.debug(`Skipping file ${filePath}: ${(error as Error).message}`);\n console.log(\"[resolveConflict] Error updating Record:\", filePath, error);\n }\n }\n\n console.log(\"[resolveConflict] All Records updated, re-staging...\");\n }\n\n // 5. Re-stage resolved files (now includes updated Records with new checksums/signatures)\n console.log(\"[resolveConflict] Re-staging .gitgov/ with updated metadata...\");\n // Use force: true because .gitgov/ may be in .gitignore (by design)\n await this.git.add([\".gitgov\"], { force: true });\n\n // 6. Continue rebase (creates technical commit) (EARS-20)\n console.log(\"[resolveConflict] Step 6: Calling git.rebaseContinue() (THIS MAY HANG)...\");\n await this.git.rebaseContinue();\n console.log(\"[resolveConflict] rebaseContinue completed successfully\");\n\n // Get rebase commit hash\n const currentBranch = await this.git.getCurrentBranch();\n const rebaseCommit = await this.git.getCommitHistory(currentBranch, {\n maxCount: 1,\n });\n const rebaseCommitHash = rebaseCommit[0]?.hash ?? \"\";\n\n // 7. Create signed resolution commit (EARS-21)\n const timestamp = new Date().toISOString();\n const resolutionMessage =\n `resolution: Conflict resolved by ${actorId}\\n\\n` +\n `Actor: ${actorId}\\n` +\n `Timestamp: ${timestamp}\\n` +\n `Reason: ${reason}\\n` +\n `Files: ${resolvedRecords.length} file(s) resolved\\n\\n` +\n `Signed-off-by: ${actorId}`;\n\n // Create resolution commit (may be empty if no additional changes)\n const resolutionCommitHash = await this.git.commitAllowEmpty(\n resolutionMessage\n );\n\n // 8. Re-index after conflict resolution (EARS-20)\n logger.info(\"Invoking IndexerAdapter.generateIndex() after conflict resolution...\");\n try {\n await this.indexer.generateIndex();\n logger.info(\"Index regenerated successfully after conflict resolution\");\n } catch (error) {\n logger.warn(`Failed to regenerate index after resolution: ${(error as Error).message}`);\n // Non-critical: index regeneration failure doesn't fail the resolution\n }\n\n log(`=== resolveConflict COMPLETED: ${resolvedRecords.length} conflicts resolved ===`);\n\n return {\n success: true,\n rebaseCommitHash,\n resolutionCommitHash,\n conflictsResolved: resolvedRecords.length,\n resolvedBy: actorId,\n reason,\n };\n }\n}\n","/**\n * PullScheduler - Periodic State Synchronization\n *\n * Background scheduler that automatically pulls state changes from remote\n * at configured intervals.\n *\n * @module sync/pull_scheduler\n */\n\nimport type { SyncModule } from \"./sync_module\";\nimport type { ConfigManager } from \"../config_manager\";\n\n/**\n * Result of a pull operation executed by the scheduler\n */\nexport interface PullSchedulerResult {\n /** Whether the operation was successful */\n success: boolean;\n /** Whether new changes were detected */\n hasChanges: boolean;\n /** Whether a conflict was detected */\n conflictDetected: boolean;\n /** Conflict information if applicable */\n conflictInfo?: {\n type: string;\n message: string;\n affectedFiles?: string[];\n };\n /** Timestamp of the operation */\n timestamp: string;\n /** Error if operation failed */\n error?: string;\n}\n\n/**\n * Configuration for the PullScheduler\n */\nexport interface PullSchedulerConfig {\n /** Whether the scheduler is enabled */\n enabled: boolean;\n /** Pull interval in seconds */\n pullIntervalSeconds: number;\n /** Whether to continue after network errors */\n continueOnNetworkError: boolean;\n /** Whether to stop if a conflict is detected */\n stopOnConflict: boolean;\n}\n\n/**\n * Dependencies required by PullScheduler\n */\nexport interface PullSchedulerDependencies {\n /** SyncModule for pull operations */\n syncModule: SyncModule;\n /** ConfigManager for loading configuration */\n configManager: ConfigManager;\n}\n\n/**\n * PullScheduler - Automatic background synchronization\n *\n * Periodically pulls state changes from remote to keep local state up-to-date.\n * Useful for collaboration scenarios where multiple actors are working simultaneously.\n *\n * [EARS-33 to EARS-40]\n *\n * @example\n * ```typescript\n * const scheduler = new PullScheduler({\n * syncModule,\n * configManager\n * });\n *\n * await scheduler.start(); // Start periodic pulling\n * // ... scheduler runs in background ...\n * scheduler.stop(); // Stop scheduler\n * ```\n */\nexport class PullScheduler {\n private syncModule: SyncModule;\n private configManager: ConfigManager;\n private config: PullSchedulerConfig;\n private intervalId?: NodeJS.Timeout;\n private running: boolean = false;\n private pulling: boolean = false;\n\n constructor(dependencies: PullSchedulerDependencies) {\n if (!dependencies.syncModule) {\n throw new Error(\"SyncModule is required for PullScheduler\");\n }\n if (!dependencies.configManager) {\n throw new Error(\"ConfigManager is required for PullScheduler\");\n }\n\n this.syncModule = dependencies.syncModule;\n this.configManager = dependencies.configManager;\n\n // Default configuration (will be loaded lazily in start())\n this.config = {\n enabled: false,\n pullIntervalSeconds: 30,\n continueOnNetworkError: true,\n stopOnConflict: false,\n };\n }\n\n /**\n * Loads configuration from ConfigManager with cascade merge:\n * 1. Local preferences in .session.json (highest priority)\n * 2. Project defaults in config.json\n * 3. Hardcoded defaults (fallback)\n */\n private async loadConfig(): Promise<PullSchedulerConfig> {\n try {\n // Load project defaults from config.json\n const projectConfig = await this.configManager.loadConfig();\n const projectDefaults = projectConfig?.state?.defaults?.pullScheduler ?? {};\n\n // Load local preferences from .session.json\n const session = await this.configManager.loadSession();\n const localPreferences = session?.syncPreferences?.pullScheduler ?? {};\n\n // Merge with cascade priority\n return {\n enabled:\n localPreferences.enabled ?? projectDefaults.defaultEnabled ?? false,\n pullIntervalSeconds:\n localPreferences.pullIntervalSeconds ??\n projectDefaults.defaultIntervalSeconds ??\n 30,\n continueOnNetworkError:\n localPreferences.continueOnNetworkError ??\n projectDefaults.defaultContinueOnNetworkError ??\n true,\n stopOnConflict:\n localPreferences.stopOnConflict ??\n projectDefaults.defaultStopOnConflict ??\n false,\n };\n } catch {\n // If config loading fails, return defaults\n return {\n enabled: false,\n pullIntervalSeconds: 30,\n continueOnNetworkError: true,\n stopOnConflict: false,\n };\n }\n }\n\n /**\n * Starts the scheduler with configured interval\n *\n * [EARS-33, EARS-34]\n *\n * @throws Error if scheduler fails to load configuration\n *\n * @example\n * ```typescript\n * await scheduler.start();\n * // Scheduler now pulls every N seconds\n * ```\n */\n async start(): Promise<void> {\n // [EARS-34] Idempotent - return if already running\n if (this.running) {\n return;\n }\n\n // Load configuration\n this.config = await this.loadConfig();\n\n // Check if enabled\n if (!this.config.enabled) {\n return;\n }\n\n // [EARS-33] Start interval\n this.intervalId = setInterval(() => {\n void this.pullNow(); // Fire and forget\n }, this.config.pullIntervalSeconds * 1000);\n\n this.running = true;\n }\n\n /**\n * Stops the scheduler and cleans up resources\n *\n * [EARS-35]\n *\n * @example\n * ```typescript\n * scheduler.stop();\n * // Scheduler is now stopped\n * ```\n */\n stop(): void {\n if (!this.running) {\n return;\n }\n\n if (this.intervalId !== undefined) {\n clearInterval(this.intervalId);\n }\n\n this.running = false;\n }\n\n /**\n * Checks if the scheduler is currently running\n *\n * [EARS-36]\n *\n * @returns true if running, false otherwise\n *\n * @example\n * ```typescript\n * if (scheduler.isRunning()) {\n * console.log(\"Scheduler is active\");\n * }\n * ```\n */\n isRunning(): boolean {\n return this.running;\n }\n\n /**\n * Executes a pull operation immediately\n *\n * This method can be called manually or is automatically invoked by the scheduler.\n * Handles conflicts, network errors, and concurrent pull prevention.\n *\n * [EARS-37, EARS-38, EARS-39, EARS-40]\n *\n * @returns Result of the pull operation\n *\n * @example\n * ```typescript\n * const result = await scheduler.pullNow();\n * if (result.hasChanges) {\n * console.log(\"New changes detected\");\n * }\n * ```\n */\n async pullNow(): Promise<PullSchedulerResult> {\n // [EARS-40] Prevent concurrent pulls\n if (this.pulling) {\n return {\n success: true,\n hasChanges: false,\n conflictDetected: false,\n timestamp: new Date().toISOString(),\n error: \"Pull already in progress\",\n };\n }\n\n this.pulling = true;\n\n try {\n // Execute pull\n const pullResult = await this.syncModule.pullState();\n\n // [EARS-37] Detect changes\n const hasChanges = pullResult.reindexed || false;\n\n // [EARS-38] Detect conflicts\n if (pullResult.conflictDetected) {\n const result: PullSchedulerResult = {\n success: false,\n hasChanges: false,\n conflictDetected: true,\n timestamp: new Date().toISOString(),\n ...(pullResult.conflictInfo && { conflictInfo: pullResult.conflictInfo }),\n };\n\n // Stop scheduler if configured to do so\n if (this.config.stopOnConflict) {\n this.stop();\n }\n\n return result;\n }\n\n // Success\n return {\n success: true,\n hasChanges,\n conflictDetected: false,\n timestamp: new Date().toISOString(),\n };\n } catch (error) {\n // [EARS-39] Handle network errors\n const errorMessage = error instanceof Error ? error.message : String(error);\n const isNetworkError =\n errorMessage.includes(\"network\") ||\n errorMessage.includes(\"fetch\") ||\n errorMessage.includes(\"timeout\") ||\n errorMessage.includes(\"connection\");\n\n // Continue if configured to do so\n if (isNetworkError && this.config.continueOnNetworkError) {\n return {\n success: false,\n hasChanges: false,\n conflictDetected: false,\n timestamp: new Date().toISOString(),\n error: errorMessage,\n };\n }\n\n // Re-throw non-recoverable errors\n throw error;\n } finally {\n this.pulling = false;\n }\n }\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"]}