@gitgov/core 2.6.0 → 2.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -125,6 +125,117 @@ interface IConfigManager {
125
125
  getStateBranch(): Promise<string>;
126
126
  }
127
127
 
128
+ /**
129
+ * SessionManager Types
130
+ */
131
+ /**
132
+ * Sync status for an actor's synchronization state.
133
+ */
134
+ type SyncStatus = {
135
+ lastSyncPush?: string;
136
+ lastSyncPull?: string;
137
+ status?: 'synced' | 'pending' | 'pulling' | 'pushing' | 'conflict';
138
+ lastError?: string;
139
+ };
140
+ /**
141
+ * State for a specific actor on this machine.
142
+ */
143
+ type ActorState = {
144
+ activeTaskId?: string | undefined;
145
+ activeCycleId?: string | undefined;
146
+ lastSync?: string;
147
+ syncStatus?: SyncStatus;
148
+ [key: string]: unknown;
149
+ };
150
+ /**
151
+ * GitGovernance Session State
152
+ * Based on session_state.md blueprint
153
+ */
154
+ type GitGovSession = {
155
+ cloud?: {
156
+ sessionToken?: string;
157
+ };
158
+ lastSession?: {
159
+ actorId: string;
160
+ timestamp: string;
161
+ };
162
+ actorState?: Record<string, ActorState>;
163
+ syncPreferences?: {
164
+ pullScheduler?: {
165
+ enabled?: boolean;
166
+ pullIntervalSeconds?: number;
167
+ continueOnNetworkError?: boolean;
168
+ stopOnConflict?: boolean;
169
+ };
170
+ fileWatcher?: {
171
+ enabled?: boolean;
172
+ debounceMs?: number;
173
+ ignoredPatterns?: string[];
174
+ };
175
+ };
176
+ };
177
+ /**
178
+ * Sync preferences update payload
179
+ */
180
+ type SyncPreferencesUpdate = {
181
+ pullScheduler?: Partial<{
182
+ enabled: boolean;
183
+ pullIntervalSeconds: number;
184
+ continueOnNetworkError: boolean;
185
+ stopOnConflict: boolean;
186
+ }>;
187
+ fileWatcher?: Partial<{
188
+ enabled: boolean;
189
+ debounceMs: number;
190
+ ignoredPatterns: string[];
191
+ }>;
192
+ };
193
+ /**
194
+ * ISessionManager interface
195
+ *
196
+ * Provides typed access to GitGovernance session state.
197
+ * Session state is ephemeral, machine-local, and NOT versioned in Git.
198
+ */
199
+ interface ISessionManager {
200
+ /**
201
+ * Load GitGovernance session state
202
+ * [EARS-B9] Auto-detects actor from .key files if no session or no actorId exists
203
+ */
204
+ loadSession(): Promise<GitGovSession | null>;
205
+ /**
206
+ * [EARS-B9] Detect actor from .key files in .gitgov/actors/
207
+ */
208
+ detectActorFromKeyFiles(): Promise<string | null>;
209
+ /**
210
+ * Get actor state for a specific actor
211
+ */
212
+ getActorState(actorId: string): Promise<ActorState | null>;
213
+ /**
214
+ * Update actor state for a specific actor
215
+ */
216
+ updateActorState(actorId: string, state: Partial<ActorState>): Promise<void>;
217
+ /**
218
+ * Get cloud session token
219
+ */
220
+ getCloudSessionToken(): Promise<string | null>;
221
+ /**
222
+ * Get sync preferences from session
223
+ */
224
+ getSyncPreferences(): Promise<GitGovSession['syncPreferences'] | null>;
225
+ /**
226
+ * Update sync preferences in .session.json
227
+ * These are local machine preferences that override project defaults
228
+ */
229
+ updateSyncPreferences(preferences: SyncPreferencesUpdate): Promise<void>;
230
+ /**
231
+ * Get last session info (last human who interacted)
232
+ */
233
+ getLastSession(): Promise<{
234
+ actorId: string;
235
+ timestamp: string;
236
+ } | null>;
237
+ }
238
+
128
239
  /**
129
240
  * ConfigStore Interface
130
241
  *
@@ -176,6 +287,74 @@ interface ConfigStore<R = void> {
176
287
  saveConfig(config: GitGovConfig): Promise<R>;
177
288
  }
178
289
 
290
+ /**
291
+ * KeyProvider Interface
292
+ *
293
+ * Abstracts private key storage for Actor signing operations.
294
+ * Enables different backends: filesystem (development), environment variables (serverless),
295
+ * or cloud KMS (enterprise).
296
+ *
297
+ * @module key_provider
298
+ */
299
+ /**
300
+ * Error codes for KeyProvider operations.
301
+ */
302
+ type KeyProviderErrorCode = 'KEY_NOT_FOUND' | 'KEY_READ_ERROR' | 'KEY_WRITE_ERROR' | 'KEY_DELETE_ERROR' | 'INVALID_KEY_FORMAT' | 'INVALID_ACTOR_ID';
303
+ /**
304
+ * Error thrown when key operations fail.
305
+ */
306
+ declare class KeyProviderError extends Error {
307
+ readonly code: KeyProviderErrorCode;
308
+ readonly actorId?: string | undefined;
309
+ constructor(message: string, code: KeyProviderErrorCode, actorId?: string | undefined);
310
+ }
311
+ /**
312
+ * Interface for managing private key storage.
313
+ * Implementations handle the actual persistence mechanism.
314
+ *
315
+ * @example
316
+ * ```typescript
317
+ * // Filesystem backend (development)
318
+ * const provider = new FsKeyProvider({ keysDir: '.gitgov/keys' });
319
+ *
320
+ * // Environment backend (serverless)
321
+ * const provider = new EnvKeyProvider({ prefix: 'GITGOV_KEY_' });
322
+ *
323
+ * // Usage
324
+ * const privateKey = await provider.getPrivateKey('actor:human:alice');
325
+ * if (privateKey) {
326
+ * const signature = signPayload(payload, privateKey, actorId, role);
327
+ * }
328
+ * ```
329
+ */
330
+ interface KeyProvider {
331
+ /**
332
+ * Retrieves the private key for an actor.
333
+ * @param actorId - The actor's ID (e.g., 'actor:human:alice')
334
+ * @returns The base64-encoded private key, or null if not found
335
+ */
336
+ getPrivateKey(actorId: string): Promise<string | null>;
337
+ /**
338
+ * Stores a private key for an actor.
339
+ * @param actorId - The actor's ID
340
+ * @param privateKey - The base64-encoded private key
341
+ * @throws KeyProviderError if write fails
342
+ */
343
+ setPrivateKey(actorId: string, privateKey: string): Promise<void>;
344
+ /**
345
+ * Checks if a private key exists for an actor.
346
+ * @param actorId - The actor's ID
347
+ * @returns true if key exists, false otherwise
348
+ */
349
+ hasPrivateKey(actorId: string): Promise<boolean>;
350
+ /**
351
+ * Deletes the private key for an actor.
352
+ * @param actorId - The actor's ID
353
+ * @returns true if key was deleted, false if it didn't exist
354
+ */
355
+ deletePrivateKey(actorId: string): Promise<boolean>;
356
+ }
357
+
179
358
  /**
180
359
  * Options for file listing.
181
360
  */
