ultra-builder-pro-cli 0.25.1 → 0.26.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.ultra-template/changes/abandoned/.gitkeep +0 -0
- package/.ultra-template/contexts/TEMPLATE.md +94 -0
- package/.ultra-template/decisions/.gitkeep +1 -0
- package/.ultra-template/evidence/.gitkeep +1 -0
- package/.ultra-template/north-star.md +46 -0
- package/.ultra-template/research/.gitkeep +1 -0
- package/.ultra-template/specs/discovery.md +2 -2
- package/.ultra-template/tasks.json +3 -0
- package/.ultra-template/test-report.json +27 -0
- package/CHANGELOG.md +107 -1
- package/README.md +217 -579
- package/adapters/_shared/delegate-profiles/kimi-read-only.md +15 -0
- package/adapters/_shared/delegate-profiles/kimi-write.md +17 -0
- package/adapters/_shared/file-ops.cjs +76 -2
- package/adapters/_shared/host-profile.cjs +97 -0
- package/adapters/_shared/plugin-core.cjs +204 -0
- package/adapters/_shared/runtime-assets.cjs +31 -96
- package/adapters/claude.js +92 -291
- package/adapters/codex.js +309 -842
- package/adapters/grok.js +143 -1469
- package/adapters/kimi.js +124 -1053
- package/adapters/opencode.js +230 -742
- package/bin/delegate-worker.cjs +328 -0
- package/bin/delegate.cjs +463 -0
- package/bin/install.js +38 -11
- package/docs/ARCHITECTURE.md +125 -216
- package/docs/ARTIFACT-AUTHORITY.md +90 -268
- package/docs/DECISIONS.md +77 -87
- package/docs/PHILOSOPHY.md +208 -0
- package/docs/PLUGIN-ISOLATION-CONTRACT.md +65 -39
- package/docs/RUNTIME-COMPAT-MATRIX.md +140 -155
- package/docs/SKILL-AUTHORING.md +94 -73
- package/docs/WORKFLOW-LIFECYCLE.md +97 -189
- package/hooks/README.md +19 -37
- package/hooks/_common.py +113 -0
- package/hooks/adapters/codex.py +9 -16
- package/hooks/adapters/grok.py +5 -5
- package/hooks/adapters/kimi.py +8 -14
- package/hooks/block_dangerous_commands.py +201 -0
- package/hooks/compact_context.py +65 -0
- package/hooks/mid_workflow_recall.py +25 -0
- package/hooks/post_edit_guard.py +105 -0
- package/hooks/session_context.py +30 -0
- package/package.json +17 -52
- package/skills/ultra-change/SKILL.md +115 -50
- package/skills/ultra-change/references/change-contract.md +68 -3
- package/skills/ultra-delegate/SKILL.md +89 -0
- package/skills/ultra-delegate/references/delegation-contract.md +59 -0
- package/skills/ultra-delegate/scripts/delegate_wait.py +86 -0
- package/skills/ultra-deliver/SKILL.md +98 -42
- package/skills/ultra-deliver/references/baseline-reconciliation.md +39 -20
- package/skills/ultra-dev/SKILL.md +115 -62
- package/skills/ultra-dev/references/debugging.md +22 -0
- package/skills/ultra-domain-modeling/SKILL.md +79 -0
- package/skills/ultra-grilling/SKILL.md +118 -0
- package/skills/ultra-grilling/references/reframing.md +72 -0
- package/skills/ultra-init/SKILL.md +102 -37
- package/skills/ultra-init/references/brownfield-adoption.md +33 -83
- package/skills/ultra-init/scripts/init_project.cjs +84 -0
- package/skills/ultra-plan/SKILL.md +101 -68
- package/skills/ultra-research/SKILL.md +68 -48
- package/skills/ultra-research/references/00-problem-validation.md +5 -5
- package/skills/ultra-research/references/01-opportunity-discovery.md +3 -3
- package/skills/ultra-research/references/02-market-assessment.md +5 -4
- package/skills/ultra-research/references/03-competitive-landscape.md +3 -3
- package/skills/ultra-research/references/04-product-strategy.md +3 -3
- package/skills/ultra-research/references/05-assumptions-validation.md +5 -5
- package/skills/ultra-research/references/10-user-personas.md +3 -2
- package/skills/ultra-research/references/11-user-scenarios.md +3 -3
- package/skills/ultra-research/references/20-user-stories.md +4 -3
- package/skills/ultra-research/references/21-features-scope.md +3 -2
- package/skills/ultra-research/references/22-success-metrics.md +3 -3
- package/skills/ultra-research/references/30-architecture-context.md +3 -3
- package/skills/ultra-research/references/31-solution-strategy.md +3 -3
- package/skills/ultra-research/references/32-building-blocks.md +3 -3
- package/skills/ultra-research/references/40-deployment.md +3 -3
- package/skills/ultra-research/references/41-quality-risks.md +3 -3
- package/skills/ultra-research/references/99-synthesis.md +7 -7
- package/skills/ultra-review/SKILL.md +84 -32
- package/skills/ultra-review/references/code.md +17 -0
- package/skills/ultra-review/references/comments.md +12 -0
- package/skills/ultra-review/references/design.md +12 -0
- package/skills/ultra-review/references/errors.md +13 -0
- package/skills/ultra-review/references/spec.md +13 -0
- package/skills/ultra-review/references/tests.md +12 -0
- package/skills/ultra-review/references/worker-packet.md +40 -0
- package/skills/ultra-review/scripts/review_wait.py +26 -15
- package/skills/ultra-status/SKILL.md +61 -36
- package/skills/ultra-tdd/SKILL.md +81 -0
- package/skills/ultra-tdd/references/templates/README.md +20 -0
- package/skills/ultra-tdd/references/templates/feature-flag-default-audit.sh +79 -0
- package/skills/ultra-tdd/references/templates/persistence-real.ts +78 -0
- package/skills/ultra-tdd/references/templates/testcontainer-postgres.py +78 -0
- package/skills/ultra-tdd/references/templates/testcontainer-postgres.ts +73 -0
- package/skills/ultra-tdd/references/templates/vertical-slice.ts +66 -0
- package/skills/ultra-tdd/references/test-execution.md +18 -0
- package/skills/ultra-test/SKILL.md +75 -30
- package/skills/ultra-test/references/export-syntax.md +18 -0
- package/skills/ultra-test/scripts/worktree_digest.cjs +54 -0
- package/skills/ultra-think/SKILL.md +49 -27
- package/skills/ultra-think/references/autonomy-boundary.md +48 -0
- package/skills/ultra-think/references/interaction-boundary.md +18 -33
- package/.ultra-template/docs/research/README.md +0 -55
- package/.ultra-template/reports/templates/delivery-report.json +0 -17
- package/.ultra-template/reports/templates/test-report.json +0 -18
- package/.ultra-template/tasks/tasks.json +0 -15
- package/.ultra-template/templates/task-context.md +0 -19
- package/adapters/_shared/codex-assets.cjs +0 -725
- package/adapters/_shared/codex-ultra-tools-entry.cjs +0 -11
- package/adapters/_shared/interaction-contract.cjs +0 -129
- package/adapters/_shared/path-rewrite.cjs +0 -79
- package/adapters/_shared/runtime-native.cjs +0 -132
- package/adapters/_shared/settings-merge.cjs +0 -76
- package/agents/code-reviewer.md +0 -42
- package/agents/debugger.md +0 -40
- package/agents/review-code.md +0 -49
- package/agents/review-comments.md +0 -38
- package/agents/review-coordinator.md +0 -56
- package/agents/review-design.md +0 -40
- package/agents/review-errors.md +0 -43
- package/agents/review-spec.md +0 -39
- package/agents/review-tests.md +0 -40
- package/agents/tdd-runner.md +0 -38
- package/bin/orchestrator.js +0 -383
- package/commands/ultra-change.md +0 -10
- package/commands/ultra-deliver.md +0 -10
- package/commands/ultra-dev.md +0 -10
- package/commands/ultra-doctor.md +0 -10
- package/commands/ultra-init.md +0 -10
- package/commands/ultra-plan.md +0 -10
- package/commands/ultra-research.md +0 -10
- package/commands/ultra-review.md +0 -10
- package/commands/ultra-status.md +0 -10
- package/commands/ultra-test.md +0 -10
- package/commands/ultra-think.md +0 -10
- package/docs/AGENT-CONTEXT.md +0 -191
- package/docs/COMMIT-HASH-BACKFILL.md +0 -51
- package/docs/LEGACY-CLI-CROSSWALK.md +0 -175
- package/docs/ROADMAP.md +0 -101
- package/docs/STATE-DB-ACCESS-POLICY.md +0 -161
- package/hooks/active_task_context.py +0 -152
- package/hooks/context_envelope.py +0 -100
- package/hooks/health_check.py +0 -196
- package/hooks/pre_stop_check.py +0 -66
- package/hooks/runtime_paths.py +0 -396
- package/hooks/subagent_tracker.py +0 -88
- package/hooks/workflow_checkpoint.py +0 -76
- package/hooks/workflow_context.py +0 -48
- package/hooks/workflow_resume.py +0 -84
- package/mcp-server/hook-context.cjs +0 -38
- package/mcp-server/hook-event.cjs +0 -34
- package/mcp-server/lib/archive-journal.cjs +0 -1119
- package/mcp-server/lib/archive-mutation-worker.py +0 -365
- package/mcp-server/lib/artifact-registry.cjs +0 -1232
- package/mcp-server/lib/baseline-workflow.cjs +0 -1193
- package/mcp-server/lib/canonical-json.cjs +0 -19
- package/mcp-server/lib/change-authority.cjs +0 -26
- package/mcp-server/lib/change-packet.cjs +0 -790
- package/mcp-server/lib/change-workflow.cjs +0 -65
- package/mcp-server/lib/context-envelope.cjs +0 -581
- package/mcp-server/lib/context-paths.cjs +0 -142
- package/mcp-server/lib/decision-records.cjs +0 -423
- package/mcp-server/lib/delivery-transaction.cjs +0 -471
- package/mcp-server/lib/doctor-backup-worker.cjs +0 -328
- package/mcp-server/lib/doctor.cjs +0 -627
- package/mcp-server/lib/git-bootstrap.cjs +0 -651
- package/mcp-server/lib/init-project.cjs +0 -1021
- package/mcp-server/lib/kernel-change-workflow.cjs +0 -2029
- package/mcp-server/lib/legacy-change-workflow.cjs +0 -3032
- package/mcp-server/lib/managed-file-write.cjs +0 -172
- package/mcp-server/lib/plan-checkpoint.cjs +0 -177
- package/mcp-server/lib/plan-publication-worker.cjs +0 -830
- package/mcp-server/lib/plan-store.cjs +0 -794
- package/mcp-server/lib/prd-parser.cjs +0 -83
- package/mcp-server/lib/pricing.cjs +0 -44
- package/mcp-server/lib/project-context.cjs +0 -178
- package/mcp-server/lib/projector.cjs +0 -386
- package/mcp-server/lib/provider-refs.cjs +0 -42
- package/mcp-server/lib/runtime-paths.cjs +0 -1714
- package/mcp-server/lib/runtime-state.cjs +0 -222
- package/mcp-server/lib/safe-project-file.cjs +0 -385
- package/mcp-server/lib/stage-checkpoints.cjs +0 -463
- package/mcp-server/lib/state-authority.cjs +0 -95
- package/mcp-server/lib/state-db.cjs +0 -1580
- package/mcp-server/lib/state-ops.cjs +0 -1428
- package/mcp-server/lib/task-contract.cjs +0 -404
- package/mcp-server/lib/task-expander.cjs +0 -105
- package/mcp-server/lib/task-ledger.cjs +0 -1964
- package/mcp-server/lib/telemetry.cjs +0 -85
- package/mcp-server/lib/topo.cjs +0 -131
- package/mcp-server/lib/ultra-facade.cjs +0 -2684
- package/mcp-server/lib/worker-packet.cjs +0 -358
- package/mcp-server/server.cjs +0 -437
- package/orchestrator/auto-merge.cjs +0 -128
- package/orchestrator/daemon.cjs +0 -264
- package/orchestrator/dispatch-rules.cjs +0 -78
- package/orchestrator/parallel-orchestrator.cjs +0 -903
- package/orchestrator/planner/plan-builder.cjs +0 -125
- package/orchestrator/recovery.cjs +0 -188
- package/orchestrator/session-close-journal-worker.cjs +0 -5
- package/orchestrator/session-close-journal.cjs +0 -1014
- package/orchestrator/session-runner.cjs +0 -1153
- package/orchestrator/worktree-manager.cjs +0 -282
- package/settings.json +0 -7
- package/skills/cc-collab/SKILL.md +0 -42
- package/skills/code-review-expert/SKILL.md +0 -43
- package/skills/code-review-expert/references/correctness-reliability.md +0 -30
- package/skills/code-review-expert/references/design-boundaries.md +0 -26
- package/skills/code-review-expert/references/removal-plan.md +0 -24
- package/skills/codex-collab/SKILL.md +0 -49
- package/skills/codex-collab/evals/evals.json +0 -35
- package/skills/integration-rules/SKILL.md +0 -32
- package/skills/security-rules/SKILL.md +0 -38
- package/skills/testing-rules/SKILL.md +0 -32
- package/skills/ultra-doctor/SKILL.md +0 -41
- package/skills/ultra-plan/references/semantic-preflight.md +0 -20
- package/skills/ultra-verify/SKILL.md +0 -46
- package/skills/ultra-verify/evals/evals.json +0 -46
- package/skills/ultra-verify/references/cross-verify-modes.md +0 -28
- package/skills/ultra-verify/references/evidence-status.md +0 -21
- package/skills/ultra-verify/scripts/verify_wait.py +0 -94
- package/spec/cli-protocol.md +0 -102
- package/spec/mcp-tools.yaml +0 -312
- package/spec/schemas/baseline-reconciliation.v1.schema.json +0 -73
- package/spec/schemas/change-delta.v1.schema.json +0 -153
- package/spec/schemas/command-manifest.schema.json +0 -29
- package/spec/schemas/context-file.v4.5.schema.json +0 -54
- package/spec/schemas/delivery-report.v1.schema.json +0 -66
- package/spec/schemas/documentation-reconciliation.v1.schema.json +0 -106
- package/spec/schemas/mcp-tools.schema.json +0 -136
- package/spec/schemas/skill-manifest.schema.json +0 -24
- package/spec/schemas/state-db.sql +0 -641
- package/spec/schemas/task-ledger.v2.schema.json +0 -296
- package/spec/schemas/tasks.v4.5.schema.json +0 -96
- package/spec/schemas/test-report.v1.schema.json +0 -225
- package/ultra-tools/cli.cjs +0 -129
- package/ultra-tools/commands/db.cjs +0 -226
- package/ultra-tools/commands/legacy-memory.cjs +0 -159
- package/ultra-tools/commands/migrate.cjs +0 -1386
- package/ultra-tools/commands/session.cjs +0 -213
- package/ultra-tools/commands/status.cjs +0 -559
- package/ultra-tools/commands/system.cjs +0 -498
- package/ultra-tools/commands/task.cjs +0 -105
|
@@ -1,641 +0,0 @@
|
|
|
1
|
-
-- Ultra Builder Pro — authoritative state schema
|
|
2
|
-
-- This file builds .ultra/.runtime/state.db, the source of truth for all
|
|
3
|
-
-- baseline / change / task / session / event / telemetry data. The Git-facing
|
|
4
|
-
-- tasks.json is a durable team checkpoint; live task and Context views under
|
|
5
|
-
-- .ultra/.runtime/projections are generated projections.
|
|
6
|
-
--
|
|
7
|
-
-- Authority boundary: docs/DECISIONS.md.
|
|
8
|
-
--
|
|
9
|
-
-- PRAGMAs are applied by mcp-server/lib/state-db.ts on connection open;
|
|
10
|
-
-- they cannot be persisted in CREATE statements but are documented here.
|
|
11
|
-
-- PRAGMA journal_mode=WAL; -- multi-reader / single-writer (R21)
|
|
12
|
-
-- PRAGMA synchronous=NORMAL; -- WAL durability vs perf
|
|
13
|
-
-- PRAGMA busy_timeout=5000; -- block up to 5s on lock (R25)
|
|
14
|
-
-- PRAGMA foreign_keys=ON; -- enforce FK constraints
|
|
15
|
-
|
|
16
|
-
-- ──────────────────────────── project baseline ─────────────────────────────
|
|
17
|
-
-- The baseline is the approved, repository-scoped snapshot that every change
|
|
18
|
-
-- is measured against. It stores digests and evidence references, never source,
|
|
19
|
-
-- prompt, transcript, general memory-provider, or code-graph payloads.
|
|
20
|
-
CREATE TABLE IF NOT EXISTS baselines (
|
|
21
|
-
id TEXT PRIMARY KEY,
|
|
22
|
-
project_name TEXT NOT NULL,
|
|
23
|
-
project_type TEXT,
|
|
24
|
-
stack TEXT,
|
|
25
|
-
mode TEXT NOT NULL CHECK (mode IN ('greenfield', 'brownfield', 'migrated')),
|
|
26
|
-
status TEXT NOT NULL DEFAULT 'draft'
|
|
27
|
-
CHECK (status IN ('draft', 'adopting', 'blocked', 'ready', 'superseded')),
|
|
28
|
-
repository_root TEXT NOT NULL DEFAULT '.',
|
|
29
|
-
scope_json TEXT NOT NULL DEFAULT '["."]',
|
|
30
|
-
repository_revision TEXT,
|
|
31
|
-
repository_branch TEXT,
|
|
32
|
-
worktree_state TEXT NOT NULL DEFAULT 'unavailable'
|
|
33
|
-
CHECK (worktree_state IN ('clean', 'dirty', 'unborn', 'unavailable')),
|
|
34
|
-
worktree_digest TEXT,
|
|
35
|
-
worktree_files_json TEXT NOT NULL DEFAULT '[]',
|
|
36
|
-
worktree_accepted INTEGER NOT NULL DEFAULT 0 CHECK (worktree_accepted IN (0, 1)),
|
|
37
|
-
known_red_accepted INTEGER NOT NULL DEFAULT 0 CHECK (known_red_accepted IN (0, 1)),
|
|
38
|
-
spec_refs_json TEXT NOT NULL DEFAULT '[]',
|
|
39
|
-
evidence_json TEXT NOT NULL DEFAULT '[]',
|
|
40
|
-
verification_json TEXT NOT NULL DEFAULT '[]',
|
|
41
|
-
unknowns_json TEXT NOT NULL DEFAULT '[]',
|
|
42
|
-
gaps_json TEXT NOT NULL DEFAULT '[]',
|
|
43
|
-
classification_json TEXT NOT NULL DEFAULT '{}',
|
|
44
|
-
provider_refs_json TEXT NOT NULL DEFAULT '{}',
|
|
45
|
-
research_run_id TEXT,
|
|
46
|
-
research_checkpoint_id TEXT,
|
|
47
|
-
approved_by TEXT,
|
|
48
|
-
approval_note TEXT,
|
|
49
|
-
started_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
50
|
-
updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
51
|
-
converged_at TEXT
|
|
52
|
-
);
|
|
53
|
-
|
|
54
|
-
CREATE INDEX IF NOT EXISTS baselines_status ON baselines(status, updated_at);
|
|
55
|
-
|
|
56
|
-
-- ──────────────────────────── changes ─────────────────────────────────────
|
|
57
|
-
-- A project baseline is continuous; each feature, fix, incident, or redesign
|
|
58
|
-
-- is an independently converged change unit. Only changes become terminal.
|
|
59
|
-
CREATE TABLE IF NOT EXISTS changes (
|
|
60
|
-
id TEXT PRIMARY KEY,
|
|
61
|
-
title TEXT NOT NULL,
|
|
62
|
-
kind TEXT NOT NULL CHECK (length(trim(kind)) BETWEEN 1 AND 80),
|
|
63
|
-
status TEXT NOT NULL DEFAULT 'active'
|
|
64
|
-
CHECK (status IN ('active', 'blocked', 'ready', 'archived', 'cancelled')),
|
|
65
|
-
intent TEXT NOT NULL,
|
|
66
|
-
docs_impact_json TEXT NOT NULL DEFAULT '{"status":"unknown","files":[],"rationale":null}',
|
|
67
|
-
provider_refs_json TEXT NOT NULL DEFAULT '{}',
|
|
68
|
-
baseline_bypass_json TEXT,
|
|
69
|
-
contract_json TEXT NOT NULL DEFAULT '{}',
|
|
70
|
-
classification_json TEXT NOT NULL DEFAULT '{}',
|
|
71
|
-
research_disposition_json TEXT NOT NULL DEFAULT '{}',
|
|
72
|
-
alignment_thread_id TEXT REFERENCES decision_threads(id) ON DELETE SET NULL,
|
|
73
|
-
base_commit TEXT,
|
|
74
|
-
supersedes_id TEXT REFERENCES changes(id) ON DELETE SET NULL,
|
|
75
|
-
artifact_root TEXT NOT NULL,
|
|
76
|
-
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
77
|
-
updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
78
|
-
closed_at TEXT
|
|
79
|
-
);
|
|
80
|
-
|
|
81
|
-
CREATE INDEX IF NOT EXISTS changes_status ON changes(status, created_at);
|
|
82
|
-
CREATE INDEX IF NOT EXISTS changes_kind ON changes(kind, created_at);
|
|
83
|
-
|
|
84
|
-
-- ──────────────────────────── tasks ───────────────────────────────────────
|
|
85
|
-
-- Checkout-local operational task authority. The Git-facing tasks.json is a
|
|
86
|
-
-- durable team checkpoint published/imported through ultra.sync; live
|
|
87
|
-
-- projections stay below .ultra/.runtime and are never edited manually.
|
|
88
|
-
CREATE TABLE IF NOT EXISTS tasks (
|
|
89
|
-
id TEXT PRIMARY KEY,
|
|
90
|
-
title TEXT NOT NULL,
|
|
91
|
-
type TEXT NOT NULL CHECK (length(trim(type)) BETWEEN 1 AND 80),
|
|
92
|
-
priority TEXT NOT NULL CHECK (length(trim(priority)) BETWEEN 1 AND 80),
|
|
93
|
-
complexity INTEGER CHECK (complexity BETWEEN 1 AND 10),
|
|
94
|
-
estimated_days REAL CHECK (estimated_days IS NULL OR estimated_days > 0),
|
|
95
|
-
status TEXT NOT NULL DEFAULT 'pending'
|
|
96
|
-
CHECK (status IN ('pending', 'in_progress', 'completed', 'blocked', 'expanded')),
|
|
97
|
-
deps TEXT, -- JSON array of task ids
|
|
98
|
-
files_modified TEXT, -- JSON array of paths (Phase 8B conflict detection)
|
|
99
|
-
session_id TEXT, -- current owning session (Phase 4.5)
|
|
100
|
-
stale INTEGER NOT NULL DEFAULT 0 CHECK (stale IN (0, 1)),
|
|
101
|
-
tag TEXT, -- git branch tag (Phase 7.2)
|
|
102
|
-
trace_to TEXT, -- spec anchor reference
|
|
103
|
-
outcome TEXT, -- observable result owned by this task
|
|
104
|
-
slice_kind TEXT CHECK (slice_kind IS NULL OR length(trim(slice_kind)) BETWEEN 1 AND 80),
|
|
105
|
-
public_seam TEXT, -- externally observable seam exercised by the slice
|
|
106
|
-
verification_command TEXT, -- exact task-level verification command
|
|
107
|
-
acceptance_json TEXT NOT NULL DEFAULT '[]',
|
|
108
|
-
context_refs_json TEXT NOT NULL DEFAULT '[]',
|
|
109
|
-
docs_impact_json TEXT NOT NULL DEFAULT '{"status":"unknown","files":[],"rationale":null}',
|
|
110
|
-
ownership_json TEXT NOT NULL DEFAULT '{}',
|
|
111
|
-
context_file TEXT, -- projection target path
|
|
112
|
-
completion_commit TEXT, -- checkout-local integrated commit evidence
|
|
113
|
-
change_id TEXT REFERENCES changes(id) ON DELETE SET NULL,
|
|
114
|
-
parent_id TEXT REFERENCES tasks(id) ON DELETE SET NULL, -- Phase 8A.1: task.expand subtask→parent
|
|
115
|
-
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
116
|
-
updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
|
|
117
|
-
);
|
|
118
|
-
|
|
119
|
-
CREATE INDEX IF NOT EXISTS tasks_status ON tasks(status);
|
|
120
|
-
CREATE INDEX IF NOT EXISTS tasks_tag ON tasks(tag);
|
|
121
|
-
CREATE INDEX IF NOT EXISTS tasks_session ON tasks(session_id) WHERE session_id IS NOT NULL;
|
|
122
|
-
CREATE INDEX IF NOT EXISTS tasks_stale ON tasks(stale) WHERE stale = 1;
|
|
123
|
-
CREATE INDEX IF NOT EXISTS tasks_parent ON tasks(parent_id) WHERE parent_id IS NOT NULL;
|
|
124
|
-
CREATE INDEX IF NOT EXISTS tasks_change ON tasks(change_id) WHERE change_id IS NOT NULL;
|
|
125
|
-
|
|
126
|
-
-- ──────────────────────────── events ──────────────────────────────────────
|
|
127
|
-
-- Append-only event stream. id is the subscription cursor (D31, R26):
|
|
128
|
-
-- subscribers pull `id > since_id` to avoid same-ms event loss that
|
|
129
|
-
-- max(ts) would suffer.
|
|
130
|
-
CREATE TABLE IF NOT EXISTS events (
|
|
131
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
132
|
-
ts TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
133
|
-
type TEXT NOT NULL,
|
|
134
|
-
task_id TEXT,
|
|
135
|
-
change_id TEXT,
|
|
136
|
-
session_id TEXT,
|
|
137
|
-
runtime TEXT CHECK (runtime IS NULL OR runtime IN ('claude', 'opencode', 'codex', 'kimi', 'grok')),
|
|
138
|
-
payload_json TEXT
|
|
139
|
-
);
|
|
140
|
-
|
|
141
|
-
CREATE INDEX IF NOT EXISTS events_ts_type ON events(ts, type);
|
|
142
|
-
CREATE INDEX IF NOT EXISTS events_task ON events(task_id, id);
|
|
143
|
-
CREATE INDEX IF NOT EXISTS events_session ON events(session_id, id);
|
|
144
|
-
CREATE INDEX IF NOT EXISTS events_change ON events(change_id, id);
|
|
145
|
-
|
|
146
|
-
-- ──────────────────────────── sessions ────────────────────────────────────
|
|
147
|
-
-- Authoritative session row. lease_expires_at + heartbeat_at live ONLY here
|
|
148
|
-
-- (D32, R29) — no lease.json file. Worktree + artifact_dir are filesystem
|
|
149
|
-
-- paths owned by the session.
|
|
150
|
-
CREATE TABLE IF NOT EXISTS sessions (
|
|
151
|
-
sid TEXT PRIMARY KEY,
|
|
152
|
-
task_id TEXT NOT NULL REFERENCES tasks(id),
|
|
153
|
-
runtime TEXT NOT NULL CHECK (runtime IN ('claude', 'opencode', 'codex', 'kimi', 'grok')),
|
|
154
|
-
pid INTEGER,
|
|
155
|
-
worktree_path TEXT NOT NULL,
|
|
156
|
-
artifact_dir TEXT NOT NULL,
|
|
157
|
-
status TEXT NOT NULL DEFAULT 'running'
|
|
158
|
-
CHECK (status IN ('running', 'completed', 'crashed', 'orphan')),
|
|
159
|
-
lease_expires_at TEXT NOT NULL,
|
|
160
|
-
heartbeat_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
161
|
-
started_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
|
|
162
|
-
);
|
|
163
|
-
|
|
164
|
-
CREATE INDEX IF NOT EXISTS sessions_active ON sessions(status, task_id);
|
|
165
|
-
CREATE INDEX IF NOT EXISTS sessions_lease ON sessions(lease_expires_at) WHERE status = 'running';
|
|
166
|
-
CREATE UNIQUE INDEX IF NOT EXISTS sessions_one_active_task
|
|
167
|
-
ON sessions(task_id) WHERE status = 'running';
|
|
168
|
-
|
|
169
|
-
-- ──────────────────────────── schema_version ──────────────────────────────
|
|
170
|
-
-- Cross-version misread guard (D30, R27). Single row per applied version.
|
|
171
|
-
CREATE TABLE IF NOT EXISTS schema_version (
|
|
172
|
-
version TEXT PRIMARY KEY,
|
|
173
|
-
applied_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
174
|
-
description TEXT
|
|
175
|
-
);
|
|
176
|
-
|
|
177
|
-
-- ──────────────────────────── migration_history ───────────────────────────
|
|
178
|
-
-- Audit trail for every migration attempt (D30, R27).
|
|
179
|
-
CREATE TABLE IF NOT EXISTS migration_history (
|
|
180
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
181
|
-
from_version TEXT NOT NULL,
|
|
182
|
-
to_version TEXT NOT NULL,
|
|
183
|
-
direction TEXT NOT NULL CHECK (direction IN ('forward', 'rollback')),
|
|
184
|
-
ts TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
185
|
-
status TEXT NOT NULL CHECK (status IN ('success', 'failed', 'dry_run')),
|
|
186
|
-
notes TEXT
|
|
187
|
-
);
|
|
188
|
-
|
|
189
|
-
CREATE INDEX IF NOT EXISTS migration_history_ts ON migration_history(ts);
|
|
190
|
-
|
|
191
|
-
-- ──────────────────────────── telemetry ───────────────────────────────────
|
|
192
|
-
-- Token / cost / tool-call counters per session.
|
|
193
|
-
CREATE TABLE IF NOT EXISTS telemetry (
|
|
194
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
195
|
-
session_id TEXT REFERENCES sessions(sid),
|
|
196
|
-
event_type TEXT NOT NULL CHECK (event_type IN ('tool_call', 'token_usage', 'cost')),
|
|
197
|
-
tokens_input INTEGER,
|
|
198
|
-
tokens_output INTEGER,
|
|
199
|
-
tool_name TEXT,
|
|
200
|
-
cost_usd REAL,
|
|
201
|
-
ts TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
|
|
202
|
-
);
|
|
203
|
-
|
|
204
|
-
CREATE INDEX IF NOT EXISTS telemetry_session ON telemetry(session_id, ts);
|
|
205
|
-
CREATE INDEX IF NOT EXISTS telemetry_type ON telemetry(event_type, ts);
|
|
206
|
-
|
|
207
|
-
-- ──────────────────────────── specs_refs ──────────────────────────────────
|
|
208
|
-
-- Spec change tracking. Phase 5.3 staleness propagation reads this.
|
|
209
|
-
CREATE TABLE IF NOT EXISTS specs_refs (
|
|
210
|
-
spec_file TEXT NOT NULL,
|
|
211
|
-
section TEXT NOT NULL,
|
|
212
|
-
anchor TEXT,
|
|
213
|
-
last_modified_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
214
|
-
PRIMARY KEY (spec_file, section)
|
|
215
|
-
);
|
|
216
|
-
|
|
217
|
-
-- ──────────────────────────── circuit_breaker ─────────────────────────────
|
|
218
|
-
-- Per-task failure accumulator (Phase 5.2). When failure_count crosses the
|
|
219
|
-
-- threshold, tripped_at is stamped and `task_circuit_broken` fires. Admission
|
|
220
|
-
-- control refuses new spawns for tripped tasks until manually reset.
|
|
221
|
-
CREATE TABLE IF NOT EXISTS circuit_breaker (
|
|
222
|
-
task_id TEXT PRIMARY KEY REFERENCES tasks(id) ON DELETE CASCADE,
|
|
223
|
-
failure_count INTEGER NOT NULL DEFAULT 0,
|
|
224
|
-
tripped_at TEXT,
|
|
225
|
-
last_failure_at TEXT,
|
|
226
|
-
last_failure_reason TEXT
|
|
227
|
-
);
|
|
228
|
-
|
|
229
|
-
CREATE INDEX IF NOT EXISTS circuit_breaker_tripped ON circuit_breaker(tripped_at)
|
|
230
|
-
WHERE tripped_at IS NOT NULL;
|
|
231
|
-
|
|
232
|
-
-- ──────────────────────────── change artifacts ────────────────────────────
|
|
233
|
-
CREATE TABLE IF NOT EXISTS artifacts (
|
|
234
|
-
id TEXT PRIMARY KEY,
|
|
235
|
-
owner_type TEXT NOT NULL
|
|
236
|
-
CHECK (owner_type IN ('project', 'baseline', 'change', 'task', 'workflow')),
|
|
237
|
-
owner_id TEXT NOT NULL,
|
|
238
|
-
change_id TEXT REFERENCES changes(id) ON DELETE SET NULL,
|
|
239
|
-
task_id TEXT REFERENCES tasks(id) ON DELETE SET NULL,
|
|
240
|
-
kind TEXT NOT NULL,
|
|
241
|
-
path TEXT NOT NULL,
|
|
242
|
-
digest TEXT,
|
|
243
|
-
content_hash TEXT,
|
|
244
|
-
before_digest TEXT,
|
|
245
|
-
after_digest TEXT,
|
|
246
|
-
provenance_json TEXT NOT NULL DEFAULT '{}',
|
|
247
|
-
metadata_json TEXT,
|
|
248
|
-
managed INTEGER NOT NULL DEFAULT 0 CHECK (managed IN (0, 1)),
|
|
249
|
-
status TEXT NOT NULL DEFAULT 'current'
|
|
250
|
-
CHECK (status IN ('current', 'stale', 'terminal', 'archived')),
|
|
251
|
-
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
252
|
-
updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
253
|
-
UNIQUE(owner_type, owner_id, kind, path)
|
|
254
|
-
);
|
|
255
|
-
|
|
256
|
-
CREATE INDEX IF NOT EXISTS artifacts_change ON artifacts(change_id, kind);
|
|
257
|
-
CREATE INDEX IF NOT EXISTS artifacts_owner ON artifacts(owner_type, owner_id, status);
|
|
258
|
-
CREATE INDEX IF NOT EXISTS artifacts_path ON artifacts(path, status);
|
|
259
|
-
CREATE UNIQUE INDEX IF NOT EXISTS artifacts_one_active_path
|
|
260
|
-
ON artifacts(path) WHERE status <> 'archived';
|
|
261
|
-
|
|
262
|
-
CREATE TABLE IF NOT EXISTS artifact_edges (
|
|
263
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
264
|
-
source_type TEXT NOT NULL
|
|
265
|
-
CHECK (source_type IN ('artifact', 'project', 'baseline', 'change', 'task', 'workflow', 'external')),
|
|
266
|
-
source_id TEXT NOT NULL,
|
|
267
|
-
target_type TEXT NOT NULL
|
|
268
|
-
CHECK (target_type IN ('artifact', 'project', 'baseline', 'change', 'task', 'workflow', 'external')),
|
|
269
|
-
target_id TEXT NOT NULL,
|
|
270
|
-
relation TEXT NOT NULL,
|
|
271
|
-
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
272
|
-
UNIQUE(source_type, source_id, target_type, target_id, relation)
|
|
273
|
-
);
|
|
274
|
-
|
|
275
|
-
CREATE INDEX IF NOT EXISTS artifact_edges_source
|
|
276
|
-
ON artifact_edges(source_type, source_id);
|
|
277
|
-
CREATE INDEX IF NOT EXISTS artifact_edges_target
|
|
278
|
-
ON artifact_edges(target_type, target_id);
|
|
279
|
-
|
|
280
|
-
CREATE TABLE IF NOT EXISTS context_snapshots (
|
|
281
|
-
id TEXT PRIMARY KEY,
|
|
282
|
-
change_id TEXT NOT NULL REFERENCES changes(id) ON DELETE CASCADE,
|
|
283
|
-
task_id TEXT REFERENCES tasks(id) ON DELETE SET NULL,
|
|
284
|
-
git_head TEXT,
|
|
285
|
-
provider_refs_json TEXT NOT NULL DEFAULT '{}',
|
|
286
|
-
manifest_path TEXT NOT NULL,
|
|
287
|
-
manifest_hash TEXT NOT NULL,
|
|
288
|
-
role TEXT NOT NULL DEFAULT 'plan'
|
|
289
|
-
CHECK (role IN ('plan', 'implement', 'check', 'review')),
|
|
290
|
-
gate TEXT NOT NULL DEFAULT 'alignment'
|
|
291
|
-
CHECK (gate IN ('alignment', 'planning', 'implementation', 'verification', 'review', 'convergence', 'recovery')),
|
|
292
|
-
next_action TEXT NOT NULL DEFAULT '',
|
|
293
|
-
allowed_transitions_json TEXT NOT NULL DEFAULT '[]',
|
|
294
|
-
required_transition TEXT,
|
|
295
|
-
readiness TEXT NOT NULL DEFAULT 'ready'
|
|
296
|
-
CHECK (readiness IN ('ready', 'blocked')),
|
|
297
|
-
blockers_json TEXT NOT NULL DEFAULT '[]',
|
|
298
|
-
context_json TEXT NOT NULL DEFAULT '{}',
|
|
299
|
-
token_estimate INTEGER NOT NULL DEFAULT 0 CHECK (token_estimate >= 0),
|
|
300
|
-
token_budget INTEGER NOT NULL DEFAULT 12000 CHECK (token_budget > 0),
|
|
301
|
-
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
|
|
302
|
-
);
|
|
303
|
-
|
|
304
|
-
CREATE INDEX IF NOT EXISTS context_snapshots_change ON context_snapshots(change_id, created_at);
|
|
305
|
-
CREATE INDEX IF NOT EXISTS context_snapshots_binding
|
|
306
|
-
ON context_snapshots(change_id, task_id, role, gate, created_at);
|
|
307
|
-
|
|
308
|
-
CREATE TABLE IF NOT EXISTS spec_learning_candidates (
|
|
309
|
-
id TEXT PRIMARY KEY,
|
|
310
|
-
change_id TEXT NOT NULL REFERENCES changes(id) ON DELETE CASCADE,
|
|
311
|
-
task_id TEXT REFERENCES tasks(id) ON DELETE SET NULL,
|
|
312
|
-
target_ref TEXT NOT NULL,
|
|
313
|
-
summary TEXT NOT NULL,
|
|
314
|
-
evidence_json TEXT NOT NULL DEFAULT '[]',
|
|
315
|
-
status TEXT NOT NULL DEFAULT 'proposed'
|
|
316
|
-
CHECK (status IN ('proposed', 'approved', 'rejected', 'applied')),
|
|
317
|
-
resolution TEXT,
|
|
318
|
-
applied_ref TEXT,
|
|
319
|
-
before_digest TEXT,
|
|
320
|
-
after_digest TEXT,
|
|
321
|
-
apply_evidence_json TEXT NOT NULL DEFAULT '[]',
|
|
322
|
-
proposed_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
323
|
-
resolved_at TEXT,
|
|
324
|
-
applied_at TEXT
|
|
325
|
-
);
|
|
326
|
-
|
|
327
|
-
CREATE INDEX IF NOT EXISTS spec_learning_change
|
|
328
|
-
ON spec_learning_candidates(change_id, status, proposed_at);
|
|
329
|
-
|
|
330
|
-
CREATE TABLE IF NOT EXISTS trace_links (
|
|
331
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
332
|
-
change_id TEXT NOT NULL REFERENCES changes(id) ON DELETE CASCADE,
|
|
333
|
-
task_id TEXT REFERENCES tasks(id) ON DELETE SET NULL,
|
|
334
|
-
source_ref TEXT NOT NULL,
|
|
335
|
-
target_ref TEXT NOT NULL,
|
|
336
|
-
relation TEXT NOT NULL,
|
|
337
|
-
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
338
|
-
UNIQUE(change_id, source_ref, target_ref, relation)
|
|
339
|
-
);
|
|
340
|
-
|
|
341
|
-
CREATE INDEX IF NOT EXISTS trace_links_change ON trace_links(change_id, task_id);
|
|
342
|
-
|
|
343
|
-
-- ──────────────────────────── runtime reliability ─────────────────────────
|
|
344
|
-
CREATE TABLE IF NOT EXISTS incidents (
|
|
345
|
-
id TEXT PRIMARY KEY,
|
|
346
|
-
code TEXT NOT NULL,
|
|
347
|
-
severity TEXT NOT NULL CHECK (severity IN ('warning', 'error', 'critical')),
|
|
348
|
-
status TEXT NOT NULL DEFAULT 'open' CHECK (status IN ('open', 'resolved')),
|
|
349
|
-
retryable INTEGER NOT NULL DEFAULT 0 CHECK (retryable IN (0, 1)),
|
|
350
|
-
message TEXT NOT NULL,
|
|
351
|
-
change_id TEXT REFERENCES changes(id) ON DELETE SET NULL,
|
|
352
|
-
task_id TEXT REFERENCES tasks(id) ON DELETE SET NULL,
|
|
353
|
-
session_id TEXT REFERENCES sessions(sid) ON DELETE SET NULL,
|
|
354
|
-
source_kind TEXT,
|
|
355
|
-
source_id TEXT,
|
|
356
|
-
evidence_json TEXT,
|
|
357
|
-
occurrence_count INTEGER NOT NULL DEFAULT 1,
|
|
358
|
-
first_seen_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
359
|
-
last_seen_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
360
|
-
resolved_at TEXT,
|
|
361
|
-
resolution TEXT
|
|
362
|
-
);
|
|
363
|
-
|
|
364
|
-
CREATE INDEX IF NOT EXISTS incidents_open ON incidents(status, severity, last_seen_at);
|
|
365
|
-
CREATE INDEX IF NOT EXISTS incidents_change ON incidents(change_id, status);
|
|
366
|
-
|
|
367
|
-
CREATE TABLE IF NOT EXISTS projection_jobs (
|
|
368
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
369
|
-
tool_name TEXT NOT NULL,
|
|
370
|
-
event_cursor INTEGER NOT NULL DEFAULT 0,
|
|
371
|
-
status TEXT NOT NULL DEFAULT 'pending'
|
|
372
|
-
CHECK (status IN ('pending', 'running', 'completed', 'failed')),
|
|
373
|
-
attempts INTEGER NOT NULL DEFAULT 0,
|
|
374
|
-
max_attempts INTEGER NOT NULL DEFAULT 3 CHECK (max_attempts > 0),
|
|
375
|
-
last_error TEXT,
|
|
376
|
-
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
377
|
-
updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
378
|
-
completed_at TEXT
|
|
379
|
-
);
|
|
380
|
-
|
|
381
|
-
CREATE INDEX IF NOT EXISTS projection_jobs_status ON projection_jobs(status, id);
|
|
382
|
-
|
|
383
|
-
CREATE TABLE IF NOT EXISTS event_consumers (
|
|
384
|
-
name TEXT PRIMARY KEY,
|
|
385
|
-
cursor INTEGER NOT NULL DEFAULT 0 CHECK (cursor >= 0),
|
|
386
|
-
updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
|
|
387
|
-
);
|
|
388
|
-
|
|
389
|
-
-- ──────────────────────────── workflow runs ───────────────────────────────
|
|
390
|
-
-- Skills own judgment and artifact content. MCP owns durable transitions,
|
|
391
|
-
-- evidence references, output digests, blockers, and recovery position.
|
|
392
|
-
CREATE TABLE IF NOT EXISTS workflow_runs (
|
|
393
|
-
id TEXT PRIMARY KEY,
|
|
394
|
-
kind TEXT NOT NULL
|
|
395
|
-
CHECK (kind IN ('init', 'research', 'plan', 'change', 'dev', 'test', 'review', 'deliver')),
|
|
396
|
-
mode TEXT,
|
|
397
|
-
subject TEXT NOT NULL,
|
|
398
|
-
definition_version TEXT NOT NULL DEFAULT '1.0',
|
|
399
|
-
status TEXT NOT NULL DEFAULT 'active'
|
|
400
|
-
CHECK (status IN ('active', 'blocked', 'ready', 'completed', 'cancelled')),
|
|
401
|
-
current_step TEXT,
|
|
402
|
-
baseline_id TEXT REFERENCES baselines(id) ON DELETE SET NULL,
|
|
403
|
-
change_id TEXT REFERENCES changes(id) ON DELETE SET NULL,
|
|
404
|
-
task_id TEXT REFERENCES tasks(id) ON DELETE SET NULL,
|
|
405
|
-
metadata_json TEXT NOT NULL DEFAULT '{}',
|
|
406
|
-
blockers_json TEXT NOT NULL DEFAULT '[]',
|
|
407
|
-
approval_json TEXT,
|
|
408
|
-
summary_json TEXT NOT NULL DEFAULT '{}',
|
|
409
|
-
started_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
410
|
-
updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
411
|
-
completed_at TEXT
|
|
412
|
-
);
|
|
413
|
-
|
|
414
|
-
CREATE INDEX IF NOT EXISTS workflow_runs_status
|
|
415
|
-
ON workflow_runs(status, kind, updated_at);
|
|
416
|
-
CREATE INDEX IF NOT EXISTS workflow_runs_baseline
|
|
417
|
-
ON workflow_runs(baseline_id, kind, updated_at);
|
|
418
|
-
CREATE INDEX IF NOT EXISTS workflow_runs_change
|
|
419
|
-
ON workflow_runs(change_id, kind, updated_at);
|
|
420
|
-
CREATE INDEX IF NOT EXISTS workflow_runs_task
|
|
421
|
-
ON workflow_runs(task_id, kind, updated_at);
|
|
422
|
-
|
|
423
|
-
CREATE TABLE IF NOT EXISTS workflow_steps (
|
|
424
|
-
run_id TEXT NOT NULL REFERENCES workflow_runs(id) ON DELETE CASCADE,
|
|
425
|
-
step_id TEXT NOT NULL,
|
|
426
|
-
position INTEGER NOT NULL CHECK (position >= 0),
|
|
427
|
-
title TEXT NOT NULL,
|
|
428
|
-
required INTEGER NOT NULL DEFAULT 1 CHECK (required IN (0, 1)),
|
|
429
|
-
status TEXT NOT NULL DEFAULT 'pending'
|
|
430
|
-
CHECK (status IN ('pending', 'in_progress', 'completed', 'skipped', 'blocked')),
|
|
431
|
-
evidence_json TEXT NOT NULL DEFAULT '[]',
|
|
432
|
-
outputs_json TEXT NOT NULL DEFAULT '[]',
|
|
433
|
-
decisions_json TEXT NOT NULL DEFAULT '[]',
|
|
434
|
-
semantic_records_json TEXT NOT NULL DEFAULT '[]',
|
|
435
|
-
blockers_json TEXT NOT NULL DEFAULT '[]',
|
|
436
|
-
skip_reason TEXT,
|
|
437
|
-
started_at TEXT,
|
|
438
|
-
completed_at TEXT,
|
|
439
|
-
updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
440
|
-
PRIMARY KEY (run_id, step_id)
|
|
441
|
-
);
|
|
442
|
-
|
|
443
|
-
CREATE UNIQUE INDEX IF NOT EXISTS workflow_steps_position
|
|
444
|
-
ON workflow_steps(run_id, position);
|
|
445
|
-
CREATE INDEX IF NOT EXISTS workflow_steps_status
|
|
446
|
-
ON workflow_steps(run_id, status, position);
|
|
447
|
-
|
|
448
|
-
-- ──────────────────────────── decision dialogue ─────────────────────────
|
|
449
|
-
-- The host owns reasoning, presentation, and normalized decision content. MCP
|
|
450
|
-
-- owns the one-open-item invariant, pending recovery state, durable authority,
|
|
451
|
-
-- checkpoints, and recovery. Raw prompts and transcripts never belong here.
|
|
452
|
-
CREATE TABLE IF NOT EXISTS decision_threads (
|
|
453
|
-
id TEXT PRIMARY KEY,
|
|
454
|
-
purpose TEXT NOT NULL,
|
|
455
|
-
mode TEXT NOT NULL DEFAULT 'guided'
|
|
456
|
-
CHECK (mode IN ('guided', 'fast', 'autonomous', 'diagnostic')),
|
|
457
|
-
status TEXT NOT NULL DEFAULT 'active'
|
|
458
|
-
CHECK (status IN ('active', 'checkpoint_ready', 'completed', 'confirmed', 'cancelled')),
|
|
459
|
-
baseline_id TEXT REFERENCES baselines(id) ON DELETE SET NULL,
|
|
460
|
-
change_id TEXT REFERENCES changes(id) ON DELETE CASCADE,
|
|
461
|
-
workflow_run_id TEXT REFERENCES workflow_runs(id) ON DELETE CASCADE,
|
|
462
|
-
summary_json TEXT NOT NULL DEFAULT '{}',
|
|
463
|
-
checkpoint_json TEXT NOT NULL DEFAULT '{}',
|
|
464
|
-
started_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
465
|
-
updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
466
|
-
completed_at TEXT,
|
|
467
|
-
confirmed_at TEXT,
|
|
468
|
-
CHECK (baseline_id IS NOT NULL OR change_id IS NOT NULL OR workflow_run_id IS NOT NULL)
|
|
469
|
-
);
|
|
470
|
-
|
|
471
|
-
CREATE INDEX IF NOT EXISTS decision_threads_status
|
|
472
|
-
ON decision_threads(status, updated_at);
|
|
473
|
-
CREATE INDEX IF NOT EXISTS decision_threads_authority
|
|
474
|
-
ON decision_threads(baseline_id, change_id, workflow_run_id, status);
|
|
475
|
-
|
|
476
|
-
CREATE TABLE IF NOT EXISTS decision_items (
|
|
477
|
-
id TEXT PRIMARY KEY,
|
|
478
|
-
thread_id TEXT NOT NULL REFERENCES decision_threads(id) ON DELETE CASCADE,
|
|
479
|
-
sequence INTEGER NOT NULL CHECK (sequence > 0),
|
|
480
|
-
phase TEXT NOT NULL,
|
|
481
|
-
question TEXT NOT NULL,
|
|
482
|
-
why_now TEXT NOT NULL,
|
|
483
|
-
recommendation TEXT NOT NULL,
|
|
484
|
-
options_json TEXT NOT NULL DEFAULT '[]',
|
|
485
|
-
evidence_refs_json TEXT NOT NULL DEFAULT '[]',
|
|
486
|
-
dependency_ids_json TEXT NOT NULL DEFAULT '[]',
|
|
487
|
-
effects_json TEXT NOT NULL DEFAULT '{}',
|
|
488
|
-
blocking INTEGER NOT NULL DEFAULT 1 CHECK (blocking IN (0, 1)),
|
|
489
|
-
status TEXT NOT NULL DEFAULT 'open'
|
|
490
|
-
CHECK (status IN ('open', 'answered', 'delegated', 'deferred', 'superseded')),
|
|
491
|
-
resolution_json TEXT NOT NULL DEFAULT '{}',
|
|
492
|
-
supersedes_id TEXT REFERENCES decision_items(id) ON DELETE SET NULL,
|
|
493
|
-
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
494
|
-
updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
495
|
-
resolved_at TEXT,
|
|
496
|
-
UNIQUE (thread_id, sequence)
|
|
497
|
-
);
|
|
498
|
-
|
|
499
|
-
CREATE UNIQUE INDEX IF NOT EXISTS decision_items_one_open
|
|
500
|
-
ON decision_items(thread_id) WHERE status = 'open';
|
|
501
|
-
CREATE INDEX IF NOT EXISTS decision_items_status
|
|
502
|
-
ON decision_items(thread_id, status, sequence);
|
|
503
|
-
|
|
504
|
-
-- ──────────────────────────── public kernel checkpoints ─────────────────
|
|
505
|
-
-- These rows record what the model actually checkpointed. They do not
|
|
506
|
-
-- authorize a fixed workflow sequence. Drafts remain editable; an accepted
|
|
507
|
-
-- revision is immutable and can only be superseded by a later revision.
|
|
508
|
-
CREATE TABLE IF NOT EXISTS stage_checkpoints (
|
|
509
|
-
id TEXT PRIMARY KEY,
|
|
510
|
-
stage TEXT NOT NULL
|
|
511
|
-
CHECK (stage IN ('init', 'research', 'change', 'plan', 'dev', 'test', 'review', 'deliver')),
|
|
512
|
-
scope_type TEXT NOT NULL CHECK (scope_type IN ('project', 'baseline', 'change', 'task')),
|
|
513
|
-
scope_id TEXT NOT NULL,
|
|
514
|
-
revision INTEGER NOT NULL CHECK (revision > 0),
|
|
515
|
-
status TEXT NOT NULL DEFAULT 'draft'
|
|
516
|
-
CHECK (status IN ('draft', 'accepted', 'superseded')),
|
|
517
|
-
payload_json TEXT NOT NULL DEFAULT '{}',
|
|
518
|
-
evidence_json TEXT NOT NULL DEFAULT '[]',
|
|
519
|
-
diagnostics_json TEXT NOT NULL DEFAULT '[]',
|
|
520
|
-
context_envelope_id TEXT,
|
|
521
|
-
digest TEXT NOT NULL,
|
|
522
|
-
supersedes_id TEXT REFERENCES stage_checkpoints(id) ON DELETE SET NULL,
|
|
523
|
-
idempotency_key TEXT NOT NULL UNIQUE,
|
|
524
|
-
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
525
|
-
updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
526
|
-
accepted_at TEXT,
|
|
527
|
-
UNIQUE(stage, scope_type, scope_id, revision)
|
|
528
|
-
);
|
|
529
|
-
|
|
530
|
-
CREATE INDEX IF NOT EXISTS stage_checkpoints_scope
|
|
531
|
-
ON stage_checkpoints(stage, scope_type, scope_id, revision);
|
|
532
|
-
CREATE UNIQUE INDEX IF NOT EXISTS stage_checkpoints_one_draft
|
|
533
|
-
ON stage_checkpoints(stage, scope_type, scope_id) WHERE status = 'draft';
|
|
534
|
-
CREATE UNIQUE INDEX IF NOT EXISTS stage_checkpoints_one_accepted
|
|
535
|
-
ON stage_checkpoints(stage, scope_type, scope_id) WHERE status = 'accepted';
|
|
536
|
-
|
|
537
|
-
CREATE TABLE IF NOT EXISTS decision_records (
|
|
538
|
-
id TEXT PRIMARY KEY,
|
|
539
|
-
scope_type TEXT NOT NULL CHECK (scope_type IN ('baseline', 'change')),
|
|
540
|
-
scope_id TEXT NOT NULL,
|
|
541
|
-
question TEXT NOT NULL,
|
|
542
|
-
recommendation TEXT NOT NULL,
|
|
543
|
-
selection TEXT NOT NULL,
|
|
544
|
-
effects_json TEXT NOT NULL DEFAULT '{}',
|
|
545
|
-
non_goals_json TEXT NOT NULL DEFAULT '[]',
|
|
546
|
-
owner TEXT NOT NULL,
|
|
547
|
-
source TEXT NOT NULL,
|
|
548
|
-
provenance_json TEXT NOT NULL DEFAULT '{}',
|
|
549
|
-
applied_refs_json TEXT NOT NULL DEFAULT '[]',
|
|
550
|
-
status TEXT NOT NULL DEFAULT 'accepted'
|
|
551
|
-
CHECK (status IN ('accepted', 'superseded', 'cancelled')),
|
|
552
|
-
digest TEXT NOT NULL,
|
|
553
|
-
artifact_path TEXT NOT NULL,
|
|
554
|
-
supersedes_id TEXT REFERENCES decision_records(id) ON DELETE SET NULL,
|
|
555
|
-
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
556
|
-
updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
|
|
557
|
-
);
|
|
558
|
-
|
|
559
|
-
CREATE INDEX IF NOT EXISTS decision_records_scope
|
|
560
|
-
ON decision_records(scope_type, scope_id, status, updated_at);
|
|
561
|
-
|
|
562
|
-
CREATE TABLE IF NOT EXISTS context_envelopes (
|
|
563
|
-
id TEXT PRIMARY KEY,
|
|
564
|
-
stage TEXT NOT NULL,
|
|
565
|
-
scope_type TEXT NOT NULL CHECK (scope_type IN ('project', 'baseline', 'change', 'task')),
|
|
566
|
-
scope_id TEXT NOT NULL,
|
|
567
|
-
digest TEXT NOT NULL UNIQUE,
|
|
568
|
-
file_digest TEXT NOT NULL,
|
|
569
|
-
payload_json TEXT NOT NULL,
|
|
570
|
-
artifact_path TEXT,
|
|
571
|
-
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
|
|
572
|
-
);
|
|
573
|
-
|
|
574
|
-
CREATE INDEX IF NOT EXISTS context_envelopes_scope
|
|
575
|
-
ON context_envelopes(stage, scope_type, scope_id, created_at);
|
|
576
|
-
|
|
577
|
-
CREATE TABLE IF NOT EXISTS worker_packets (
|
|
578
|
-
id TEXT PRIMARY KEY,
|
|
579
|
-
role TEXT NOT NULL,
|
|
580
|
-
scope_type TEXT NOT NULL CHECK (scope_type IN ('change', 'task')),
|
|
581
|
-
scope_id TEXT NOT NULL,
|
|
582
|
-
context_envelope_id TEXT NOT NULL REFERENCES context_envelopes(id),
|
|
583
|
-
context_digest TEXT NOT NULL,
|
|
584
|
-
task_digest TEXT,
|
|
585
|
-
decision_digest TEXT,
|
|
586
|
-
packet_digest TEXT NOT NULL UNIQUE,
|
|
587
|
-
file_digest TEXT NOT NULL,
|
|
588
|
-
status TEXT NOT NULL DEFAULT 'pending'
|
|
589
|
-
CHECK (status IN ('pending', 'assigned', 'abandoned')),
|
|
590
|
-
packet_path TEXT NOT NULL,
|
|
591
|
-
output_path TEXT NOT NULL,
|
|
592
|
-
assigned_at TEXT,
|
|
593
|
-
abandoned_at TEXT,
|
|
594
|
-
abandon_reason TEXT,
|
|
595
|
-
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
|
|
596
|
-
);
|
|
597
|
-
|
|
598
|
-
CREATE INDEX IF NOT EXISTS worker_packets_scope
|
|
599
|
-
ON worker_packets(role, scope_type, scope_id, created_at);
|
|
600
|
-
|
|
601
|
-
-- ──────────────────────────── seed: schema_version ────────────────────────
|
|
602
|
-
INSERT OR IGNORE INTO schema_version (version, description)
|
|
603
|
-
VALUES ('4.5', 'Phase 2 initial — tasks/events/sessions/schema_version/migration_history/telemetry/specs_refs');
|
|
604
|
-
INSERT OR IGNORE INTO schema_version (version, description)
|
|
605
|
-
VALUES ('5.2', 'Phase 5.2 — circuit_breaker table for per-task trip tracking');
|
|
606
|
-
INSERT OR IGNORE INTO schema_version (version, description)
|
|
607
|
-
VALUES ('8A.1', 'Phase 8A.1 — tasks.parent_id for task.expand parent→children');
|
|
608
|
-
INSERT OR IGNORE INTO schema_version (version, description)
|
|
609
|
-
VALUES ('8A.2', 'Phase 8A.2 — tasks.estimated_days preserved across MCP and v4.4 migration');
|
|
610
|
-
INSERT OR IGNORE INTO schema_version (version, description)
|
|
611
|
-
VALUES ('9.0', 'Continuous change units, context snapshots, trace links, incidents, projection outbox, and durable consumers');
|
|
612
|
-
INSERT OR IGNORE INTO schema_version (version, description)
|
|
613
|
-
VALUES ('9.1', 'Kimi runtime support in durable events and sessions');
|
|
614
|
-
INSERT OR IGNORE INTO schema_version (version, description)
|
|
615
|
-
VALUES ('10.0', 'Role-scoped context snapshots, deterministic breadcrumbs, and approval-gated specification learning');
|
|
616
|
-
INSERT OR IGNORE INTO schema_version (version, description)
|
|
617
|
-
VALUES ('11.0', 'Greenfield and brownfield baseline adoption, convergence, and drift authority');
|
|
618
|
-
INSERT OR IGNORE INTO schema_version (version, description)
|
|
619
|
-
VALUES ('12.0', 'Evidence-backed repository snapshots, gap ledger, safe re-adoption, and incident break-glass governance');
|
|
620
|
-
INSERT OR IGNORE INTO schema_version (version, description)
|
|
621
|
-
VALUES ('13.0', 'Durable cross-stage workflow runs, step evidence, output digests, blockers, and recovery');
|
|
622
|
-
INSERT OR IGNORE INTO schema_version (version, description)
|
|
623
|
-
VALUES ('14.0', 'Continuously revalidated baseline authority and persisted known-red acceptance');
|
|
624
|
-
INSERT OR IGNORE INTO schema_version (version, description)
|
|
625
|
-
VALUES ('15.0', 'Typed research semantics, complete change contracts, verified learning application, and reconciliation provenance');
|
|
626
|
-
INSERT OR IGNORE INTO schema_version (version, description)
|
|
627
|
-
VALUES ('16.0', 'Durable one-question decision dialogue, owner checkpoints, and workflow alignment gates');
|
|
628
|
-
INSERT OR IGNORE INTO schema_version (version, description)
|
|
629
|
-
VALUES ('17.0', 'Explicit unborn Git authority and owner-authorized baseline checkpoints');
|
|
630
|
-
INSERT OR IGNORE INTO schema_version (version, description)
|
|
631
|
-
VALUES ('18.0', 'Adaptive capability transitions, independent initialization, and recoverable workflow migration');
|
|
632
|
-
INSERT OR IGNORE INTO schema_version (version, description)
|
|
633
|
-
VALUES ('19.0', 'Non-ceremonial decision completion and host-neutral intent persistence');
|
|
634
|
-
INSERT OR IGNORE INTO schema_version (version, description)
|
|
635
|
-
VALUES ('20.0', 'Typed artifact registry, normalized dependency edges, and orphan diagnostics');
|
|
636
|
-
INSERT OR IGNORE INTO schema_version (version, description)
|
|
637
|
-
VALUES ('21.0', 'Seven-tool persistence kernel, reversible stage checkpoints, canonical context envelopes, normalized decisions, and worker packets');
|
|
638
|
-
INSERT OR IGNORE INTO schema_version (version, description)
|
|
639
|
-
VALUES ('22.0', 'Checkpoint-native baseline authority plus byte-bound Context Envelopes and Worker Packets');
|
|
640
|
-
INSERT OR IGNORE INTO schema_version (version, description)
|
|
641
|
-
VALUES ('23.0', 'Open semantic vocabularies, mutable Change drafts, and linked immutable-archive successors');
|