ultra-builder-pro-cli 0.23.0 → 0.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/.ultra-template/docs/research/README.md +4 -4
  2. package/CHANGELOG.md +45 -0
  3. package/README.md +21 -18
  4. package/adapters/_shared/codex-assets.cjs +121 -65
  5. package/adapters/_shared/interaction-contract.cjs +7 -1
  6. package/adapters/_shared/provenance.cjs +7 -2
  7. package/adapters/_shared/runtime-assets.cjs +3 -2
  8. package/adapters/_shared/runtime-native.cjs +132 -0
  9. package/adapters/claude.js +60 -30
  10. package/adapters/codex.js +178 -81
  11. package/adapters/grok.js +372 -0
  12. package/adapters/kimi.js +7 -3
  13. package/adapters/opencode.js +210 -32
  14. package/agents/code-reviewer.md +4 -2
  15. package/agents/debugger.md +4 -1
  16. package/agents/review-code.md +7 -3
  17. package/agents/review-comments.md +7 -4
  18. package/agents/review-coordinator.md +11 -7
  19. package/agents/review-design.md +8 -4
  20. package/agents/review-errors.md +8 -4
  21. package/agents/review-spec.md +8 -5
  22. package/agents/review-tests.md +7 -4
  23. package/agents/tdd-runner.md +5 -2
  24. package/bin/install.js +9 -4
  25. package/bin/orchestrator.js +4 -13
  26. package/docs/AGENT-CONTEXT.md +141 -229
  27. package/docs/ARCHITECTURE.md +203 -494
  28. package/docs/ARTIFACT-AUTHORITY.md +26 -22
  29. package/docs/PLUGIN-ISOLATION-CONTRACT.md +12 -9
  30. package/docs/ROADMAP.md +85 -110
  31. package/docs/RUNTIME-COMPAT-MATRIX.md +139 -175
  32. package/docs/SKILL-AUTHORING.md +3 -3
  33. package/docs/STATE-DB-ACCESS-POLICY.md +13 -8
  34. package/docs/WORKFLOW-LIFECYCLE.md +174 -448
  35. package/hooks/README.md +11 -8
  36. package/hooks/active_task_context.py +16 -16
  37. package/hooks/adapters/grok.py +134 -0
  38. package/hooks/{context_spine.py → context_envelope.py} +26 -22
  39. package/hooks/health_check.py +19 -29
  40. package/hooks/pre_stop_check.py +22 -12
  41. package/hooks/subagent_tracker.py +1 -1
  42. package/hooks/workflow_checkpoint.py +14 -13
  43. package/hooks/workflow_context.py +11 -12
  44. package/hooks/workflow_resume.py +14 -13
  45. package/mcp-server/{breadcrumb.cjs → hook-context.cjs} +7 -9
  46. package/mcp-server/lib/baseline-workflow.cjs +36 -38
  47. package/mcp-server/lib/canonical-json.cjs +19 -0
  48. package/mcp-server/lib/change-workflow.cjs +596 -44
  49. package/mcp-server/lib/context-envelope.cjs +508 -0
  50. package/mcp-server/lib/decision-records.cjs +337 -0
  51. package/mcp-server/lib/doctor.cjs +91 -33
  52. package/mcp-server/lib/init-project.cjs +78 -39
  53. package/mcp-server/lib/managed-file-write.cjs +116 -0
  54. package/mcp-server/lib/plan-checkpoint.cjs +177 -0
  55. package/mcp-server/lib/project-context.cjs +178 -0
  56. package/mcp-server/lib/stage-checkpoints.cjs +309 -0
  57. package/mcp-server/lib/state-db.cjs +155 -24
  58. package/mcp-server/lib/task-ledger.cjs +522 -13
  59. package/mcp-server/lib/ultra-facade.cjs +630 -442
  60. package/mcp-server/lib/worker-packet.cjs +358 -0
  61. package/mcp-server/server.cjs +200 -1103
  62. package/orchestrator/daemon.cjs +27 -9
  63. package/orchestrator/parallel-orchestrator.cjs +111 -76
  64. package/orchestrator/session-runner.cjs +135 -34
  65. package/package.json +10 -3
  66. package/skills/ultra-change/SKILL.md +9 -8
  67. package/skills/ultra-deliver/SKILL.md +3 -3
  68. package/skills/ultra-dev/SKILL.md +18 -11
  69. package/skills/ultra-doctor/SKILL.md +2 -2
  70. package/skills/ultra-init/SKILL.md +6 -5
  71. package/skills/ultra-init/references/brownfield-adoption.md +11 -8
  72. package/skills/ultra-plan/SKILL.md +10 -8
  73. package/skills/ultra-research/SKILL.md +12 -7
  74. package/skills/ultra-review/SKILL.md +9 -6
  75. package/skills/ultra-review/references/unified-schema.md +2 -0
  76. package/skills/ultra-review/scripts/review_wait.py +8 -0
  77. package/skills/ultra-status/SKILL.md +2 -2
  78. package/skills/ultra-test/SKILL.md +4 -2
  79. package/skills/ultra-think/SKILL.md +7 -7
  80. package/skills/ultra-think/references/interaction-boundary.md +56 -0
  81. package/spec/cli-protocol.md +80 -199
  82. package/spec/mcp-tools.yaml +37 -2804
  83. package/spec/schemas/state-db.sql +107 -4
  84. package/spec/schemas/{task-ledger.v1.schema.json → task-ledger.v2.schema.json} +70 -6
  85. package/ultra-tools/commands/status.cjs +369 -243
  86. package/mcp-server/lib/context-spine.cjs +0 -1208
  87. package/mcp-server/lib/decision-dialogue.cjs +0 -1128
  88. package/mcp-server/lib/project-breadcrumb.cjs +0 -173
  89. package/mcp-server/lib/spec-learning.cjs +0 -284
  90. package/mcp-server/lib/workflow-state.cjs +0 -3129
  91. package/skills/ultra-think/references/decision-dialogue.md +0 -155