@@ -536,4 +715,4 @@ declare namespace index {
536
715
  export { index_BranchAlreadyExistsError as BranchAlreadyExistsError, index_BranchNotFoundError as BranchNotFoundError, type index_ChangedFile as ChangedFile, type index_CommitAuthor as CommitAuthor, type index_CommitInfo as CommitInfo, type index_ExecOptions as ExecOptions, type index_ExecResult as ExecResult, index_FileNotFoundError as FileNotFoundError, type index_GetCommitHistoryOptions as GetCommitHistoryOptions, index_GitCommandError as GitCommandError, index_GitError as GitError, type index_GitModuleDependencies as GitModuleDependencies, type index_IGitModule as IGitModule, index_MergeConflictError as MergeConflictError, index_RebaseConflictError as RebaseConflictError, index_RebaseNotInProgressError as RebaseNotInProgressError };
537
716
  }
538
717
 
539
- export { type AuditState as A, type ConfigStore as C, type ExecOptions as E, type FsFileListerOptions as F, type GitGovConfig as G, type IGitModule as I, type MemoryFileListerOptions as M, type SyncConfig as S, type GitModuleDependencies as a, type ExecResult as b, type ChangedFile as c, type GetCommitHistoryOptions as d, type CommitInfo as e, type CommitAuthor as f, type FileLister as g, type FileListOptions as h, type FileStats as i, type AuditStateUpdate as j, type IConfigManager as k, type SyncDefaults as l, index as m };
718
+ export { type ActorState as A, type ConfigStore as C, type ExecOptions as E, type FsFileListerOptions as F, type GitGovConfig as G, type IGitModule as I, type KeyProvider as K, type MemoryFileListerOptions as M, type SyncPreferencesUpdate as S, type GitGovSession as a, type GitModuleDependencies as b, type ExecResult as c, type ChangedFile as d, type GetCommitHistoryOptions as e, type CommitInfo as f, type CommitAuthor as g, type FileLister as h, type FileListOptions as i, type FileStats as j, type ISessionManager as k, type SyncStatus as l, type AuditState as m, type AuditStateUpdate as n, type IConfigManager as o, type SyncConfig as p, type SyncDefaults as q, KeyProviderError as r, type KeyProviderErrorCode as s, index as t };
@@ -1,11 +1,11 @@
1
- import { A as ActorPayload, c as ActorRecord, d as AgentPayload, e as AgentRecord, C as ChangelogPayload, f as ChangelogRecord, g as CustomRecord, h as CyclePayload, i as CycleRecord, E as EmbeddedMetadataHeader, j as EmbeddedMetadataRecord, k as ExecutionPayload, l as ExecutionRecord, F as FeedbackPayload, m as FeedbackRecord, n as GitGovActorRecord, o as GitGovAgentRecord, p as GitGovChangelogRecord, q as GitGovCycleRecord, r as GitGovError, s as GitGovExecutionRecord, t as GitGovFeedbackRecord, G as GitGovRecord, u as GitGovRecordPayload, v as GitGovRecordType, w as GitGovTaskRecord, S as Signature, T as TaskPayload, x as TaskRecord, R as RecordStores, y as CollaborationMetrics, z as IRecordMetrics, B as ProductivityMetrics, D as RecordMetrics, H as RecordMetricsDependencies, J as SystemStatus, K as TaskHealthReport, L as ActivityEvent, M as ActorCreatedEvent, N as ActorRevokedEvent, O as AgentRegisteredEvent, Q as BaseEvent, U as ChangelogCreatedEvent, V as CycleCreatedEvent, W as CycleStatusChangedEvent, X as EventHandler, Y as EventMetadata, Z as EventSubscription, _ as ExecutionCreatedEvent, $ as FeedbackCreatedEvent, a0 as GitGovEvent, a1 as SystemDailyTickEvent, a2 as TaskCreatedEvent, a3 as TaskStatusChangedEvent, I as IRecordProjector, a4 as RecordProjectorDependencies, b as IndexData, a5 as IndexGenerationReport, a6 as IntegrityReport, a7 as AllRecords, a8 as DerivedStates, a9 as EnrichedTaskRecord, aa as DerivedStateSets, a as IRecordProjection, ab as IntegrityError, ac as IntegrityWarning, P as ProjectionContext } from './record_projection.types-B8AM7u8U.js';
2
- import { S as SessionManager, C as ConfigManager, z as EventBus, r as IEventStream, B as eventBus, D as publishEvent, G as subscribeToEvent, H as IIdentityAdapter, J as IdentityAdapter, K as IdentityAdapterDependencies, I as ILintModule, M as LintModuleDependencies, c as LintRecordContext, d as LintResult, L as LintOptions, a as LintReport$1, F as FixRecordOptions, b as FixReport, N as FixResult, O as LintSummary, Q as RecordEntry, R as RecordStores$1, V as ValidationContext$1, T as ValidatorType, U as IExecutionAdapter, W as ExecutionAdapterDependencies, E as EnvironmentValidation, e as IProjectInitializer, w as FsKeyProvider, x as FsKeyProviderOptions, y as FsFileLister, f as ISyncStateModule, X as AuditScope$1, A as AuditStateOptions, k as AuditStateReport, i as ConflictDiff, Y as ConflictFileDiff, Z as ConflictInfo, _ as ConflictType, $ as ExpectedFilesScope, j as IntegrityViolation, h as StateDeltaFile, g as SyncStateModuleDependencies, n as SyncStatePullOptions, o as SyncStatePullResult, l as SyncStatePushOptions, m as SyncStatePushResult, p as SyncStateResolveOptions, q as SyncStateResolveResult, a0 as AgentExecutionContext, a1 as AgentOutput, v as AgentResponse, t as AgentRunnerDependencies, a2 as AgentRunnerEvent, a3 as ApiEngine, a4 as AuthConfig, a5 as AuthType, a6 as CustomEngine, a7 as Engine, a8 as EngineType, a9 as IAgentLoader, s as IAgentRunner, aa as LocalEngine, ab as McpEngine, ac as ProtocolHandler, P as ProtocolHandlerRegistry, u as RunOptions, ad as RuntimeHandler, ae as RuntimeHandlerRegistry } from './agent_runner-pr7h-9cV.js';
3
- import { A as ActorState, G as GitGovSession, I as ISessionManager, a as SyncPreferencesUpdate, b as SyncStatus, K as KeyProvider, c as KeyProviderError, d as KeyProviderErrorCode } from './key_provider-jjWek3w1.js';
4
- import { A as AuditState, j as AuditStateUpdate, G as GitGovConfig, k as IConfigManager, S as SyncConfig, l as SyncDefaults, h as FileListOptions, g as FileLister, i as FileStats, F as FsFileListerOptions, M as MemoryFileListerOptions, I as IGitModule } from './index-Bhc341pf.js';
5
- export { C as ConfigStore, m as Git } from './index-Bhc341pf.js';
6
- import { E as EnvKeyProvider, a as EnvKeyProviderOptions, M as MockKeyProvider, b as MockKeyProviderOptions, c as MemoryFileLister } from './memory_file_lister-BIIcVXLw.js';
1
+ import { A as ActorPayload, d as ActorRecord, e as AgentPayload, f as AgentRecord, C as ChangelogPayload, g as ChangelogRecord, h as CyclePayload, i as CycleRecord, E as EmbeddedMetadataHeader, j as EmbeddedMetadataRecord, k as ExecutionPayload, l as ExecutionRecord, F as FeedbackPayload, m as FeedbackRecord, n as GitGovActorRecord, o as GitGovAgentRecord, p as GitGovChangelogRecord, q as GitGovCycleRecord, r as GitGovError, s as GitGovExecutionRecord, t as GitGovFeedbackRecord, G as GitGovRecord, u as GitGovRecordPayload, v as GitGovRecordType, w as GitGovTaskRecord, S as Signature, T as TaskPayload, x as TaskRecord, D as DEFAULT_ID_ENCODER, I as IdEncoder, R as RecordStore, y as RecordStores, z as CollaborationMetrics, B as IRecordMetrics, H as ProductivityMetrics, J as RecordMetrics, K as RecordMetricsDependencies, L as SystemStatus, M as TaskHealthReport, N as ActivityEvent, O as ActorCreatedEvent, Q as ActorRevokedEvent, U as AgentRegisteredEvent, V as BaseEvent, W as ChangelogCreatedEvent, X as CycleCreatedEvent, Y as CycleStatusChangedEvent, Z as EventHandler, _ as EventMetadata, $ as EventSubscription, a0 as ExecutionCreatedEvent, a1 as FeedbackCreatedEvent, a2 as GitGovEvent, a3 as SystemDailyTickEvent, a4 as TaskCreatedEvent, a5 as TaskStatusChangedEvent, a as IRecordProjector, a6 as RecordProjectorDependencies, c as IndexData, a7 as IndexGenerationReport, a8 as IntegrityReport, a9 as AllRecords, aa as DerivedStates, ab as EnrichedTaskRecord, ac as DerivedStateSets, b as IRecordProjection, ad as IntegrityError, ae as IntegrityWarning, P as ProjectionContext } from './record_projection.types-D9NkQbL_.js';
2
+ import { C as ConfigManager, E as EventBus, p as IEventStream, r as eventBus, s as publishEvent, t as subscribeToEvent, q as IIdentityAdapter, u as IdentityAdapterDependencies, I as ILintModule, v as LintModuleDependencies, c as LintRecordContext, d as LintResult, L as LintOptions, a as LintReport$1, F as FixRecordOptions, b as FixReport, w as FixResult, x as LintSummary, y as RecordEntry, R as RecordStores$1, V as ValidationContext$1, z as ValidatorType, e as ISyncStateModule, B as AuditScope$1, A as AuditStateOptions, i as AuditStateReport, g as ConflictDiff, D as ConflictFileDiff, G as ConflictInfo, H as ConflictType, J as ExpectedFilesScope, h as IntegrityViolation, f as StateDeltaFile, S as SyncStateModuleDependencies, l as SyncStatePullOptions, m as SyncStatePullResult, j as SyncStatePushOptions, k as SyncStatePushResult, n as SyncStateResolveOptions, o as SyncStateResolveResult } from './sync_state-C2a2RuBQ.js';
3
+ import { A as ActorState, a as GitGovSession, k as ISessionManager, S as SyncPreferencesUpdate, l as SyncStatus, m as AuditState, n as AuditStateUpdate, G as GitGovConfig, o as IConfigManager, p as SyncConfig, q as SyncDefaults, K as KeyProvider, r as KeyProviderError, s as KeyProviderErrorCode, i as FileListOptions, h as FileLister, j as FileStats, F as FsFileListerOptions, M as MemoryFileListerOptions, I as IGitModule } from './index-LULVRsCZ.js';
4
+ export { C as ConfigStore, t as Git } from './index-LULVRsCZ.js';
5
+ import { S as SessionManager, g as IdentityAdapter, h as IExecutionAdapter, i as ExecutionAdapterDependencies, E as EnvironmentValidation, I as IProjectInitializer, d as FsKeyProvider, e as FsKeyProviderOptions, f as FsFileLister, D as DEFAULT_STATE_BRANCH, j as AgentExecutionContext, k as AgentOutput, c as AgentResponse, A as AgentRunnerDependencies, l as AgentRunnerEvent, m as ApiEngine, n as AuthConfig, o as AuthType, C as CustomEngine, p as Engine, q as EngineType, r as IAgentLoader, b as IAgentRunner, L as LocalEngine, M as McpEngine, s as ProtocolHandler, P as ProtocolHandlerRegistry, R as RunOptions, t as RuntimeHandler, u as RuntimeHandlerRegistry } from './agent_runner-DijNVjaF.js';
6
+ import { E as EnvKeyProvider, a as EnvKeyProviderOptions, M as MockKeyProvider, b as MockKeyProviderOptions, c as MemoryFileLister } from './memory_file_lister-BCY4ZYGW.js';
7
7
  import { ValidateFunction } from 'ajv';
