@haaaiawd/second-nature 0.2.2 → 0.2.4
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/openclaw.plugin.json +1 -1
- package/package.json +1 -1
- package/runtime/cli/ops/heartbeat-surface.d.ts +20 -0
- package/runtime/cli/ops/heartbeat-surface.js +72 -1
- package/runtime/cli/ops/ops-router.js +115 -31
- package/runtime/connectors/base/contract.d.ts +10 -0
- package/runtime/connectors/base/policy-bound-write-dispatch.d.ts +29 -0
- package/runtime/connectors/base/policy-bound-write-dispatch.js +127 -0
- package/runtime/core/second-nature/control-plane/heartbeat-orchestrator.js +336 -25
- package/runtime/core/second-nature/control-plane/real-runtime-spine.d.ts +33 -0
- package/runtime/core/second-nature/control-plane/real-runtime-spine.js +41 -0
- package/runtime/core/second-nature/guidance/impulse-context-reader.d.ts +44 -0
- package/runtime/core/second-nature/guidance/impulse-context-reader.js +84 -0
- package/runtime/core/second-nature/guidance/impulse-context-writer.d.ts +39 -0
- package/runtime/core/second-nature/guidance/impulse-context-writer.js +70 -0
- package/runtime/core/second-nature/perception/judgment-engine.d.ts +2 -0
- package/runtime/core/second-nature/perception/judgment-engine.js +11 -1
- package/runtime/core/second-nature/perception/perception-builder.d.ts +6 -2
- package/runtime/core/second-nature/perception/perception-builder.js +18 -7
- package/runtime/core/second-nature/quiet-dream/daily-rhythm-scheduler.d.ts +43 -0
- package/runtime/core/second-nature/quiet-dream/daily-rhythm-scheduler.js +157 -0
- package/runtime/core/second-nature/quiet-dream/memory-projection-lifecycle.js +17 -16
- package/runtime/core/second-nature/quiet-dream/quiet-daily-review-builder.d.ts +3 -0
- package/runtime/core/second-nature/quiet-dream/quiet-daily-review-builder.js +4 -0
- package/runtime/observability/living-loop-health-gate.d.ts +45 -0
- package/runtime/observability/living-loop-health-gate.js +94 -0
- package/runtime/observability/loop-status.d.ts +11 -0
- package/runtime/observability/loop-status.js +49 -3
- package/runtime/observability/services/heartbeat-digest-assembler.d.ts +12 -0
- package/runtime/observability/services/heartbeat-digest-assembler.js +9 -0
- package/runtime/shared/types/v8-contracts.d.ts +2 -2
- package/runtime/storage/db/index.js +34 -0
- package/runtime/storage/db/migrations/index.js +4 -0
- package/runtime/storage/db/migrations/v8-001-living-perception-loop.js +119 -119
- package/runtime/storage/db/migrations/v8-002-perception-contract-alignment.d.ts +12 -0
- package/runtime/storage/db/migrations/v8-002-perception-contract-alignment.js +14 -0
- package/runtime/storage/db/migrations/v8-003-quiet-closure-refs.d.ts +10 -0
- package/runtime/storage/db/migrations/v8-003-quiet-closure-refs.js +12 -0
- package/runtime/storage/db/schema/v8-entities.d.ts +586 -0
- package/runtime/storage/db/schema/v8-entities.js +39 -0
- package/runtime/storage/v8-state-stores.d.ts +32 -2
- package/runtime/storage/v8-state-stores.js +121 -2
|
@@ -20,6 +20,16 @@
|
|
|
20
20
|
*/
|
|
21
21
|
import type { StateDatabase } from "../storage/db/index.js";
|
|
22
22
|
import type { DegradedOperationResult } from "../shared/types/v8-contracts.js";
|
|
23
|
+
export interface RealRunHealthProjection {
|
|
24
|
+
gatePassed: boolean;
|
|
25
|
+
contractSmokeOnly: boolean;
|
|
26
|
+
seededStateDetected: boolean;
|
|
27
|
+
hasRealClosure: boolean;
|
|
28
|
+
hasQuietArtifact: boolean;
|
|
29
|
+
hasDreamArtifact: boolean;
|
|
30
|
+
missingStage?: string;
|
|
31
|
+
missingReason?: string;
|
|
32
|
+
}
|
|
23
33
|
export interface LoopStatusReadModel {
|
|
24
34
|
ok: true;
|
|
25
35
|
overallStatus: string;
|
|
@@ -29,6 +39,7 @@ export interface LoopStatusReadModel {
|
|
|
29
39
|
stageSummaries: StageSummary[];
|
|
30
40
|
policyDeniedCount: number;
|
|
31
41
|
nextAction: string;
|
|
42
|
+
realRunHealth: RealRunHealthProjection;
|
|
32
43
|
}
|
|
33
44
|
export interface StageSummary {
|
|
34
45
|
stage: string;
|
|
@@ -19,10 +19,15 @@
|
|
|
19
19
|
* Test coverage: tests/unit/observability/loop-status.test.ts
|
|
20
20
|
*/
|
|
21
21
|
import { assembleLoopStatus } from "./causal-loop-health.js";
|
|
22
|
+
import { checkRealRunHealth } from "./living-loop-health-gate.js";
|
|
22
23
|
// ───────────────────────────────────────────────────────────────
|
|
23
24
|
// Helpers
|
|
24
25
|
// ───────────────────────────────────────────────────────────────
|
|
25
|
-
function computeNextAction(overallStatus, stalledAt) {
|
|
26
|
+
function computeNextAction(overallStatus, stalledAt, realRunMissingStage, realRunMissingReason) {
|
|
27
|
+
// Real-run health takes precedence over generic causal health
|
|
28
|
+
if (realRunMissingStage && realRunMissingStage !== "none") {
|
|
29
|
+
return `Real-run health degraded: ${realRunMissingReason ?? `missing stage: ${realRunMissingStage}`}. Run a real heartbeat cycle or verify daily rhythm state.`;
|
|
30
|
+
}
|
|
26
31
|
if (overallStatus === "healthy") {
|
|
27
32
|
return "No operator action required. Loop is progressing normally.";
|
|
28
33
|
}
|
|
@@ -60,6 +65,46 @@ export async function readLoopStatus(db) {
|
|
|
60
65
|
};
|
|
61
66
|
}
|
|
62
67
|
const snapshot = health;
|
|
68
|
+
// T-OBS.R.3: Consume real-run health gate
|
|
69
|
+
const realRunResult = await checkRealRunHealth(db);
|
|
70
|
+
let realRunHealth;
|
|
71
|
+
if (realRunResult.ok) {
|
|
72
|
+
realRunHealth = {
|
|
73
|
+
gatePassed: realRunResult.gate.gatePassed,
|
|
74
|
+
contractSmokeOnly: realRunResult.gate.contractSmokeOnly,
|
|
75
|
+
seededStateDetected: realRunResult.gate.seededStateDetected,
|
|
76
|
+
hasRealClosure: realRunResult.gate.hasRealClosure,
|
|
77
|
+
hasQuietArtifact: realRunResult.gate.hasQuietArtifact,
|
|
78
|
+
hasDreamArtifact: realRunResult.gate.hasDreamArtifact,
|
|
79
|
+
missingStage: realRunResult.gate.missingStage,
|
|
80
|
+
missingReason: realRunResult.gate.missingReason,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
realRunHealth = {
|
|
85
|
+
gatePassed: false,
|
|
86
|
+
contractSmokeOnly: false,
|
|
87
|
+
seededStateDetected: false,
|
|
88
|
+
hasRealClosure: false,
|
|
89
|
+
hasQuietArtifact: false,
|
|
90
|
+
hasDreamArtifact: false,
|
|
91
|
+
missingReason: "Real-run health check degraded",
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
// Override overallStatus based on real-run health parity
|
|
95
|
+
let overallStatus = snapshot.overallStatus;
|
|
96
|
+
let stalledAt = snapshot.stalledAt;
|
|
97
|
+
if (!realRunHealth.gatePassed) {
|
|
98
|
+
// Real-run gate fails → cannot report healthy
|
|
99
|
+
if (overallStatus === "healthy") {
|
|
100
|
+
overallStatus = "degraded";
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
// Real-run gate passes → all stages have evidence, ignore staged-event-only stall
|
|
105
|
+
overallStatus = "healthy";
|
|
106
|
+
stalledAt = undefined;
|
|
107
|
+
}
|
|
63
108
|
const stageSummaries = snapshot.stages.map((s) => ({
|
|
64
109
|
stage: s.stage,
|
|
65
110
|
eventCount: s.eventCount,
|
|
@@ -68,18 +113,19 @@ export async function readLoopStatus(db) {
|
|
|
68
113
|
}));
|
|
69
114
|
// Policy denied count is a placeholder; real implementation would query action closures
|
|
70
115
|
const policyDeniedCount = 0;
|
|
71
|
-
const nextAction = computeNextAction(
|
|
116
|
+
const nextAction = computeNextAction(overallStatus, snapshot.stalledAt, realRunHealth.missingStage, realRunHealth.missingReason);
|
|
72
117
|
return {
|
|
73
118
|
ok: true,
|
|
74
119
|
status: {
|
|
75
120
|
ok: true,
|
|
76
|
-
overallStatus
|
|
121
|
+
overallStatus,
|
|
77
122
|
stalledAt: snapshot.stalledAt,
|
|
78
123
|
lastCycleSequence: snapshot.lastCycleSequence,
|
|
79
124
|
lastHeartbeatAt: snapshot.lastHeartbeatAt,
|
|
80
125
|
stageSummaries,
|
|
81
126
|
policyDeniedCount,
|
|
82
127
|
nextAction,
|
|
128
|
+
realRunHealth,
|
|
83
129
|
},
|
|
84
130
|
};
|
|
85
131
|
}
|
|
@@ -68,6 +68,16 @@ export interface DeliveryProofRef {
|
|
|
68
68
|
channelId: string;
|
|
69
69
|
messageHash: string;
|
|
70
70
|
}
|
|
71
|
+
export interface RealRunHealthDigestProjection {
|
|
72
|
+
gatePassed: boolean;
|
|
73
|
+
contractSmokeOnly: boolean;
|
|
74
|
+
seededStateDetected: boolean;
|
|
75
|
+
hasRealClosure: boolean;
|
|
76
|
+
hasQuietArtifact: boolean;
|
|
77
|
+
hasDreamArtifact: boolean;
|
|
78
|
+
missingStage?: string;
|
|
79
|
+
missingReason?: string;
|
|
80
|
+
}
|
|
71
81
|
export interface HeartbeatDigest {
|
|
72
82
|
date: string;
|
|
73
83
|
generatedAt: string;
|
|
@@ -76,6 +86,8 @@ export interface HeartbeatDigest {
|
|
|
76
86
|
goalSummary: GoalDaySummary;
|
|
77
87
|
quietDreamSummary: QuietDreamDaySummary;
|
|
78
88
|
healthSummary: HealthDaySummary;
|
|
89
|
+
/** Real-run health gate result (T-OBS.R.3) */
|
|
90
|
+
realRunHealth: RealRunHealthDigestProjection;
|
|
79
91
|
/** Set when delivery succeeded */
|
|
80
92
|
deliveredAt?: string;
|
|
81
93
|
/** Proof of successful delivery (channel + message hash, no raw content) */
|
|
@@ -227,6 +227,15 @@ export async function generateHeartbeatDigest(date, deps) {
|
|
|
227
227
|
goalSummary,
|
|
228
228
|
quietDreamSummary,
|
|
229
229
|
healthSummary,
|
|
230
|
+
realRunHealth: {
|
|
231
|
+
gatePassed: false,
|
|
232
|
+
contractSmokeOnly: true,
|
|
233
|
+
seededStateDetected: false,
|
|
234
|
+
hasRealClosure: false,
|
|
235
|
+
hasQuietArtifact: false,
|
|
236
|
+
hasDreamArtifact: false,
|
|
237
|
+
missingReason: "Real-run health not evaluated — call checkRealRunHealth before digest generation",
|
|
238
|
+
},
|
|
230
239
|
};
|
|
231
240
|
// T-OBS.C.4: delivery hook — attempt delivery if adapter is provided
|
|
232
241
|
if (deliveryAdapter) {
|
|
@@ -25,7 +25,7 @@ export interface ActionKindMetadata {
|
|
|
25
25
|
allowedDowngrades: PlatformNeutralActionKind[];
|
|
26
26
|
}
|
|
27
27
|
export type ConnectorCapabilitySideEffect = "external_read" | "external_write" | "local_state" | "unknown";
|
|
28
|
-
export type SourceRefFamily = "evidence" | "perception" | "judgment" | "action_closure" | "quiet_review" | "dream_run" | "memory_projection" | "tool_experience" | "connector_result" | "audit";
|
|
28
|
+
export type SourceRefFamily = "evidence" | "perception" | "judgment" | "action_closure" | "quiet_review" | "dream_run" | "memory_projection" | "projection" | "tool_experience" | "connector_result" | "audit";
|
|
29
29
|
export type RedactionClass = "none" | "redacted" | "blocked";
|
|
30
30
|
export type SensitivityClass = "public_technical" | "public_general" | "private_context" | "sensitive";
|
|
31
31
|
export type SourceResolveStatus = "resolvable" | "missing" | "redacted" | "permission_denied";
|
|
@@ -82,5 +82,5 @@ export interface DegradedOperationResult {
|
|
|
82
82
|
operatorNextAction: string;
|
|
83
83
|
retryable: boolean;
|
|
84
84
|
}
|
|
85
|
-
export type V8ReasonCode = "quiet_completed" | "quiet_empty_input" | "quiet_state_unreadable" | "quiet_validation_failed" | "dream_scheduled" | "dream_scheduler_unavailable" | "dream_started" | "dream_completed" | "dream_failed" | "dream_blocked_redaction" | "projection_candidate_created" | "projection_accepted" | "projection_rejected" | "projection_superseded" | "proposal_created" | "proposal_no_action" | "proposal_missing_source_refs" | "proposal_risk_blocked" | "policy_allowed" | "policy_deferred_owner_confirmation" | "policy_downgraded_to_draft" | "policy_denied_missing_permission" | "policy_denied_high_risk" | "policy_denied_breaker_open" | "guidance_unavailable" | "closure_completed" | "closure_no_action" | "closure_denied" | "closure_deferred" | "closure_downgraded" | "closure_downgraded_without_draft" | "closure_failed" | "perception_rules_only" | "evidence_batch_empty" | "evidence_batch_truncated" | "judgment_low_confidence" | "judgment_missing_source_refs" | "source_refs_unresolved" | "state_unreadable" | "stage_event_missing" | "ingestion_no_data" | "ingestion_empty" | "ingestion_state_unreadable" | "ingestion_connector_failed" | "execution_completed" | "execution_failed" | "execution_timeout" | "execution_unavailable";
|
|
85
|
+
export type V8ReasonCode = "quiet_completed" | "quiet_empty_input" | "quiet_state_unreadable" | "quiet_validation_failed" | "dream_scheduled" | "dream_scheduler_unavailable" | "dream_started" | "dream_completed" | "dream_failed" | "dream_blocked_redaction" | "projection_candidate_created" | "projection_accepted" | "projection_rejected" | "projection_superseded" | "projection_topic_matched" | "proposal_created" | "proposal_no_action" | "proposal_missing_source_refs" | "proposal_risk_blocked" | "policy_allowed" | "policy_deferred_owner_confirmation" | "policy_downgraded_to_draft" | "policy_denied_missing_permission" | "policy_denied_high_risk" | "policy_denied_breaker_open" | "guidance_unavailable" | "closure_completed" | "closure_no_action" | "closure_denied" | "closure_deferred" | "closure_downgraded" | "closure_downgraded_without_draft" | "closure_failed" | "perception_rules_only" | "evidence_batch_empty" | "evidence_batch_truncated" | "judgment_low_confidence" | "judgment_missing_source_refs" | "source_refs_unresolved" | "state_unreadable" | "stage_event_missing" | "ingestion_no_data" | "ingestion_empty" | "ingestion_state_unreadable" | "ingestion_connector_failed" | "execution_completed" | "execution_failed" | "execution_timeout" | "execution_unavailable";
|
|
86
86
|
export declare const ACTION_KIND_REGISTRY: Readonly<Record<PlatformNeutralActionKind, ActionKindMetadata>>;
|
|
@@ -197,6 +197,7 @@ const STATE_SCHEMA_SQL = `
|
|
|
197
197
|
entities_json TEXT,
|
|
198
198
|
novelty TEXT,
|
|
199
199
|
relevance REAL,
|
|
200
|
+
relevance_class TEXT,
|
|
200
201
|
summary TEXT,
|
|
201
202
|
risk_flags_json TEXT,
|
|
202
203
|
confidence REAL,
|
|
@@ -241,6 +242,7 @@ const STATE_SCHEMA_SQL = `
|
|
|
241
242
|
closure_count INTEGER NOT NULL DEFAULT 0,
|
|
242
243
|
memory_candidate_count INTEGER NOT NULL DEFAULT 0,
|
|
243
244
|
source_refs_json TEXT NOT NULL,
|
|
245
|
+
closure_refs_json TEXT,
|
|
244
246
|
redaction_class TEXT NOT NULL DEFAULT 'none',
|
|
245
247
|
payload_json TEXT,
|
|
246
248
|
lifecycle_status TEXT NOT NULL DEFAULT 'pending'
|
|
@@ -295,6 +297,38 @@ const STATE_SCHEMA_SQL = `
|
|
|
295
297
|
payload_json TEXT,
|
|
296
298
|
lifecycle_status TEXT NOT NULL DEFAULT 'started'
|
|
297
299
|
);
|
|
300
|
+
CREATE TABLE IF NOT EXISTS impulse_context_artifact (
|
|
301
|
+
id TEXT PRIMARY KEY,
|
|
302
|
+
created_at TEXT NOT NULL,
|
|
303
|
+
updated_at TEXT NOT NULL,
|
|
304
|
+
scene_type TEXT NOT NULL,
|
|
305
|
+
capability_intent TEXT,
|
|
306
|
+
platform_id TEXT,
|
|
307
|
+
capability_class TEXT,
|
|
308
|
+
impulse_source TEXT NOT NULL,
|
|
309
|
+
impulse_text TEXT,
|
|
310
|
+
atmosphere_text TEXT,
|
|
311
|
+
expression_boundary_constraints_json TEXT,
|
|
312
|
+
expression_boundary_style TEXT,
|
|
313
|
+
freshness_version INTEGER NOT NULL DEFAULT 1,
|
|
314
|
+
source_refs_json TEXT NOT NULL,
|
|
315
|
+
redaction_class TEXT NOT NULL DEFAULT 'none',
|
|
316
|
+
payload_json TEXT,
|
|
317
|
+
lifecycle_status TEXT NOT NULL DEFAULT 'active'
|
|
318
|
+
);
|
|
319
|
+
CREATE TABLE IF NOT EXISTS daily_rhythm_state (
|
|
320
|
+
id TEXT PRIMARY KEY,
|
|
321
|
+
day TEXT NOT NULL,
|
|
322
|
+
quiet_status TEXT NOT NULL DEFAULT 'not_due',
|
|
323
|
+
dream_status TEXT NOT NULL DEFAULT 'not_due',
|
|
324
|
+
quiet_reason TEXT,
|
|
325
|
+
dream_reason TEXT,
|
|
326
|
+
quiet_completed_at TEXT,
|
|
327
|
+
dream_completed_at TEXT,
|
|
328
|
+
source_refs_json TEXT NOT NULL,
|
|
329
|
+
payload_json TEXT,
|
|
330
|
+
updated_at TEXT NOT NULL
|
|
331
|
+
);
|
|
298
332
|
`;
|
|
299
333
|
function resolveDbPath(filename) {
|
|
300
334
|
if (path.isAbsolute(filename) || filename === ":memory:") {
|
|
@@ -6,10 +6,14 @@ import { V7_002_EFFECT_COMMIT_LEDGER } from "./v7-002-effect-commit-ledger.js";
|
|
|
6
6
|
import { V7_003_CIRCUIT_BREAKER } from "./v7-003-circuit-breaker.js";
|
|
7
7
|
import { V7_004_BEHAVIOR_PROMOTION } from "./v7-004-behavior-promotion.js";
|
|
8
8
|
import { V8_001_LIVING_PERCEPTION_LOOP } from "./v8-001-living-perception-loop.js";
|
|
9
|
+
import { V8_002_PERCEPTION_CONTRACT_ALIGNMENT } from "./v8-002-perception-contract-alignment.js";
|
|
10
|
+
import { V8_003_QUIET_CLOSURE_REFS } from "./v8-003-quiet-closure-refs.js";
|
|
9
11
|
export const ALL_MIGRATIONS = [
|
|
10
12
|
V7_001_FOUNDATION,
|
|
11
13
|
V7_002_EFFECT_COMMIT_LEDGER,
|
|
12
14
|
V7_003_CIRCUIT_BREAKER,
|
|
13
15
|
V7_004_BEHAVIOR_PROMOTION,
|
|
14
16
|
V8_001_LIVING_PERCEPTION_LOOP,
|
|
17
|
+
V8_002_PERCEPTION_CONTRACT_ALIGNMENT,
|
|
18
|
+
V8_003_QUIET_CLOSURE_REFS,
|
|
15
19
|
];
|
|
@@ -6,124 +6,124 @@
|
|
|
6
6
|
export const V8_001_LIVING_PERCEPTION_LOOP = {
|
|
7
7
|
version: 5,
|
|
8
8
|
label: "v8-living-perception-loop",
|
|
9
|
-
sql: `
|
|
10
|
-
CREATE TABLE IF NOT EXISTS evidence_item (
|
|
11
|
-
id TEXT PRIMARY KEY,
|
|
12
|
-
created_at TEXT NOT NULL,
|
|
13
|
-
platform_id TEXT NOT NULL,
|
|
14
|
-
content_hash TEXT NOT NULL,
|
|
15
|
-
observed_at TEXT NOT NULL,
|
|
16
|
-
sensitivity_hint TEXT,
|
|
17
|
-
source_refs_json TEXT NOT NULL,
|
|
18
|
-
redaction_class TEXT NOT NULL DEFAULT 'none',
|
|
19
|
-
payload_json TEXT,
|
|
20
|
-
lifecycle_status TEXT NOT NULL DEFAULT 'pending'
|
|
21
|
-
);
|
|
22
|
-
CREATE TABLE IF NOT EXISTS perception_card (
|
|
23
|
-
id TEXT PRIMARY KEY,
|
|
24
|
-
created_at TEXT NOT NULL,
|
|
25
|
-
cycle_id TEXT NOT NULL,
|
|
26
|
-
topic TEXT,
|
|
27
|
-
entities_json TEXT,
|
|
28
|
-
novelty TEXT,
|
|
29
|
-
relevance REAL,
|
|
30
|
-
summary TEXT,
|
|
31
|
-
risk_flags_json TEXT,
|
|
32
|
-
confidence REAL,
|
|
33
|
-
review_priority TEXT,
|
|
34
|
-
source_refs_json TEXT NOT NULL,
|
|
35
|
-
redaction_class TEXT NOT NULL DEFAULT 'none',
|
|
36
|
-
payload_json TEXT,
|
|
37
|
-
lifecycle_status TEXT NOT NULL DEFAULT 'pending'
|
|
38
|
-
);
|
|
39
|
-
CREATE TABLE IF NOT EXISTS judgment_verdict (
|
|
40
|
-
id TEXT PRIMARY KEY,
|
|
41
|
-
created_at TEXT NOT NULL,
|
|
42
|
-
cycle_id TEXT NOT NULL,
|
|
43
|
-
perception_card_id TEXT NOT NULL,
|
|
44
|
-
action_kind TEXT NOT NULL,
|
|
45
|
-
confidence REAL,
|
|
46
|
-
reason TEXT,
|
|
47
|
-
risk_posture TEXT,
|
|
48
|
-
source_refs_json TEXT NOT NULL,
|
|
49
|
-
redaction_class TEXT NOT NULL DEFAULT 'none',
|
|
50
|
-
payload_json TEXT,
|
|
51
|
-
lifecycle_status TEXT NOT NULL DEFAULT 'pending'
|
|
52
|
-
);
|
|
53
|
-
CREATE TABLE IF NOT EXISTS action_closure_record (
|
|
54
|
-
id TEXT PRIMARY KEY,
|
|
55
|
-
created_at TEXT NOT NULL,
|
|
56
|
-
cycle_id TEXT NOT NULL,
|
|
57
|
-
proposal_id TEXT,
|
|
58
|
-
decision_id TEXT,
|
|
59
|
-
status TEXT NOT NULL,
|
|
60
|
-
reason TEXT,
|
|
61
|
-
next_state TEXT,
|
|
62
|
-
source_refs_json TEXT NOT NULL,
|
|
63
|
-
redaction_class TEXT NOT NULL DEFAULT 'none',
|
|
64
|
-
payload_json TEXT,
|
|
65
|
-
lifecycle_status TEXT NOT NULL DEFAULT 'closed'
|
|
66
|
-
);
|
|
67
|
-
CREATE TABLE IF NOT EXISTS quiet_daily_review (
|
|
68
|
-
id TEXT PRIMARY KEY,
|
|
69
|
-
created_at TEXT NOT NULL,
|
|
70
|
-
day TEXT NOT NULL,
|
|
71
|
-
closure_count INTEGER NOT NULL DEFAULT 0,
|
|
72
|
-
memory_candidate_count INTEGER NOT NULL DEFAULT 0,
|
|
73
|
-
source_refs_json TEXT NOT NULL,
|
|
74
|
-
redaction_class TEXT NOT NULL DEFAULT 'none',
|
|
75
|
-
payload_json TEXT,
|
|
76
|
-
lifecycle_status TEXT NOT NULL DEFAULT 'pending'
|
|
77
|
-
);
|
|
78
|
-
CREATE TABLE IF NOT EXISTS dream_consolidation_run (
|
|
79
|
-
id TEXT PRIMARY KEY,
|
|
80
|
-
created_at TEXT NOT NULL,
|
|
81
|
-
quiet_review_id TEXT NOT NULL,
|
|
82
|
-
status TEXT NOT NULL,
|
|
83
|
-
reason TEXT,
|
|
84
|
-
source_refs_json TEXT NOT NULL,
|
|
85
|
-
redaction_class TEXT NOT NULL DEFAULT 'none',
|
|
86
|
-
payload_json TEXT,
|
|
87
|
-
lifecycle_status TEXT NOT NULL DEFAULT 'pending'
|
|
88
|
-
);
|
|
89
|
-
CREATE TABLE IF NOT EXISTS long_term_memory_projection (
|
|
90
|
-
id TEXT PRIMARY KEY,
|
|
91
|
-
created_at TEXT NOT NULL,
|
|
92
|
-
candidate_id TEXT NOT NULL,
|
|
93
|
-
topic_key TEXT NOT NULL,
|
|
94
|
-
status TEXT NOT NULL DEFAULT 'candidate',
|
|
95
|
-
source_refs_json TEXT NOT NULL,
|
|
96
|
-
redaction_class TEXT NOT NULL DEFAULT 'none',
|
|
97
|
-
payload_json TEXT,
|
|
98
|
-
lifecycle_status TEXT NOT NULL DEFAULT 'candidate'
|
|
99
|
-
);
|
|
100
|
-
CREATE TABLE IF NOT EXISTS heartbeat_cycle_trace (
|
|
101
|
-
id TEXT PRIMARY KEY,
|
|
102
|
-
cycle_sequence INTEGER NOT NULL,
|
|
103
|
-
heartbeat_started_at TEXT NOT NULL,
|
|
104
|
-
heartbeat_completed_at TEXT,
|
|
105
|
-
input_count INTEGER NOT NULL DEFAULT 0,
|
|
106
|
-
output_count INTEGER NOT NULL DEFAULT 0,
|
|
107
|
-
expected_downstream_by_cycle INTEGER,
|
|
108
|
-
status TEXT NOT NULL,
|
|
109
|
-
source_refs_json TEXT,
|
|
110
|
-
redaction_class TEXT NOT NULL DEFAULT 'none',
|
|
111
|
-
payload_json TEXT,
|
|
112
|
-
lifecycle_status TEXT NOT NULL DEFAULT 'started'
|
|
113
|
-
);
|
|
114
|
-
CREATE TABLE IF NOT EXISTS loop_stage_event (
|
|
115
|
-
id TEXT PRIMARY KEY,
|
|
116
|
-
cycle_id TEXT NOT NULL,
|
|
117
|
-
cycle_sequence INTEGER NOT NULL,
|
|
118
|
-
stage TEXT NOT NULL,
|
|
119
|
-
status TEXT NOT NULL,
|
|
120
|
-
reason TEXT,
|
|
121
|
-
source_refs_json TEXT NOT NULL,
|
|
122
|
-
redaction_class TEXT NOT NULL DEFAULT 'none',
|
|
123
|
-
occurred_at TEXT NOT NULL,
|
|
124
|
-
expected_downstream_by_cycle INTEGER,
|
|
125
|
-
payload_json TEXT,
|
|
126
|
-
lifecycle_status TEXT NOT NULL DEFAULT 'started'
|
|
127
|
-
);
|
|
9
|
+
sql: `
|
|
10
|
+
CREATE TABLE IF NOT EXISTS evidence_item (
|
|
11
|
+
id TEXT PRIMARY KEY,
|
|
12
|
+
created_at TEXT NOT NULL,
|
|
13
|
+
platform_id TEXT NOT NULL,
|
|
14
|
+
content_hash TEXT NOT NULL,
|
|
15
|
+
observed_at TEXT NOT NULL,
|
|
16
|
+
sensitivity_hint TEXT,
|
|
17
|
+
source_refs_json TEXT NOT NULL,
|
|
18
|
+
redaction_class TEXT NOT NULL DEFAULT 'none',
|
|
19
|
+
payload_json TEXT,
|
|
20
|
+
lifecycle_status TEXT NOT NULL DEFAULT 'pending'
|
|
21
|
+
);
|
|
22
|
+
CREATE TABLE IF NOT EXISTS perception_card (
|
|
23
|
+
id TEXT PRIMARY KEY,
|
|
24
|
+
created_at TEXT NOT NULL,
|
|
25
|
+
cycle_id TEXT NOT NULL,
|
|
26
|
+
topic TEXT,
|
|
27
|
+
entities_json TEXT,
|
|
28
|
+
novelty TEXT,
|
|
29
|
+
relevance REAL,
|
|
30
|
+
summary TEXT,
|
|
31
|
+
risk_flags_json TEXT,
|
|
32
|
+
confidence REAL,
|
|
33
|
+
review_priority TEXT,
|
|
34
|
+
source_refs_json TEXT NOT NULL,
|
|
35
|
+
redaction_class TEXT NOT NULL DEFAULT 'none',
|
|
36
|
+
payload_json TEXT,
|
|
37
|
+
lifecycle_status TEXT NOT NULL DEFAULT 'pending'
|
|
38
|
+
);
|
|
39
|
+
CREATE TABLE IF NOT EXISTS judgment_verdict (
|
|
40
|
+
id TEXT PRIMARY KEY,
|
|
41
|
+
created_at TEXT NOT NULL,
|
|
42
|
+
cycle_id TEXT NOT NULL,
|
|
43
|
+
perception_card_id TEXT NOT NULL,
|
|
44
|
+
action_kind TEXT NOT NULL,
|
|
45
|
+
confidence REAL,
|
|
46
|
+
reason TEXT,
|
|
47
|
+
risk_posture TEXT,
|
|
48
|
+
source_refs_json TEXT NOT NULL,
|
|
49
|
+
redaction_class TEXT NOT NULL DEFAULT 'none',
|
|
50
|
+
payload_json TEXT,
|
|
51
|
+
lifecycle_status TEXT NOT NULL DEFAULT 'pending'
|
|
52
|
+
);
|
|
53
|
+
CREATE TABLE IF NOT EXISTS action_closure_record (
|
|
54
|
+
id TEXT PRIMARY KEY,
|
|
55
|
+
created_at TEXT NOT NULL,
|
|
56
|
+
cycle_id TEXT NOT NULL,
|
|
57
|
+
proposal_id TEXT,
|
|
58
|
+
decision_id TEXT,
|
|
59
|
+
status TEXT NOT NULL,
|
|
60
|
+
reason TEXT,
|
|
61
|
+
next_state TEXT,
|
|
62
|
+
source_refs_json TEXT NOT NULL,
|
|
63
|
+
redaction_class TEXT NOT NULL DEFAULT 'none',
|
|
64
|
+
payload_json TEXT,
|
|
65
|
+
lifecycle_status TEXT NOT NULL DEFAULT 'closed'
|
|
66
|
+
);
|
|
67
|
+
CREATE TABLE IF NOT EXISTS quiet_daily_review (
|
|
68
|
+
id TEXT PRIMARY KEY,
|
|
69
|
+
created_at TEXT NOT NULL,
|
|
70
|
+
day TEXT NOT NULL,
|
|
71
|
+
closure_count INTEGER NOT NULL DEFAULT 0,
|
|
72
|
+
memory_candidate_count INTEGER NOT NULL DEFAULT 0,
|
|
73
|
+
source_refs_json TEXT NOT NULL,
|
|
74
|
+
redaction_class TEXT NOT NULL DEFAULT 'none',
|
|
75
|
+
payload_json TEXT,
|
|
76
|
+
lifecycle_status TEXT NOT NULL DEFAULT 'pending'
|
|
77
|
+
);
|
|
78
|
+
CREATE TABLE IF NOT EXISTS dream_consolidation_run (
|
|
79
|
+
id TEXT PRIMARY KEY,
|
|
80
|
+
created_at TEXT NOT NULL,
|
|
81
|
+
quiet_review_id TEXT NOT NULL,
|
|
82
|
+
status TEXT NOT NULL,
|
|
83
|
+
reason TEXT,
|
|
84
|
+
source_refs_json TEXT NOT NULL,
|
|
85
|
+
redaction_class TEXT NOT NULL DEFAULT 'none',
|
|
86
|
+
payload_json TEXT,
|
|
87
|
+
lifecycle_status TEXT NOT NULL DEFAULT 'pending'
|
|
88
|
+
);
|
|
89
|
+
CREATE TABLE IF NOT EXISTS long_term_memory_projection (
|
|
90
|
+
id TEXT PRIMARY KEY,
|
|
91
|
+
created_at TEXT NOT NULL,
|
|
92
|
+
candidate_id TEXT NOT NULL,
|
|
93
|
+
topic_key TEXT NOT NULL,
|
|
94
|
+
status TEXT NOT NULL DEFAULT 'candidate',
|
|
95
|
+
source_refs_json TEXT NOT NULL,
|
|
96
|
+
redaction_class TEXT NOT NULL DEFAULT 'none',
|
|
97
|
+
payload_json TEXT,
|
|
98
|
+
lifecycle_status TEXT NOT NULL DEFAULT 'candidate'
|
|
99
|
+
);
|
|
100
|
+
CREATE TABLE IF NOT EXISTS heartbeat_cycle_trace (
|
|
101
|
+
id TEXT PRIMARY KEY,
|
|
102
|
+
cycle_sequence INTEGER NOT NULL,
|
|
103
|
+
heartbeat_started_at TEXT NOT NULL,
|
|
104
|
+
heartbeat_completed_at TEXT,
|
|
105
|
+
input_count INTEGER NOT NULL DEFAULT 0,
|
|
106
|
+
output_count INTEGER NOT NULL DEFAULT 0,
|
|
107
|
+
expected_downstream_by_cycle INTEGER,
|
|
108
|
+
status TEXT NOT NULL,
|
|
109
|
+
source_refs_json TEXT,
|
|
110
|
+
redaction_class TEXT NOT NULL DEFAULT 'none',
|
|
111
|
+
payload_json TEXT,
|
|
112
|
+
lifecycle_status TEXT NOT NULL DEFAULT 'started'
|
|
113
|
+
);
|
|
114
|
+
CREATE TABLE IF NOT EXISTS loop_stage_event (
|
|
115
|
+
id TEXT PRIMARY KEY,
|
|
116
|
+
cycle_id TEXT NOT NULL,
|
|
117
|
+
cycle_sequence INTEGER NOT NULL,
|
|
118
|
+
stage TEXT NOT NULL,
|
|
119
|
+
status TEXT NOT NULL,
|
|
120
|
+
reason TEXT,
|
|
121
|
+
source_refs_json TEXT NOT NULL,
|
|
122
|
+
redaction_class TEXT NOT NULL DEFAULT 'none',
|
|
123
|
+
occurred_at TEXT NOT NULL,
|
|
124
|
+
expected_downstream_by_cycle INTEGER,
|
|
125
|
+
payload_json TEXT,
|
|
126
|
+
lifecycle_status TEXT NOT NULL DEFAULT 'started'
|
|
127
|
+
);
|
|
128
128
|
`,
|
|
129
129
|
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v8-002 Perception Contract Alignment — adds relevance_class to perception_card.
|
|
3
|
+
*
|
|
4
|
+
* Resolves T-PJ.R.1: PerceptionCard novelty/relevance contract drift.
|
|
5
|
+
* Adds relevance_class column so canonical shape (noveltyClass + relevanceScore + relevanceClass)
|
|
6
|
+
* can be persisted without overloading the existing relevance REAL field.
|
|
7
|
+
*/
|
|
8
|
+
export declare const V8_002_PERCEPTION_CONTRACT_ALIGNMENT: {
|
|
9
|
+
version: number;
|
|
10
|
+
label: string;
|
|
11
|
+
sql: string;
|
|
12
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v8-002 Perception Contract Alignment — adds relevance_class to perception_card.
|
|
3
|
+
*
|
|
4
|
+
* Resolves T-PJ.R.1: PerceptionCard novelty/relevance contract drift.
|
|
5
|
+
* Adds relevance_class column so canonical shape (noveltyClass + relevanceScore + relevanceClass)
|
|
6
|
+
* can be persisted without overloading the existing relevance REAL field.
|
|
7
|
+
*/
|
|
8
|
+
export const V8_002_PERCEPTION_CONTRACT_ALIGNMENT = {
|
|
9
|
+
version: 6,
|
|
10
|
+
label: "v8-perception-contract-alignment",
|
|
11
|
+
sql: `
|
|
12
|
+
ALTER TABLE perception_card ADD COLUMN relevance_class TEXT;
|
|
13
|
+
`,
|
|
14
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v8-003 Quiet ClosureRefs — adds closure_refs_json to quiet_daily_review.
|
|
3
|
+
*
|
|
4
|
+
* Resolves T-DQ.R.4: QuietDailyReview closureRefs first-class.
|
|
5
|
+
*/
|
|
6
|
+
export declare const V8_003_QUIET_CLOSURE_REFS: {
|
|
7
|
+
version: number;
|
|
8
|
+
label: string;
|
|
9
|
+
sql: string;
|
|
10
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v8-003 Quiet ClosureRefs — adds closure_refs_json to quiet_daily_review.
|
|
3
|
+
*
|
|
4
|
+
* Resolves T-DQ.R.4: QuietDailyReview closureRefs first-class.
|
|
5
|
+
*/
|
|
6
|
+
export const V8_003_QUIET_CLOSURE_REFS = {
|
|
7
|
+
version: 7,
|
|
8
|
+
label: "v8-quiet-closure-refs",
|
|
9
|
+
sql: `
|
|
10
|
+
ALTER TABLE quiet_daily_review ADD COLUMN closure_refs_json TEXT;
|
|
11
|
+
`,
|
|
12
|
+
};
|