@@ -1,7 +1,8 @@
1
1
  -- Ultra Builder Pro — authoritative state schema
2
2
  -- This file builds .ultra/.runtime/state.db, the source of truth for all
3
- -- baseline / change / task / session / event / telemetry data. tasks.json and context md status
4
- -- headers are projections.
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.
5
6
  --
6
7
  -- Authority boundary: docs/DECISIONS.md.
7
8
  --
@@ -42,6 +43,7 @@ CREATE TABLE IF NOT EXISTS baselines (
42
43
  classification_json TEXT NOT NULL DEFAULT '{}',
43
44
  provider_refs_json TEXT NOT NULL DEFAULT '{}',
44
45
  research_run_id TEXT,
46
+ research_checkpoint_id TEXT,
45
47
  approved_by TEXT,
46
48
  approval_note TEXT,
47
49
  started_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
@@ -130,7 +132,7 @@ CREATE TABLE IF NOT EXISTS events (
130
132
  task_id TEXT,
131
133
  change_id TEXT,
132
134
  session_id TEXT,
133
- runtime TEXT CHECK (runtime IS NULL OR runtime IN ('claude', 'opencode', 'codex', 'kimi')),
135
+ runtime TEXT CHECK (runtime IS NULL OR runtime IN ('claude', 'opencode', 'codex', 'kimi', 'grok')),
134
136
  payload_json TEXT
135
137
  );
136
138
 
@@ -146,7 +148,7 @@ CREATE INDEX IF NOT EXISTS events_change ON events(change_id, id);
146
148
  CREATE TABLE IF NOT EXISTS sessions (
147
149
  sid TEXT PRIMARY KEY,
148
150
  task_id TEXT NOT NULL REFERENCES tasks(id),
149
- runtime TEXT NOT NULL CHECK (runtime IN ('claude', 'opencode', 'codex', 'kimi')),
151
+ runtime TEXT NOT NULL CHECK (runtime IN ('claude', 'opencode', 'codex', 'kimi', 'grok')),
150
152
  pid INTEGER,
151
153
  worktree_path TEXT NOT NULL,
152
154
  artifact_dir TEXT NOT NULL,
@@ -497,6 +499,103 @@ CREATE UNIQUE INDEX IF NOT EXISTS decision_items_one_open
497
499
  CREATE INDEX IF NOT EXISTS decision_items_status
498
500
  ON decision_items(thread_id, status, sequence);
499
501
 
502
+ -- ──────────────────────────── public kernel checkpoints ─────────────────
503
+ -- These rows record what the model actually checkpointed. They do not
504
+ -- authorize a fixed workflow sequence. Drafts remain editable; an accepted
505
+ -- revision is immutable and can only be superseded by a later revision.
506
+ CREATE TABLE IF NOT EXISTS stage_checkpoints (
507
+ id TEXT PRIMARY KEY,
508
+ stage TEXT NOT NULL
509
+ CHECK (stage IN ('init', 'research', 'change', 'plan', 'dev', 'test', 'review', 'deliver')),
510
+ scope_type TEXT NOT NULL CHECK (scope_type IN ('project', 'baseline', 'change', 'task')),
511
+ scope_id TEXT NOT NULL,
512
+ revision INTEGER NOT NULL CHECK (revision > 0),
513
+ status TEXT NOT NULL DEFAULT 'draft'
514
+ CHECK (status IN ('draft', 'accepted', 'superseded')),
515
+ payload_json TEXT NOT NULL DEFAULT '{}',
516
+ evidence_json TEXT NOT NULL DEFAULT '[]',
517
+ diagnostics_json TEXT NOT NULL DEFAULT '[]',
518
+ context_envelope_id TEXT,
519
+ digest TEXT NOT NULL,
520
+ supersedes_id TEXT REFERENCES stage_checkpoints(id) ON DELETE SET NULL,
521
+ idempotency_key TEXT NOT NULL UNIQUE,
522
+ created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
523
+ updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
524
+ accepted_at TEXT,
525
+ UNIQUE(stage, scope_type, scope_id, revision)
526
+ );
527
+
528
+ CREATE INDEX IF NOT EXISTS stage_checkpoints_scope
529
+ ON stage_checkpoints(stage, scope_type, scope_id, revision);
530
+ CREATE UNIQUE INDEX IF NOT EXISTS stage_checkpoints_one_draft
531
+ ON stage_checkpoints(stage, scope_type, scope_id) WHERE status = 'draft';
532
+ CREATE UNIQUE INDEX IF NOT EXISTS stage_checkpoints_one_accepted
533
+ ON stage_checkpoints(stage, scope_type, scope_id) WHERE status = 'accepted';
534
+
535
+ CREATE TABLE IF NOT EXISTS decision_records (
536
+ id TEXT PRIMARY KEY,
537
+ scope_type TEXT NOT NULL CHECK (scope_type IN ('baseline', 'change')),
538
+ scope_id TEXT NOT NULL,
539
+ question TEXT NOT NULL,
540
+ recommendation TEXT NOT NULL,
541
+ selection TEXT NOT NULL,
542
+ effects_json TEXT NOT NULL DEFAULT '{}',
543
+ non_goals_json TEXT NOT NULL DEFAULT '[]',
544
+ owner TEXT NOT NULL,
545
+ source TEXT NOT NULL,
546
+ provenance_json TEXT NOT NULL DEFAULT '{}',
547
+ applied_refs_json TEXT NOT NULL DEFAULT '[]',
548
+ status TEXT NOT NULL DEFAULT 'accepted'
549
+ CHECK (status IN ('accepted', 'superseded', 'cancelled')),
550
+ digest TEXT NOT NULL,
551
+ artifact_path TEXT NOT NULL,
552
+ supersedes_id TEXT REFERENCES decision_records(id) ON DELETE SET NULL,
553
+ created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
554
+ updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
555
+ );
556
+
557
+ CREATE INDEX IF NOT EXISTS decision_records_scope
558
+ ON decision_records(scope_type, scope_id, status, updated_at);
559
+
560
+ CREATE TABLE IF NOT EXISTS context_envelopes (
561
+ id TEXT PRIMARY KEY,
562
+ stage TEXT NOT NULL,
563
+ scope_type TEXT NOT NULL CHECK (scope_type IN ('project', 'baseline', 'change', 'task')),
564
+ scope_id TEXT NOT NULL,
565
+ digest TEXT NOT NULL UNIQUE,
566
+ file_digest TEXT NOT NULL,
567
+ payload_json TEXT NOT NULL,
568
+ artifact_path TEXT,
569
+ created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
570
+ );
571
+
572
+ CREATE INDEX IF NOT EXISTS context_envelopes_scope
573
+ ON context_envelopes(stage, scope_type, scope_id, created_at);
574
+
575
+ CREATE TABLE IF NOT EXISTS worker_packets (
576
+ id TEXT PRIMARY KEY,
577
+ role TEXT NOT NULL,
578
+ scope_type TEXT NOT NULL CHECK (scope_type IN ('change', 'task')),
579
+ scope_id TEXT NOT NULL,
580
+ context_envelope_id TEXT NOT NULL REFERENCES context_envelopes(id),
581
+ context_digest TEXT NOT NULL,
582
+ task_digest TEXT,
583
+ decision_digest TEXT,
584
+ packet_digest TEXT NOT NULL UNIQUE,
585
+ file_digest TEXT NOT NULL,
586
+ status TEXT NOT NULL DEFAULT 'pending'
587
+ CHECK (status IN ('pending', 'assigned', 'abandoned')),
588
+ packet_path TEXT NOT NULL,
589
+ output_path TEXT NOT NULL,
590
+ assigned_at TEXT,
591
+ abandoned_at TEXT,
592
+ abandon_reason TEXT,
593
+ created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
594
+ );
595
+
596
+ CREATE INDEX IF NOT EXISTS worker_packets_scope
597
+ ON worker_packets(role, scope_type, scope_id, created_at);
598
+
500
599
  -- ──────────────────────────── seed: schema_version ────────────────────────
501
600
  INSERT OR IGNORE INTO schema_version (version, description)
502
601
  VALUES ('4.5', 'Phase 2 initial — tasks/events/sessions/schema_version/migration_history/telemetry/specs_refs');
@@ -532,3 +631,7 @@ INSERT OR IGNORE INTO schema_version (version, description)
532
631
  VALUES ('19.0', 'Non-ceremonial decision completion and host-neutral intent persistence');
533
632
  INSERT OR IGNORE INTO schema_version (version, description)
534
633
  VALUES ('20.0', 'Typed artifact registry, normalized dependency edges, and orphan diagnostics');
634
+ INSERT OR IGNORE INTO schema_version (version, description)
635
+ VALUES ('21.0', 'Seven-tool persistence kernel, reversible stage checkpoints, canonical context envelopes, normalized decisions, and worker packets');
636
+ INSERT OR IGNORE INTO schema_version (version, description)
637
+ VALUES ('22.0', 'Checkpoint-native baseline authority plus byte-bound Context Envelopes and Worker Packets');
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://ultra-builder-pro.dev/spec/task-ledger.v1.schema.json",
4
- "title": "Ultra team task ledger v1",
5
- "description": "Git-facing checkpoint ledger for durable task contracts and statuses. Live sessions, leases, worktrees, and in-progress ownership remain in .ultra/.runtime/state.db.",
3
+ "$id": "https://ultra-builder-pro.dev/spec/task-ledger.v2.schema.json",
4
+ "title": "Ultra team authority ledger v2",
5
+ "description": "Git-facing checkpoint ledger for durable baseline, Change, decision, Stage Checkpoint, and task authority. Live sessions, leases, worktrees, and in-progress ownership remain in .ultra/.runtime/state.db.",
6
6
  "type": "object",
7
7
  "required": [
8
8
  "kind",
@@ -15,12 +15,14 @@
15
15
  "reason",
16
16
  "baseline",
17
17
  "changes",
18
+ "decisions",
19
+ "checkpoints",
18
20
  "tasks"
19
21
  ],
20
22
  "additionalProperties": false,
21
23
  "properties": {
22
24
  "kind": { "const": "ultra-team-task-ledger" },
23
- "schema_version": { "const": "1.0" },
25
+ "schema_version": { "const": "2.0" },
24
26
  "generation": { "type": "integer", "minimum": 0 },
25
27
  "parent_digest": {
26
28
  "type": ["string", "null"],
@@ -66,7 +68,7 @@
66
68
  "id": { "type": "string" },
67
69
  "title": { "type": "string", "minLength": 1 },
68
70
  "kind": { "type": "string", "enum": ["quick", "standard", "major", "incident"] },
69
- "status": { "type": "string", "enum": ["active", "blocked", "ready", "archived", "cancelled"] },
71
+ "status": { "type": "string", "enum": ["active", "archived", "cancelled"] },
70
72
  "intent": { "type": "string", "minLength": 1 },
71
73
  "docs_impact": { "type": "object" },
72
74
  "provider_refs": { "type": "object" },
@@ -86,6 +88,68 @@
86
88
  }
87
89
  }
88
90
  },
91
+ "decisions": {
92
+ "type": "array",
93
+ "items": {
94
+ "type": "object",
95
+ "required": [
96
+ "id",
97
+ "scope_type",
98
+ "scope_id",
99
+ "selection",
100
+ "effects",
101
+ "status",
102
+ "artifact_path",
103
+ "artifact_digest",
104
+ "digest"
105
+ ],
106
+ "additionalProperties": false,
107
+ "properties": {
108
+ "id": { "type": "string", "minLength": 1 },
109
+ "scope_type": { "type": "string", "enum": ["baseline", "change"] },
110
+ "scope_id": { "type": "string", "minLength": 1 },
111
+ "selection": { "type": "string", "minLength": 1 },
112
+ "effects": { "type": "object" },
113
+ "status": { "type": "string", "enum": ["accepted", "superseded"] },
114
+ "artifact_path": { "type": "string", "minLength": 1 },
115
+ "artifact_digest": { "type": "string", "pattern": "^[0-9a-f]{64}$" },
116
+ "supersedes_id": { "type": "string" },
117
+ "digest": { "type": "string", "pattern": "^[0-9a-f]{64}$" }
118
+ }
119
+ }
120
+ },
121
+ "checkpoints": {
122
+ "type": "array",
123
+ "items": {
124
+ "type": "object",
125
+ "required": [
126
+ "stage",
127
+ "scope_type",
128
+ "scope_id",
129
+ "revision",
130
+ "payload",
131
+ "evidence",
132
+ "diagnostics",
133
+ "status",
134
+ "digest"
135
+ ],
136
+ "additionalProperties": false,
137
+ "properties": {
138
+ "stage": {
139
+ "type": "string",
140
+ "enum": ["init", "research", "change", "plan", "dev", "test", "review", "deliver"]
141
+ },
142
+ "scope_type": { "type": "string", "enum": ["project", "baseline", "change", "task"] },
143
+ "scope_id": { "type": "string", "minLength": 1 },
144
+ "revision": { "type": "integer", "minimum": 1 },
145
+ "payload": { "type": "object" },
146
+ "evidence": { "type": "array" },
147
+ "diagnostics": { "type": "array" },
148
+ "status": { "const": "accepted" },
149
+ "digest": { "type": "string", "pattern": "^[0-9a-f]{64}$" }
150
+ }
151
+ }
152
+ },
89
153
  "tasks": {
90
154
  "type": "array",
91
155
  "items": { "$ref": "#/$defs/task" }
@@ -145,7 +209,7 @@
145
209
  "gaps": { "type": "array" },
146
210
  "classification": { "type": "object" },
147
211
  "provider_refs": { "type": "object" },
148
- "research_run_id": { "type": "string" },
212
+ "research_checkpoint_id": { "type": "string" },
149
213
  "approved_by": { "type": "string" },
150
214
  "approval_note": { "type": "string" },
151
215
  "converged_at": { "type": "string" },