8
- import { D as DEFAULT_ID_ENCODER, I as IdEncoder, R as RecordStore } from './record_store-BXKWqon5.js';
8
+ import './session_store-I4Z6PW2c.js';
9
9
 
10
10
  /**
11
11
  * SessionManager Module
@@ -190,7 +190,6 @@ declare const index$q_AgentPayload: typeof AgentPayload;
190
190
  declare const index$q_AgentRecord: typeof AgentRecord;
191
191
  declare const index$q_ChangelogPayload: typeof ChangelogPayload;
192
192
  declare const index$q_ChangelogRecord: typeof ChangelogRecord;
193
- declare const index$q_CustomRecord: typeof CustomRecord;
194
193
  declare const index$q_CyclePayload: typeof CyclePayload;
195
194
  declare const index$q_CycleRecord: typeof CycleRecord;
196
195
  declare const index$q_EmbeddedMetadataHeader: typeof EmbeddedMetadataHeader;
@@ -215,7 +214,7 @@ declare const index$q_TaskPayload: typeof TaskPayload;
215
214
  declare const index$q_TaskRecord: typeof TaskRecord;
216
215
  type index$q_WorkflowRecord = WorkflowRecord;
217
216
  declare namespace index$q {
218
- export { index$q_ActorPayload as ActorPayload, index$q_ActorRecord as ActorRecord, index$q_AgentPayload as AgentPayload, index$q_AgentRecord as AgentRecord, index$q_ChangelogPayload as ChangelogPayload, index$q_ChangelogRecord as ChangelogRecord, index$q_CustomRecord as CustomRecord, index$q_CyclePayload as CyclePayload, index$q_CycleRecord as CycleRecord, index$q_EmbeddedMetadataHeader as EmbeddedMetadataHeader, index$q_EmbeddedMetadataRecord as EmbeddedMetadataRecord, index$q_ExecutionPayload as ExecutionPayload, index$q_ExecutionRecord as ExecutionRecord, index$q_FeedbackPayload as FeedbackPayload, index$q_FeedbackRecord as FeedbackRecord, index$q_GitGovActorRecord as GitGovActorRecord, index$q_GitGovAgentRecord as GitGovAgentRecord, index$q_GitGovChangelogRecord as GitGovChangelogRecord, index$q_GitGovCycleRecord as GitGovCycleRecord, index$q_GitGovError as GitGovError, index$q_GitGovExecutionRecord as GitGovExecutionRecord, index$q_GitGovFeedbackRecord as GitGovFeedbackRecord, index$q_GitGovRecord as GitGovRecord, index$q_GitGovRecordPayload as GitGovRecordPayload, index$q_GitGovRecordType as GitGovRecordType, index$q_GitGovTaskRecord as GitGovTaskRecord, index$q_Signature as Signature, index$q_TaskPayload as TaskPayload, index$q_TaskRecord as TaskRecord, type index$q_WorkflowRecord as WorkflowRecord };
217
+ export { index$q_ActorPayload as ActorPayload, index$q_ActorRecord as ActorRecord, index$q_AgentPayload as AgentPayload, index$q_AgentRecord as AgentRecord, index$q_ChangelogPayload as ChangelogPayload, index$q_ChangelogRecord as ChangelogRecord, index$q_CyclePayload as CyclePayload, index$q_CycleRecord as CycleRecord, index$q_EmbeddedMetadataHeader as EmbeddedMetadataHeader, index$q_EmbeddedMetadataRecord as EmbeddedMetadataRecord, index$q_ExecutionPayload as ExecutionPayload, index$q_ExecutionRecord as ExecutionRecord, index$q_FeedbackPayload as FeedbackPayload, index$q_FeedbackRecord as FeedbackRecord, index$q_GitGovActorRecord as GitGovActorRecord, index$q_GitGovAgentRecord as GitGovAgentRecord, index$q_GitGovChangelogRecord as GitGovChangelogRecord, index$q_GitGovCycleRecord as GitGovCycleRecord, index$q_GitGovError as GitGovError, index$q_GitGovExecutionRecord as GitGovExecutionRecord, index$q_GitGovFeedbackRecord as GitGovFeedbackRecord, index$q_GitGovRecord as GitGovRecord, index$q_GitGovRecordPayload as GitGovRecordPayload, index$q_GitGovRecordType as GitGovRecordType, index$q_GitGovTaskRecord as GitGovTaskRecord, index$q_Signature as Signature, index$q_TaskPayload as TaskPayload, index$q_TaskRecord as TaskRecord, type index$q_WorkflowRecord as WorkflowRecord };
219
218
  }
220
219
 
221
220
  declare const index$p_DEFAULT_ID_ENCODER: typeof DEFAULT_ID_ENCODER;
@@ -479,6 +478,11 @@ declare class LintModule implements ILintModule {
479
478
  * @returns Array of lint results
480
479
  */
