@zq-silk/yui 0.6.0 → 0.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/dist/agent/managedRuntimeEnvironment.js +2 -1
- package/dist/cli/commandCatalog.js +251 -13
- package/dist/cli/updateOrchestrator.js +8 -0
- package/dist/cli/updatePorts.js +76 -22
- package/dist/cli.js +264 -20
- package/dist/commands/configCommands.js +83 -9
- package/dist/commands/controllerCommands.js +103 -0
- package/dist/commands/deliveryGuardPreflight.js +30 -0
- package/dist/commands/durableJobCommands.js +231 -0
- package/dist/commands/executionAuditCommands.js +193 -0
- package/dist/commands/grantCommands.js +374 -0
- package/dist/commands/projectCommands.js +119 -81
- package/dist/commands/releaseCommands.js +444 -0
- package/dist/commands/resourcesCommands.js +274 -0
- package/dist/commands/sessionCommands.js +104 -0
- package/dist/commands/taskActor.js +117 -0
- package/dist/commands/taskChangeSetCommands.js +60 -0
- package/dist/commands/taskCommands.js +618 -202
- package/dist/commands/taskCompletionGate.js +78 -1
- package/dist/commands/taskContextCommand.js +33 -6
- package/dist/commands/taskInputCommands.js +1 -1
- package/dist/commands/taskIntegrationCommands.js +136 -33
- package/dist/commands/taskIntegrationQueueCommands.js +228 -0
- package/dist/commands/taskNextActionCommand.js +100 -0
- package/dist/commands/taskOverlapCommands.js +120 -0
- package/dist/commands/taskOverviewCommand.js +36 -8
- package/dist/commands/telemetryCommands.js +330 -0
- package/dist/commands/workflowCommands.js +415 -0
- package/dist/config/yuiConfig.js +62 -0
- package/dist/controller/clientRuntime.js +42 -1
- package/dist/controller/controller.js +402 -56
- package/dist/controller/controllerMain.js +25 -2
- package/dist/controller/domainIdentity.js +16 -8
- package/dist/controller/fileSchedulerStoreAdapter.js +423 -31
- package/dist/controller/handoverCandidate.js +168 -0
- package/dist/controller/jobClient.js +102 -0
- package/dist/controller/jobControl.js +613 -0
- package/dist/controller/jobSupervisor.js +498 -0
- package/dist/controller/providerHookRunFence.js +34 -5
- package/dist/controller/resourceCleanupLinux.js +18 -9
- package/dist/controller/resourceInventoryLinux.js +90 -39
- package/dist/controller/runtime.js +165 -15
- package/dist/controller/runtimeEventInbox.js +234 -57
- package/dist/controller/runtimeEventProcessor.js +297 -58
- package/dist/controller/sessionOwnerReconciliation.js +321 -0
- package/dist/core/controllerServer.js +416 -27
- package/dist/core/controllerTelemetry.js +167 -0
- package/dist/doctor/doctor.js +113 -16
- package/dist/domain/validation.js +9 -0
- package/dist/execution/executionGroup.js +40 -3
- package/dist/executor/agentExecutor.js +6 -3
- package/dist/executor/effectiveLaunch.js +52 -0
- package/dist/executor/executorRegistry.js +50 -0
- package/dist/executor/fileRoleLaunchPlanner.js +61 -6
- package/dist/grant/capabilityGrant.js +282 -0
- package/dist/integration/changeSet.js +16 -3
- package/dist/integration/changeSetManifest.js +46 -0
- package/dist/integration/gitIntegrationService.js +528 -147
- package/dist/integration/integrationAttempt.js +54 -5
- package/dist/integration/integrationQueueEntry.js +221 -0
- package/dist/integration/integrationQueueService.js +955 -0
- package/dist/integration/manifestTags.js +99 -0
- package/dist/integration/overlapDiagnostics.js +211 -0
- package/dist/job/durableJob.js +449 -0
- package/dist/job/jobRunner.js +350 -0
- package/dist/lifecycle/exactRunTerminalization.js +24 -2
- package/dist/lifecycle/providerErrorClass.js +126 -0
- package/dist/message/message.js +16 -3
- package/dist/observability/executionAudit.js +545 -0
- package/dist/observability/faultClassification.js +160 -0
- package/dist/observability/runtimeIdentity.js +367 -0
- package/dist/release/fakeReleasePorts.js +55 -0
- package/dist/release/releaseHandover.js +475 -0
- package/dist/release/releaseIdempotencyStore.js +165 -0
- package/dist/release/releaseWorkflow.js +459 -0
- package/dist/release/releaseWorkflowEngine.js +688 -0
- package/dist/release/releaseWorkflowPorts.js +1720 -0
- package/dist/release/runtimeRelease.js +495 -0
- package/dist/release/workflowFileLock.js +218 -0
- package/dist/repository/gitWorkspace.js +177 -1
- package/dist/repository/projectMaintenanceLock.js +315 -0
- package/dist/repository/taskWorkspaceCoordinator.js +87 -17
- package/dist/repository/taskWorkspacePreparer.js +1091 -517
- package/dist/resources/autoResourceGc.js +116 -0
- package/dist/resources/liveReferences.js +574 -0
- package/dist/resources/resourceDiscovery.js +477 -0
- package/dist/resources/resourceGc.js +645 -0
- package/dist/resources/resourceRegistrar.js +256 -0
- package/dist/resources/resourceRegistry.js +150 -0
- package/dist/resources/resourceRegistryStore.js +41 -0
- package/dist/resources/resourceTypes.js +42 -0
- package/dist/resources/sqliteResourceRegistry.js +111 -0
- package/dist/review/reviewConfig.js +10 -0
- package/dist/review/reviewFinding.js +240 -0
- package/dist/review/reviewFindingLedger.js +545 -0
- package/dist/review/reviewOutcomeClassifier.js +61 -0
- package/dist/review/reviewRound.js +56 -4
- package/dist/run/agentRun.js +80 -4
- package/dist/run/providerRetry.js +84 -0
- package/dist/run/providerRetryConfig.js +63 -0
- package/dist/run/yieldReceipt.js +65 -0
- package/dist/runtime/exactControlPlane.js +79 -2
- package/dist/runtime/index.js +4 -0
- package/dist/runtime/sessionOwnerIdentity.js +269 -0
- package/dist/runtime/sessionOwnerRegistry.js +132 -0
- package/dist/runtime/sessionReconciliation.js +93 -0
- package/dist/runtime/sessionTerminationGuard.js +211 -0
- package/dist/runtime/taskRuntimeIsolation.js +13 -0
- package/dist/runtime/tmuxAdapters.js +34 -1
- package/dist/scheduler/actionability.js +155 -0
- package/dist/scheduler/activeRoleRunDelivery.js +14 -5
- package/dist/scheduler/activeTaskProgress.js +60 -0
- package/dist/scheduler/leaderWakeupProcessor.js +22 -11
- package/dist/scheduler/roleRunStall.js +135 -29
- package/dist/scheduler/taskExecutionProjection.js +11 -0
- package/dist/storage/compatibleTaskStore.js +112 -5
- package/dist/storage/migration/productionRegistry.js +736 -1
- package/dist/storage/sqliteSchema.js +264 -3
- package/dist/storage/sqliteStore.js +487 -13
- package/dist/storage/storeRpc.js +21 -0
- package/dist/storage/taskStore.js +974 -21
- package/dist/storage/upgrade/homeClassification.js +120 -2
- package/dist/storage/upgrade/migrationReceipt.js +67 -0
- package/dist/storage/upgrade/pseudoLayoutRepair.js +241 -0
- package/dist/storage/upgrade/recordVersions.js +10 -1
- package/dist/storage/upgrade/sqliteMigrationTarget.js +58 -6
- package/dist/storage/upgrade/sqliteRecordMigrationTarget.js +290 -0
- package/dist/storage/upgrade/sqliteStateMigration.js +258 -2
- package/dist/storage/upgrade/upgradeOrchestrator.js +482 -16
- package/dist/task/deliveryGuard.js +226 -0
- package/dist/task/nextAction.js +738 -0
- package/dist/task/repairWave.js +137 -0
- package/dist/task/taskRecordReference.js +6 -1
- package/dist/telemetry/sqliteTelemetryStore.js +387 -0
- package/dist/telemetry/telemetryCompaction.js +251 -0
- package/dist/telemetry/telemetryConfig.js +64 -0
- package/dist/telemetry/telemetryRouter.js +32 -0
- package/dist/telemetry/telemetryStore.js +19 -0
- package/dist/telemetry/telemetryWiring.js +33 -0
- package/dist/tmux/tmuxManager.js +20 -1
- package/dist/tmux/tmuxSocketEndpoint.js +20 -0
- package/dist/verification/gateArtifact.js +216 -0
- package/dist/verification/gateArtifactStore.js +87 -0
- package/dist/verification/verificationGateService.js +414 -0
- package/dist/verification/verificationPlan.js +308 -0
- package/dist/workspace/gitChangeSetCapture.js +12 -2
- package/dist/workspace/workItemChangeSetManager.js +60 -3
- package/package.json +1 -1
- package/skills/yui-leader/SKILL.md +8 -0
|
@@ -27,7 +27,7 @@ export const SQLITE_LAYOUT_VERSION = 7;
|
|
|
27
27
|
/** The aggregate version of the normalized SQLite schema. */
|
|
28
28
|
export const SQLITE_AGGREGATE_VERSION = 1;
|
|
29
29
|
/** The current schema migration version. */
|
|
30
|
-
export const SQLITE_SCHEMA_VERSION =
|
|
30
|
+
export const SQLITE_SCHEMA_VERSION = 9;
|
|
31
31
|
/** Telemetry retention bounds (§4.4). Open question 3 in §11; defaults from the design. */
|
|
32
32
|
export const TELEMETRY_KEEP_PER_GENERATION = 200;
|
|
33
33
|
export const TELEMETRY_RUN_CAP = 50_000;
|
|
@@ -365,8 +365,259 @@ CREATE TABLE IF NOT EXISTS telemetry (
|
|
|
365
365
|
) WITHOUT ROWID;
|
|
366
366
|
CREATE INDEX IF NOT EXISTS idx_telemetry_run ON telemetry(task_id, run_id);
|
|
367
367
|
`;
|
|
368
|
+
/**
|
|
369
|
+
* Migration 2: post-baseline task-scoped record families. This single
|
|
370
|
+
* migration creates the DurableJob, CapabilityGrant, and ReleaseWorkflow
|
|
371
|
+
* tables so a fresh database receives the complete merged schema atomically.
|
|
372
|
+
*/
|
|
373
|
+
const MIGRATION_2_SQL = `
|
|
374
|
+
CREATE TABLE IF NOT EXISTS durable_jobs (
|
|
375
|
+
job_id TEXT PRIMARY KEY,
|
|
376
|
+
task_id TEXT NOT NULL,
|
|
377
|
+
idempotency_key TEXT,
|
|
378
|
+
status TEXT NOT NULL,
|
|
379
|
+
payload TEXT NOT NULL,
|
|
380
|
+
created_at TEXT NOT NULL,
|
|
381
|
+
updated_at TEXT NOT NULL
|
|
382
|
+
);
|
|
383
|
+
CREATE INDEX IF NOT EXISTS idx_durable_jobs_task ON durable_jobs(task_id);
|
|
384
|
+
CREATE INDEX IF NOT EXISTS idx_durable_jobs_status ON durable_jobs(status);
|
|
385
|
+
CREATE UNIQUE INDEX IF NOT EXISTS idx_durable_jobs_idempotency
|
|
386
|
+
ON durable_jobs(task_id, idempotency_key) WHERE idempotency_key IS NOT NULL;
|
|
387
|
+
CREATE TABLE IF NOT EXISTS capability_grants (
|
|
388
|
+
task_id TEXT NOT NULL,
|
|
389
|
+
grant_id TEXT NOT NULL,
|
|
390
|
+
payload TEXT NOT NULL,
|
|
391
|
+
updated_at TEXT NOT NULL,
|
|
392
|
+
PRIMARY KEY (task_id, grant_id)
|
|
393
|
+
);
|
|
394
|
+
|
|
395
|
+
CREATE TABLE IF NOT EXISTS release_workflows (
|
|
396
|
+
task_id TEXT NOT NULL,
|
|
397
|
+
workflow_id TEXT NOT NULL,
|
|
398
|
+
payload TEXT NOT NULL,
|
|
399
|
+
updated_at TEXT NOT NULL,
|
|
400
|
+
PRIMARY KEY (task_id, workflow_id)
|
|
401
|
+
);
|
|
402
|
+
`;
|
|
403
|
+
/**
|
|
404
|
+
* Migration 3: Job caller key hashes (task-14, rr13). Durable SHA-256 hashes of
|
|
405
|
+
* the caller key bound to each launched Session, used to fail-closed verify a
|
|
406
|
+
* DurableJob's caller against durable Run state.
|
|
407
|
+
*/
|
|
408
|
+
const MIGRATION_3_SQL = `
|
|
409
|
+
CREATE TABLE IF NOT EXISTS job_caller_key_hashes (
|
|
410
|
+
task_id TEXT NOT NULL,
|
|
411
|
+
role_name TEXT NOT NULL,
|
|
412
|
+
agent_id TEXT NOT NULL,
|
|
413
|
+
hash TEXT NOT NULL,
|
|
414
|
+
updated_at TEXT NOT NULL,
|
|
415
|
+
PRIMARY KEY (task_id, role_name, agent_id)
|
|
416
|
+
);
|
|
417
|
+
`;
|
|
418
|
+
/**
|
|
419
|
+
* Migration 4: DurableJob IDs are Task-local. Migration 2 accidentally made
|
|
420
|
+
* job_id the global primary key, so two Tasks allocating their first `job-1`
|
|
421
|
+
* could overwrite one another through the upsert path. Rebuild the table with
|
|
422
|
+
* the actual record identity `(task_id, job_id)` and restore its indexes.
|
|
423
|
+
* Never edit migration 2's checksum: existing Homes reach this repair through
|
|
424
|
+
* this adjacent schema migration.
|
|
425
|
+
*/
|
|
426
|
+
const MIGRATION_4_SQL = `
|
|
427
|
+
CREATE TABLE durable_jobs_v4 (
|
|
428
|
+
job_id TEXT NOT NULL,
|
|
429
|
+
task_id TEXT NOT NULL,
|
|
430
|
+
idempotency_key TEXT,
|
|
431
|
+
status TEXT NOT NULL,
|
|
432
|
+
payload TEXT NOT NULL,
|
|
433
|
+
created_at TEXT NOT NULL,
|
|
434
|
+
updated_at TEXT NOT NULL,
|
|
435
|
+
PRIMARY KEY (task_id, job_id)
|
|
436
|
+
);
|
|
437
|
+
INSERT INTO durable_jobs_v4
|
|
438
|
+
(job_id, task_id, idempotency_key, status, payload, created_at, updated_at)
|
|
439
|
+
SELECT job_id, task_id, idempotency_key, status, payload, created_at, updated_at
|
|
440
|
+
FROM durable_jobs;
|
|
441
|
+
DROP TABLE durable_jobs;
|
|
442
|
+
ALTER TABLE durable_jobs_v4 RENAME TO durable_jobs;
|
|
443
|
+
CREATE INDEX idx_durable_jobs_task ON durable_jobs(task_id);
|
|
444
|
+
CREATE INDEX idx_durable_jobs_status ON durable_jobs(status);
|
|
445
|
+
CREATE UNIQUE INDEX idx_durable_jobs_idempotency
|
|
446
|
+
ON durable_jobs(task_id, idempotency_key) WHERE idempotency_key IS NOT NULL;
|
|
447
|
+
`;
|
|
448
|
+
/**
|
|
449
|
+
* Migration 5: telemetry aggregate (Issue 09). The `telemetry` table (migration
|
|
450
|
+
* 1, §4.4) stores the bounded latest-per-key progress window; this companion
|
|
451
|
+
* table holds the authoritative per-Run/generation summary (count, first/last,
|
|
452
|
+
* max sequence, error count) so aggregates stay accurate after the window is
|
|
453
|
+
* pruned. Triggers maintain it on telemetry INSERT/UPDATE; DELETE intentionally
|
|
454
|
+
* leaves it untouched because pruned rows were still observed.
|
|
455
|
+
*/
|
|
456
|
+
const MIGRATION_5_SQL = `
|
|
457
|
+
CREATE TABLE IF NOT EXISTS telemetry_aggregate (
|
|
458
|
+
task_id TEXT NOT NULL,
|
|
459
|
+
role_name TEXT NOT NULL,
|
|
460
|
+
run_id TEXT NOT NULL,
|
|
461
|
+
generation TEXT NOT NULL,
|
|
462
|
+
first_at TEXT NOT NULL,
|
|
463
|
+
last_at TEXT NOT NULL,
|
|
464
|
+
count INTEGER NOT NULL,
|
|
465
|
+
max_sequence INTEGER,
|
|
466
|
+
error_count INTEGER NOT NULL DEFAULT 0,
|
|
467
|
+
updated_at TEXT NOT NULL,
|
|
468
|
+
PRIMARY KEY (task_id, role_name, run_id, generation)
|
|
469
|
+
) WITHOUT ROWID;
|
|
470
|
+
|
|
471
|
+
CREATE TRIGGER IF NOT EXISTS telemetry_ai AFTER INSERT ON telemetry
|
|
472
|
+
BEGIN
|
|
473
|
+
INSERT INTO telemetry_aggregate
|
|
474
|
+
(task_id, role_name, run_id, generation, first_at, last_at, count, max_sequence, error_count, updated_at)
|
|
475
|
+
VALUES
|
|
476
|
+
(NEW.task_id, NEW.role_name, NEW.run_id, NEW.generation, NEW.received_at, NEW.received_at, 1, NEW.sequence,
|
|
477
|
+
CASE WHEN json_valid(NEW.payload)
|
|
478
|
+
AND (COALESCE(json_extract(NEW.payload, '$.error'), '') <> ''
|
|
479
|
+
OR COALESCE(json_extract(NEW.payload, '$.errorKind'), '') <> '')
|
|
480
|
+
THEN 1 ELSE 0 END,
|
|
481
|
+
NEW.received_at)
|
|
482
|
+
ON CONFLICT(task_id, role_name, run_id, generation) DO UPDATE SET
|
|
483
|
+
first_at = MIN(telemetry_aggregate.first_at, excluded.first_at),
|
|
484
|
+
last_at = MAX(telemetry_aggregate.last_at, excluded.last_at),
|
|
485
|
+
count = telemetry_aggregate.count + 1,
|
|
486
|
+
max_sequence = CASE
|
|
487
|
+
WHEN excluded.max_sequence IS NOT NULL
|
|
488
|
+
AND (telemetry_aggregate.max_sequence IS NULL OR excluded.max_sequence > telemetry_aggregate.max_sequence)
|
|
489
|
+
THEN excluded.max_sequence ELSE telemetry_aggregate.max_sequence END,
|
|
490
|
+
error_count = telemetry_aggregate.error_count + excluded.error_count,
|
|
491
|
+
updated_at = excluded.updated_at;
|
|
492
|
+
END;
|
|
493
|
+
|
|
494
|
+
CREATE TRIGGER IF NOT EXISTS telemetry_au AFTER UPDATE ON telemetry
|
|
495
|
+
BEGIN
|
|
496
|
+
UPDATE telemetry_aggregate SET
|
|
497
|
+
last_at = CASE WHEN NEW.received_at > last_at THEN NEW.received_at ELSE last_at END,
|
|
498
|
+
max_sequence = CASE
|
|
499
|
+
WHEN NEW.sequence IS NOT NULL AND (max_sequence IS NULL OR NEW.sequence > max_sequence)
|
|
500
|
+
THEN NEW.sequence ELSE max_sequence END,
|
|
501
|
+
updated_at = NEW.received_at
|
|
502
|
+
WHERE task_id = NEW.task_id AND role_name = NEW.role_name
|
|
503
|
+
AND run_id = NEW.run_id AND generation = NEW.generation;
|
|
504
|
+
END;
|
|
505
|
+
`;
|
|
506
|
+
/**
|
|
507
|
+
* Migration 6: Issue 06 ReviewFinding ledger. Cross-Round semantic review
|
|
508
|
+
* findings with stable keys and Leader dispositions. Failed execution attempts
|
|
509
|
+
* never create rows; only completed Rounds feed the ledger.
|
|
510
|
+
*/
|
|
511
|
+
const MIGRATION_6_SQL = `
|
|
512
|
+
CREATE TABLE IF NOT EXISTS review_findings (
|
|
513
|
+
task_id TEXT NOT NULL,
|
|
514
|
+
finding_id TEXT NOT NULL,
|
|
515
|
+
stable_key TEXT NOT NULL,
|
|
516
|
+
severity TEXT NOT NULL,
|
|
517
|
+
payload TEXT NOT NULL,
|
|
518
|
+
updated_at TEXT NOT NULL,
|
|
519
|
+
PRIMARY KEY (task_id, finding_id)
|
|
520
|
+
);
|
|
521
|
+
CREATE INDEX IF NOT EXISTS idx_review_findings_task ON review_findings(task_id);
|
|
522
|
+
CREATE INDEX IF NOT EXISTS idx_review_findings_stable_key ON review_findings(task_id, stable_key);
|
|
523
|
+
`;
|
|
524
|
+
/**
|
|
525
|
+
* Version 5 migration: session owner physical identity records (Issue 03).
|
|
526
|
+
*
|
|
527
|
+
* One row per runtime generation, keyed by launch id. The payload column
|
|
528
|
+
* stores the full versioned JSON record; typed columns support the
|
|
529
|
+
* reconciliation queries (task/role lookup, PID liveness).
|
|
530
|
+
*/
|
|
531
|
+
const MIGRATION_7_SQL = `
|
|
532
|
+
CREATE TABLE IF NOT EXISTS session_owners (
|
|
533
|
+
launch_id TEXT PRIMARY KEY,
|
|
534
|
+
scope TEXT NOT NULL CHECK (scope IN ('task','global')),
|
|
535
|
+
task_id TEXT,
|
|
536
|
+
role_name TEXT NOT NULL,
|
|
537
|
+
agent_id TEXT NOT NULL,
|
|
538
|
+
native_session_id TEXT,
|
|
539
|
+
provider_root_pid INTEGER,
|
|
540
|
+
payload TEXT NOT NULL,
|
|
541
|
+
recorded_at TEXT NOT NULL
|
|
542
|
+
);
|
|
543
|
+
CREATE INDEX IF NOT EXISTS idx_session_owners_task
|
|
544
|
+
ON session_owners(task_id, role_name);
|
|
545
|
+
`;
|
|
546
|
+
/**
|
|
547
|
+
* Migration 8: Resource GC registry (Issue 10).
|
|
548
|
+
*
|
|
549
|
+
* GC-owned table for resource lifecycle records. The registry is GC's own
|
|
550
|
+
* state — it is not part of the aggregate and never participates in aggregate
|
|
551
|
+
* versioning. Records are stored as full versioned JSON in `payload`, with
|
|
552
|
+
* typed columns for the fields GC queries (disposition, kind, task_id).
|
|
553
|
+
*/
|
|
554
|
+
const MIGRATION_8_SQL = `
|
|
555
|
+
CREATE TABLE IF NOT EXISTS resource_registry (
|
|
556
|
+
id TEXT PRIMARY KEY,
|
|
557
|
+
kind TEXT NOT NULL,
|
|
558
|
+
path TEXT NOT NULL,
|
|
559
|
+
disposition TEXT NOT NULL,
|
|
560
|
+
task_id TEXT,
|
|
561
|
+
payload TEXT NOT NULL,
|
|
562
|
+
created_at TEXT NOT NULL,
|
|
563
|
+
updated_at TEXT NOT NULL
|
|
564
|
+
);
|
|
565
|
+
CREATE INDEX IF NOT EXISTS idx_resource_registry_disposition
|
|
566
|
+
ON resource_registry(disposition);
|
|
567
|
+
CREATE INDEX IF NOT EXISTS idx_resource_registry_task
|
|
568
|
+
ON resource_registry(task_id);
|
|
569
|
+
`;
|
|
570
|
+
/**
|
|
571
|
+
* Migration 9: GateArtifact storage (Issue 08). Content-addressed gate
|
|
572
|
+
* evidence records with per-step logs stored as BLOBs. The artifact key is
|
|
573
|
+
* the SHA-256 of the identity tuple (Project + commit + plan digest +
|
|
574
|
+
* toolchain digest + L2 boundary), so the same tuple always maps to one row.
|
|
575
|
+
* Typed columns support the reuse lookup paths (exact-commit L2 search,
|
|
576
|
+
* Project-level prune) without scanning payloads.
|
|
577
|
+
*/
|
|
578
|
+
const MIGRATION_9_SQL = `
|
|
579
|
+
CREATE TABLE IF NOT EXISTS gate_artifacts (
|
|
580
|
+
key TEXT PRIMARY KEY,
|
|
581
|
+
project_id TEXT NOT NULL,
|
|
582
|
+
level TEXT NOT NULL CHECK (level IN ('L1','L2')),
|
|
583
|
+
commit_sha TEXT NOT NULL,
|
|
584
|
+
plan_digest TEXT NOT NULL,
|
|
585
|
+
toolchain_digest TEXT NOT NULL,
|
|
586
|
+
target_ref TEXT,
|
|
587
|
+
status TEXT NOT NULL CHECK (status IN ('incomplete','complete')),
|
|
588
|
+
outcome TEXT NOT NULL CHECK (outcome IN ('unknown','succeeded','failed')),
|
|
589
|
+
payload TEXT NOT NULL,
|
|
590
|
+
created_at TEXT NOT NULL,
|
|
591
|
+
completed_at TEXT,
|
|
592
|
+
last_used_at TEXT NOT NULL
|
|
593
|
+
);
|
|
594
|
+
|
|
595
|
+
CREATE INDEX IF NOT EXISTS idx_gate_artifacts_project_commit
|
|
596
|
+
ON gate_artifacts(project_id, commit_sha);
|
|
597
|
+
|
|
598
|
+
CREATE INDEX IF NOT EXISTS idx_gate_artifacts_project_last_used
|
|
599
|
+
ON gate_artifacts(project_id, last_used_at);
|
|
600
|
+
|
|
601
|
+
CREATE TABLE IF NOT EXISTS gate_artifact_logs (
|
|
602
|
+
artifact_key TEXT NOT NULL,
|
|
603
|
+
step_name TEXT NOT NULL,
|
|
604
|
+
log_content BLOB NOT NULL,
|
|
605
|
+
log_digest TEXT NOT NULL,
|
|
606
|
+
log_bytes INTEGER NOT NULL,
|
|
607
|
+
PRIMARY KEY (artifact_key, step_name),
|
|
608
|
+
FOREIGN KEY (artifact_key) REFERENCES gate_artifacts(key) ON DELETE CASCADE
|
|
609
|
+
);
|
|
610
|
+
`;
|
|
368
611
|
const MIGRATIONS = [
|
|
369
|
-
{ version: 1, axis: "layout", sql: MIGRATION_1_SQL }
|
|
612
|
+
{ version: 1, axis: "layout", sql: MIGRATION_1_SQL },
|
|
613
|
+
{ version: 2, axis: "record", recordKind: "durableJob+capability-grant+release-workflow", sql: MIGRATION_2_SQL },
|
|
614
|
+
{ version: 3, axis: "record", recordKind: "jobCallerKeyHash", sql: MIGRATION_3_SQL },
|
|
615
|
+
{ version: 4, axis: "record", recordKind: "durableJob", sql: MIGRATION_4_SQL },
|
|
616
|
+
{ version: 5, axis: "record", recordKind: "telemetryAggregate", sql: MIGRATION_5_SQL },
|
|
617
|
+
{ version: 6, axis: "record", recordKind: "reviewFinding", sql: MIGRATION_6_SQL },
|
|
618
|
+
{ version: 7, axis: "record", recordKind: "sessionOwner", sql: MIGRATION_7_SQL },
|
|
619
|
+
{ version: 8, axis: "record", recordKind: "resource-registry", sql: MIGRATION_8_SQL },
|
|
620
|
+
{ version: 9, axis: "record", recordKind: "gateArtifact", sql: MIGRATION_9_SQL }
|
|
370
621
|
];
|
|
371
622
|
function checksum(sql) {
|
|
372
623
|
return createHash("sha256").update(sql).digest("hex");
|
|
@@ -421,6 +672,8 @@ export const SQLITE_SCHEMA_TABLES = [
|
|
|
421
672
|
"id_sequences",
|
|
422
673
|
"coordination_locks",
|
|
423
674
|
"integration_queue",
|
|
675
|
+
"durable_jobs",
|
|
676
|
+
"job_caller_key_hashes",
|
|
424
677
|
"outbox",
|
|
425
678
|
"mailboxes",
|
|
426
679
|
"mailbox_signals",
|
|
@@ -432,6 +685,7 @@ export const SQLITE_SCHEMA_TABLES = [
|
|
|
432
685
|
"agent_runs",
|
|
433
686
|
"active_runs",
|
|
434
687
|
"review_rounds",
|
|
688
|
+
"review_findings",
|
|
435
689
|
"change_sets",
|
|
436
690
|
"integration_attempts",
|
|
437
691
|
"messages",
|
|
@@ -440,5 +694,12 @@ export const SQLITE_SCHEMA_TABLES = [
|
|
|
440
694
|
"milestones",
|
|
441
695
|
"events",
|
|
442
696
|
"task_projections",
|
|
443
|
-
"telemetry"
|
|
697
|
+
"telemetry",
|
|
698
|
+
"telemetry_aggregate",
|
|
699
|
+
"capability_grants",
|
|
700
|
+
"release_workflows",
|
|
701
|
+
"session_owners",
|
|
702
|
+
"resource_registry",
|
|
703
|
+
"gate_artifacts",
|
|
704
|
+
"gate_artifact_logs"
|
|
444
705
|
];
|