481
480
  lintRecord(record: GitGovRecord, context: LintRecordContext): LintResult[];
481
+ /**
482
+ * Validates typed references by prefix (pure, no I/O).
483
+ * Delegates to private validateTypedReferencesByPrefix.
484
+ */
485
+ lintRecordReferences(record: GitGovRecord, context: LintRecordContext): LintResult[];
482
486
  /**
483
487
  * Validates all records from stores.
484
488
  * Iterates this.stores to collect records, then validates each one.
@@ -508,6 +512,14 @@ declare class LintModule implements ILintModule {
508
512
  * @private
509
513
  */
510
514
  private validateTimestamps;
515
+ /**
516
+ * [EARS-E2] Validates typed references by prefix.
517
+ * Valid prefixes: file:, task:, cycle:, adapter:, url:, commit:, pr:
518
+ * Reports a warning for unknown prefixes and an error for empty values after known prefix.
519
+ * Pure — does not resolve actual references.
520
+ * @private
521
+ */
522
+ private validateTypedReferencesByPrefix;
511
523
  /**
512
524
  * [EARS-E1] through [EARS-E6] Validates references.
513
525
  * Uses Store<T> for lookups.
@@ -551,15 +563,15 @@ declare class LintModule implements ILintModule {
551
563
  */
552
564
  private fixChecksum;
553
565
  /**
554
- * Fixes signature structure issues.
555
- * @private
556
- */
557
- /**
558
- * [EARS-F9] Fixes signature structure issues.
566
+ * [EARS-F9] [EARS-F10] Fixes signature structure issues.
559
567
  *
560
568
  * Preserves valid keyId and role from existing signature if present,
561
569
  * only using options.keyId as fallback when no existing signature exists.
562
570
  *
571
+ * [EARS-F10] When the ONLY problem is a missing `notes` field (no other
572
+ * signature errors exist for this record), adds `notes` WITHOUT regenerating
573
+ * the signature — preserving the existing cryptographic value.
574
+ *
563
575
  * @private
564
576
  */
565
577
  private fixSignature;
@@ -1861,7 +1873,7 @@ type SignatureConfig = Partial<Pick<Signature, 'keyId' | 'role' | 'notes'>> & {
1861
1873
  */
1862
1874
  type CreateEmbeddedMetadataOptions = {
1863
1875
  /** Header configuration (partial override, excludes auto-generated fields) */
1864
- header?: Partial<Pick<EmbeddedMetadataHeader, 'version' | 'type' | 'schemaUrl' | 'schemaChecksum'>>;
1876
+ header?: Partial<Pick<EmbeddedMetadataHeader, 'version' | 'type'>>;
1865
1877
  /** Signature configuration (if not provided, uses default test signature) */
1866
1878
  signature?: SignatureConfig;
1867
1879
  /** Custom signatures array (if provided, overrides signature config) */
@@ -2809,15 +2821,6 @@ declare const Schemas: {
2809
2821
  enum: string[];
2810
2822
  description: string;
2811
2823
  };
2812
- schemaUrl: {
2813
- type: string;
2814
- description: string;
2815
- };
2816
- schemaChecksum: {
2817
- type: string;
2818
- pattern: string;
2819
- description: string;
2820
- };
2821
2824
  payloadChecksum: {
2822
2825
  type: string;
2823
2826
  pattern: string;
@@ -2873,7 +2876,7 @@ declare const Schemas: {
2873
2876
  };
2874
2877
  required: string[];
2875
2878
  additionalProperties: boolean;
2876
- oneOf: ({
2879
+ oneOf: {
2877
2880
  if: {
2878
2881
  properties: {
2879
2882
  header: {
@@ -2891,34 +2894,10 @@ declare const Schemas: {
2891
2894
  payload: {
2892
2895
  $ref: string;
2893
2896
  };
2894
- header?: never;
2895
- };
2896
- };
2897
- else: boolean;
2898
- } | {
2899
- if: {
2900
- properties: {
2901
- header: {
2902
- type: string;
2903
- properties: {
2904
- type: {
2905
- const: string;
2906
- };
2907
- };
2908
- };
2909
- };
2910
- };
2911
- then: {
2912
- properties: {
2913
- header: {
2914
- type: string;
2915
- required: string[];
2916
- };
2917
- payload?: never;
2918
2897
  };
2919
2898
  };
2920
2899
  else: boolean;
2921
- })[];
2900
+ }[];
2922
2901
  examples: ({
2923
2902
  header: {
2924
2903
  version: string;
@@ -4500,15 +4479,6 @@ declare function getSchema(name: SchemaName): {
4500
4479
  enum: string[];
4501
4480
  description: string;
4502
4481
  };
4503
- schemaUrl: {
4504
- type: string;
4505
- description: string;
4506
- };
4507
- schemaChecksum: {
4508
- type: string;
4509
- pattern: string;
4510
- description: string;
4511
- };
4512
4482
  payloadChecksum: {
4513
4483
  type: string;
4514
4484
  pattern: string;
@@ -4564,7 +4534,7 @@ declare function getSchema(name: SchemaName): {
4564
4534
  };
4565
4535
  required: string[];
4566
4536
  additionalProperties: boolean;
4567
- oneOf: ({
4537
+ oneOf: {
4568
4538
  if: {
4569
4539
  properties: {
4570
4540
  header: {
@@ -4582,34 +4552,10 @@ declare function getSchema(name: SchemaName): {
4582
4552
  payload: {
4583
4553
  $ref: string;
4584
4554
  };
4585
- header?: never;
4586
4555
  };
4587
4556
  };
4588
4557
  else: boolean;
4589
- } | {
4590
- if: {
4591
- properties: {
4592
- header: {
4593
- type: string;
4594
- properties: {
4595
- type: {
4596
- const: string;
4597
- };
4598
- };
4599
- };
4600
- };
4601
- };
4602
- then: {
4603
- properties: {
4604
- header: {
4605
- type: string;
4606
- required: string[];
4607
- };
4608
- payload?: never;
4609
- };
4610
- };
4611
- else: boolean;
4612
- })[];
4558
+ }[];
4613
4559
  examples: ({
4614
4560
  header: {
4615
4561
  version: string;
@@ -5716,6 +5662,7 @@ declare const index$5_ConflictMarkersPresentError: typeof ConflictMarkersPresent
5716
5662
  declare const index$5_ConflictType: typeof ConflictType;
5717
5663
  type index$5_CryptoModuleRequiredError = CryptoModuleRequiredError;
5718
5664
  declare const index$5_CryptoModuleRequiredError: typeof CryptoModuleRequiredError;
5665
+ declare const index$5_DEFAULT_STATE_BRANCH: typeof DEFAULT_STATE_BRANCH;
5719
5666
  declare const index$5_ExpectedFilesScope: typeof ExpectedFilesScope;
5720
5667
  declare const index$5_ISyncStateModule: typeof ISyncStateModule;
5721
5668
  declare const index$5_IntegrityViolation: typeof IntegrityViolation;
@@ -5760,7 +5707,7 @@ declare const index$5_isSyncStateError: typeof isSyncStateError;
5760
5707
  declare const index$5_isUncommittedChangesError: typeof isUncommittedChangesError;
5761
5708
  declare const index$5_isWorktreeSetupError: typeof isWorktreeSetupError;
5762
5709
  declare namespace index$5 {
5763
- export { index$5_ActorIdentityMismatchError as ActorIdentityMismatchError, AuditScope$1 as AuditScope, index$5_AuditStateOptions as AuditStateOptions, index$5_AuditStateReport as AuditStateReport, index$5_ConflictDiff as ConflictDiff, index$5_ConflictFileDiff as ConflictFileDiff, index$5_ConflictInfo as ConflictInfo, index$5_ConflictMarkersPresentError as ConflictMarkersPresentError, index$5_ConflictType as ConflictType, index$5_CryptoModuleRequiredError as CryptoModuleRequiredError, index$5_ExpectedFilesScope as ExpectedFilesScope, index$5_ISyncStateModule as ISyncStateModule, index$5_IntegrityViolation as IntegrityViolation, index$5_IntegrityViolationError as IntegrityViolationError, index$5_NoRebaseInProgressError as NoRebaseInProgressError, index$5_PullScheduler as PullScheduler, type index$5_PullSchedulerConfig as PullSchedulerConfig, type index$5_PullSchedulerDependencies as PullSchedulerDependencies, type index$5_PullSchedulerResult as PullSchedulerResult, index$5_PushFromStateBranchError as PushFromStateBranchError, index$5_RebaseAlreadyInProgressError as RebaseAlreadyInProgressError, index$5_StateBranchSetupError as StateBranchSetupError, index$5_StateDeltaFile as StateDeltaFile, index$5_SyncStateError as SyncStateError, index$5_SyncStateModuleDependencies as SyncStateModuleDependencies, index$5_SyncStatePullOptions as SyncStatePullOptions, index$5_SyncStatePullResult as SyncStatePullResult, index$5_SyncStatePushOptions as SyncStatePushOptions, index$5_SyncStatePushResult as SyncStatePushResult, index$5_SyncStateResolveOptions as SyncStateResolveOptions, index$5_SyncStateResolveResult as SyncStateResolveResult, index$5_UncommittedChangesError as UncommittedChangesError, index$5_WorktreeSetupError as WorktreeSetupError, index$5_isActorIdentityMismatchError as isActorIdentityMismatchError, index$5_isConflictMarkersPresentError as isConflictMarkersPresentError, index$5_isCryptoModuleRequiredError as isCryptoModuleRequiredError, index$5_isIntegrityViolationError as isIntegrityViolationError, index$5_isNoRebaseInProgressError as isNoRebaseInProgressError, index$5_isPushFromStateBranchError as isPushFromStateBranchError, index$5_isRebaseAlreadyInProgressError as isRebaseAlreadyInProgressError, index$5_isStateBranchSetupError as isStateBranchSetupError, index$5_isSyncStateError as isSyncStateError, index$5_isUncommittedChangesError as isUncommittedChangesError, index$5_isWorktreeSetupError as isWorktreeSetupError };
5710
+ export { index$5_ActorIdentityMismatchError as ActorIdentityMismatchError, AuditScope$1 as AuditScope, index$5_AuditStateOptions as AuditStateOptions, index$5_AuditStateReport as AuditStateReport, index$5_ConflictDiff as ConflictDiff, index$5_ConflictFileDiff as ConflictFileDiff, index$5_ConflictInfo as ConflictInfo, index$5_ConflictMarkersPresentError as ConflictMarkersPresentError, index$5_ConflictType as ConflictType, index$5_CryptoModuleRequiredError as CryptoModuleRequiredError, index$5_DEFAULT_STATE_BRANCH as DEFAULT_STATE_BRANCH, index$5_ExpectedFilesScope as ExpectedFilesScope, index$5_ISyncStateModule as ISyncStateModule, index$5_IntegrityViolation as IntegrityViolation, index$5_IntegrityViolationError as IntegrityViolationError, index$5_NoRebaseInProgressError as NoRebaseInProgressError, index$5_PullScheduler as PullScheduler, type index$5_PullSchedulerConfig as PullSchedulerConfig, type index$5_PullSchedulerDependencies as PullSchedulerDependencies, type index$5_PullSchedulerResult as PullSchedulerResult, index$5_PushFromStateBranchError as PushFromStateBranchError, index$5_RebaseAlreadyInProgressError as RebaseAlreadyInProgressError, index$5_StateBranchSetupError as StateBranchSetupError, index$5_StateDeltaFile as StateDeltaFile, index$5_SyncStateError as SyncStateError, index$5_SyncStateModuleDependencies as SyncStateModuleDependencies, index$5_SyncStatePullOptions as SyncStatePullOptions, index$5_SyncStatePullResult as SyncStatePullResult, index$5_SyncStatePushOptions as SyncStatePushOptions, index$5_SyncStatePushResult as SyncStatePushResult, index$5_SyncStateResolveOptions as SyncStateResolveOptions, index$5_SyncStateResolveResult as SyncStateResolveResult, index$5_UncommittedChangesError as UncommittedChangesError, index$5_WorktreeSetupError as WorktreeSetupError, index$5_isActorIdentityMismatchError as isActorIdentityMismatchError, index$5_isConflictMarkersPresentError as isConflictMarkersPresentError, index$5_isCryptoModuleRequiredError as isCryptoModuleRequiredError, index$5_isIntegrityViolationError as isIntegrityViolationError, index$5_isNoRebaseInProgressError as isNoRebaseInProgressError, index$5_isPushFromStateBranchError as isPushFromStateBranchError, index$5_isRebaseAlreadyInProgressError as isRebaseAlreadyInProgressError, index$5_isStateBranchSetupError as isStateBranchSetupError, index$5_isSyncStateError as isSyncStateError, index$5_isUncommittedChangesError as isUncommittedChangesError, index$5_isWorktreeSetupError as isWorktreeSetupError };
5764
5711
  }
5765
5712
 
5766
5713
  /**
@@ -7126,4 +7073,4 @@ declare namespace index {
7126
7073
  export { type index_ActiveWaiver as ActiveWaiver, type index_AuditContentsInput as AuditContentsInput, type index_AuditOptions as AuditOptions, type index_AuditResult as AuditResult, type index_AuditScope as AuditScope, type index_AuditSummary as AuditSummary, type index_AuditTarget as AuditTarget, type index_CodeScope as CodeScope, type index_CreateWaiverOptions as CreateWaiverOptions, type index_FailOnSeverity as FailOnSeverity, type index_FileContent as FileContent, type index_GitgovScope as GitgovScope, type index_GroupByOption as GroupByOption, type index_IWaiverReader as IWaiverReader, type index_JiraScope as JiraScope, type index_OutputFormat as OutputFormat, type index_ScopeConfig as ScopeConfig, index_ScopeSelector as ScopeSelector, index_ScoringEngine as ScoringEngine, type index_SourceAuditorDependencies as SourceAuditorDependencies, index_SourceAuditorModule as SourceAuditorModule, type index_WaiverMetadata as WaiverMetadata, index_WaiverReader as WaiverReader, type index_WaiverStatus as WaiverStatus, index_WaiverWriter as WaiverWriter };
7127
7074
  }
7128
7075
 
7129
- export { ActivityEvent, ActorRecord, ActorState, index$c as Adapters, AgentRecord, AgentResponse, AllRecords, AuditState, AuditStateReport, index$f as BacklogAdapter, index$g as ChangelogAdapter, ChangelogRecord, CollaborationMetrics, index$r as Config, index$b as Crypto, CustomRecord, CycleRecord, DerivedStates, index$2 as DiagramGenerator, EmbeddedMetadataRecord, EnrichedTaskRecord, EnvironmentValidation, index$n as EventBus, index$j as ExecutionAdapter, ExecutionRecord, index$a as Factories, index$i as FeedbackAdapter, FeedbackRecord, index$8 as FileLister, index$1 as FindingDetector, FixReport, GitGovActorRecord, GitGovAgentRecord, GitGovChangelogRecord, GitGovConfig, GitGovCycleRecord, GitGovExecutionRecord, GitGovFeedbackRecord, GitGovRecord, GitGovRecordPayload, GitGovRecordType, GitGovTaskRecord, type IAgentAdapter, IAgentRunner, type IBacklogAdapter, IConfigManager, IExecutionAdapter, type IFeedbackAdapter, FileLister as IFileLister, IIdentityAdapter, KeyProvider as IKeyProvider, ILintModule, IRecordMetrics, IRecordProjection, IRecordProjector, ISessionManager, ISyncStateModule, IdEncoder, index$l as IdentityAdapter, IndexData, IndexGenerationReport, IntegrityReport, index$9 as KeyProvider, index$k as Lint, LintOptions, LintReport$1 as LintReport, LintResult, index$7 as Logger, ProductivityMetrics, index$d as ProjectAdapter, type ProjectInitResult, index$e as ProjectInitializer, ProjectionContext, index$o as RecordMetrics, RecordMetricsDependencies, index$m as RecordProjection, RecordProjectorDependencies, RecordStore, RecordStores$1 as RecordStores, index$q as Records, RunOptions, index$3 as Runner, index$6 as Schemas, index$s as Session, Signature, index as SourceAuditor, index$p as Store, index$5 as SyncState, SyncStatePullResult, SyncStatePushResult, SyncStateResolveResult, SyncStatus, SystemStatus, TaskHealthReport, TaskRecord, index$4 as Validation, ValidatorType, index$h as WorkflowAdapter, type WorkflowRecord };
7076
+ export { ActivityEvent, ActorRecord, ActorState, index$c as Adapters, AgentRecord, AgentResponse, AllRecords, AuditState, AuditStateReport, index$f as BacklogAdapter, index$g as ChangelogAdapter, ChangelogRecord, CollaborationMetrics, index$r as Config, index$b as Crypto, CycleRecord, DerivedStates, index$2 as DiagramGenerator, EmbeddedMetadataRecord, EnrichedTaskRecord, EnvironmentValidation, index$n as EventBus, index$j as ExecutionAdapter, ExecutionRecord, index$a as Factories, index$i as FeedbackAdapter, FeedbackRecord, index$8 as FileLister, index$1 as FindingDetector, FixReport, GitGovActorRecord, GitGovAgentRecord, GitGovChangelogRecord, GitGovConfig, GitGovCycleRecord, GitGovExecutionRecord, GitGovFeedbackRecord, GitGovRecord, GitGovRecordPayload, GitGovRecordType, GitGovTaskRecord, type IAgentAdapter, IAgentRunner, type IBacklogAdapter, IConfigManager, IExecutionAdapter, type IFeedbackAdapter, FileLister as IFileLister, IIdentityAdapter, KeyProvider as IKeyProvider, ILintModule, IRecordMetrics, IRecordProjection, IRecordProjector, ISessionManager, ISyncStateModule, IdEncoder, index$l as IdentityAdapter, IndexData, IndexGenerationReport, IntegrityReport, index$9 as KeyProvider, index$k as Lint, LintOptions, LintReport$1 as LintReport, LintResult, index$7 as Logger, ProductivityMetrics, index$d as ProjectAdapter, type ProjectInitResult, index$e as ProjectInitializer, ProjectionContext, index$o as RecordMetrics, RecordMetricsDependencies, index$m as RecordProjection, RecordProjectorDependencies, RecordStore, RecordStores$1 as RecordStores, index$q as Records, RunOptions, index$3 as Runner, index$6 as Schemas, index$s as Session, Signature, index as SourceAuditor, index$p as Store, index$5 as SyncState, SyncStatePullResult, SyncStatePushResult, SyncStateResolveResult, SyncStatus, SystemStatus, TaskHealthReport, TaskRecord, index$4 as Validation, ValidatorType, index$h as WorkflowAdapter, type WorkflowRecord };