ultra-builder-pro-cli 0.25.0 → 0.26.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.
- package/.ultra-template/contexts/TEMPLATE.md +87 -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 +49 -0
- 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 +323 -0
- package/bin/delegate.cjs +456 -0
- package/bin/install.js +38 -11
- package/docs/ARCHITECTURE.md +122 -216
- package/docs/ARTIFACT-AUTHORITY.md +90 -268
- package/docs/DECISIONS.md +75 -87
- package/docs/PHILOSOPHY.md +177 -0
- package/docs/PLUGIN-ISOLATION-CONTRACT.md +62 -39
- package/docs/RUNTIME-COMPAT-MATRIX.md +99 -156
- package/docs/SKILL-AUTHORING.md +94 -73
- package/docs/WORKFLOW-LIFECYCLE.md +93 -189
- package/hooks/README.md +17 -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 +95 -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 +97 -50
- package/skills/ultra-change/references/change-contract.md +40 -1
- package/skills/ultra-delegate/SKILL.md +82 -0
- package/skills/ultra-delegate/references/delegation-contract.md +51 -0
- package/skills/ultra-delegate/scripts/delegate_wait.py +86 -0
- package/skills/ultra-deliver/SKILL.md +61 -42
- package/skills/ultra-deliver/references/baseline-reconciliation.md +39 -20
- package/skills/ultra-dev/SKILL.md +96 -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 +79 -0
- package/skills/ultra-init/SKILL.md +94 -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 +88 -68
- package/skills/ultra-research/SKILL.md +62 -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 +59 -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 +70 -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 -1687
- 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
package/spec/mcp-tools.yaml
DELETED
|
@@ -1,312 +0,0 @@
|
|
|
1
|
-
# Ultra Builder Pro — MCP tool contracts
|
|
2
|
-
# Single source for tool name, schema, errors, and CLI mapping.
|
|
3
|
-
# Validated by spec/schemas/mcp-tools.schema.json (run `npm run test:spec`).
|
|
4
|
-
# Current authority boundary: docs/DECISIONS.md.
|
|
5
|
-
|
|
6
|
-
version: '2.0'
|
|
7
|
-
|
|
8
|
-
info:
|
|
9
|
-
title: Ultra Builder Pro MCP tool contracts
|
|
10
|
-
phase: '24'
|
|
11
|
-
trace_to: 'docs/DECISIONS.md and mcp-server/server.cjs'
|
|
12
|
-
notes: |
|
|
13
|
-
This published contract contains only tools registered by the MCP server.
|
|
14
|
-
Host-native review, impact, skill discovery, and human-interaction capabilities
|
|
15
|
-
are documented by each adapter's capability map rather than advertised as MCP.
|
|
16
|
-
Generators consume this YAML to derive types, validators, and CLI parsers.
|
|
17
|
-
cli_subcommand values reserve stable names. Skills adapt semantic workflows;
|
|
18
|
-
MCP persists facts, creates immutable checkpoints, and protects only transactional
|
|
19
|
-
safety boundaries.
|
|
20
|
-
Adding a tool requires: (a) update this file, (b) add valid+invalid
|
|
21
|
-
fixture to spec/fixtures/{valid,invalid}/, (c) `npm run test:spec` green.
|
|
22
|
-
|
|
23
|
-
families:
|
|
24
|
-
- { name: ultra, description: 'model-facing persistence and safety kernel', phase: '24' }
|
|
25
|
-
|
|
26
|
-
tools:
|
|
27
|
-
|
|
28
|
-
# ───────────────────── public model-facing kernel ─────────────────────
|
|
29
|
-
- name: ultra.context
|
|
30
|
-
family: ultra
|
|
31
|
-
description: Read one bounded canonical Context Envelope. This tool is side-effect free and reports diagnostics without choosing the next semantic action.
|
|
32
|
-
phase: '24'
|
|
33
|
-
readonly: true
|
|
34
|
-
writer_role: mcp
|
|
35
|
-
input_schema:
|
|
36
|
-
type: object
|
|
37
|
-
additionalProperties: false
|
|
38
|
-
properties:
|
|
39
|
-
stage: { type: string, enum: [project, research, plan, dev, test, review, deliver] }
|
|
40
|
-
scope:
|
|
41
|
-
type: object
|
|
42
|
-
additionalProperties: false
|
|
43
|
-
properties:
|
|
44
|
-
change_id: { type: string, minLength: 1 }
|
|
45
|
-
task_id: { type: string, minLength: 1 }
|
|
46
|
-
detail: { type: string, enum: [summary, full] }
|
|
47
|
-
output_schema: { type: object }
|
|
48
|
-
errors:
|
|
49
|
-
- { code: VALIDATION_ERROR, description: 'input failed structural validation' }
|
|
50
|
-
- { code: STATE_CORRUPT, description: 'local authority cannot be read safely' }
|
|
51
|
-
cli_subcommand: 'ultra context'
|
|
52
|
-
|
|
53
|
-
- name: ultra.record
|
|
54
|
-
family: ultra
|
|
55
|
-
description: Record one or more typed draft facts or actions with per-entry idempotency. Entry data is checked against its kind/action contract so one invalid batch item can return a mutable diagnostic without hiding the other results.
|
|
56
|
-
phase: '24'
|
|
57
|
-
writer_role: mcp
|
|
58
|
-
input_schema:
|
|
59
|
-
type: object
|
|
60
|
-
required: [entries]
|
|
61
|
-
additionalProperties: false
|
|
62
|
-
properties:
|
|
63
|
-
entries:
|
|
64
|
-
type: array
|
|
65
|
-
minItems: 1
|
|
66
|
-
items:
|
|
67
|
-
type: object
|
|
68
|
-
required: [kind, action, data, idempotency_key]
|
|
69
|
-
additionalProperties: false
|
|
70
|
-
properties:
|
|
71
|
-
kind:
|
|
72
|
-
type: string
|
|
73
|
-
enum: [baseline, change_contract, decision, task_contract, task_outcome, artifact, event]
|
|
74
|
-
description: Selects the entry data contract. Task contracts own durable intent; Task outcomes own status and post-commit attestation.
|
|
75
|
-
action:
|
|
76
|
-
type: string
|
|
77
|
-
enum:
|
|
78
|
-
- initialize
|
|
79
|
-
- start
|
|
80
|
-
- observe
|
|
81
|
-
- accept
|
|
82
|
-
- open
|
|
83
|
-
- revise
|
|
84
|
-
- cancel
|
|
85
|
-
- supersede
|
|
86
|
-
- define
|
|
87
|
-
- remove
|
|
88
|
-
- complete
|
|
89
|
-
- block
|
|
90
|
-
- reopen
|
|
91
|
-
- attest_commit
|
|
92
|
-
- bind
|
|
93
|
-
- append
|
|
94
|
-
description: Valid actions are checked with kind at runtime; task_outcome uses start, block, reopen, complete, or attest_commit.
|
|
95
|
-
data:
|
|
96
|
-
type: object
|
|
97
|
-
description: |
|
|
98
|
-
Every kind/action selects one exact data contract. Unknown fields,
|
|
99
|
-
wrong scalar/container types, invalid closed mechanical enums,
|
|
100
|
-
malformed digests, and mismatched authority references return an entry-level mutable
|
|
101
|
-
VALIDATION_ERROR before SQLite or filesystem mutation.
|
|
102
|
-
|
|
103
|
-
baseline uses mode greenfield|brownfield; spec kinds
|
|
104
|
-
discovery|product|architecture|quality|delivery|other; evidence kinds
|
|
105
|
-
source|docs|runtime|test|deploy|external; verification status
|
|
106
|
-
pass|known_red|not_run; gap status open|accepted|resolved|deferred and
|
|
107
|
-
category baseline_blocker|documentation_drift|known_defect|
|
|
108
|
-
technical_debt|unknown|future_change. blocking and acceptance flags
|
|
109
|
-
are booleans, never truthy strings.
|
|
110
|
-
|
|
111
|
-
change_contract/open accepts a bounded caller-defined kind; quick,
|
|
112
|
-
standard, major, and incident are recommended Skill-level profiles,
|
|
113
|
-
docs_impact.status unknown|required|none, risk flags
|
|
114
|
-
public_contract|schema_migration|data_migration|authorization|
|
|
115
|
-
security|multi_module|external_integration|release_semantics are
|
|
116
|
-
recommended Skill-level labels rather than a closed MCP vocabulary, and
|
|
117
|
-
research status none|bounded|required with mode
|
|
118
|
-
product|feature|architecture|custom are likewise recommended profiles;
|
|
119
|
-
bounded repository-defined status, mode, and risk labels remain valid.
|
|
120
|
-
revise uses {id, patch};
|
|
121
|
-
cancel uses {id}. supersede uses an archived or cancelled source id,
|
|
122
|
-
a successor_id, and optional title/kind/intent overrides. Draft
|
|
123
|
-
semantic corrections remain reversible; immutable history creates a
|
|
124
|
-
linked active successor instead of reopening in place.
|
|
125
|
-
|
|
126
|
-
decision/accept has exact scope {baseline_id} or {change_id};
|
|
127
|
-
applied_refs items are exactly {ref, field, digest?}. effects and
|
|
128
|
-
provenance are JSON objects; non_goals is a string array.
|
|
129
|
-
|
|
130
|
-
Task contracts are structurally exact. task_contract/define requires
|
|
131
|
-
id, title, and bounded non-empty type and priority strings.
|
|
132
|
-
architecture|feature|bugfix and P0|P1|P2|P3 are recommended
|
|
133
|
-
Skill-level vocabulary, not SQLite business verdicts.
|
|
134
|
-
id matches [A-Za-z0-9_-]+ and title has at least 3 characters.
|
|
135
|
-
Optional complexity is integer 1..10, estimated_days is >0,
|
|
136
|
-
slice_kind is an optional bounded caller-defined string; tracer_bullet,
|
|
137
|
-
expand_contract, and integration_checkpoint are recommended profiles.
|
|
138
|
-
deps/files_modified are non-empty-string arrays, and
|
|
139
|
-
acceptance/context_refs are object arrays. task_contract/revise uses
|
|
140
|
-
{id, patch} and permits contract fields, including corrected
|
|
141
|
-
title/type, only. status, session_id, stale, tag, context_file, and
|
|
142
|
-
completion_commit are runtime-owned and forbidden in Task Contracts.
|
|
143
|
-
task_outcome start|block|reopen uses {id}. complete uses exactly
|
|
144
|
-
{id, packet_digest} with a 64-hex packet digest; patch and
|
|
145
|
-
completion_commit are forbidden.
|
|
146
|
-
After durable completion is synced and committed, attest_commit uses
|
|
147
|
-
exactly {id, completion_commit}; the commit is a full 40- or 64-hex
|
|
148
|
-
Git object id recorded as checkout-local proof.
|
|
149
|
-
|
|
150
|
-
artifact/bind uses owner_type project|baseline|change|task|workflow,
|
|
151
|
-
status current|stale|terminal|archived, 64-lowercase-hex content
|
|
152
|
-
digests, and exact reference items {type, id, relation}; type is
|
|
153
|
-
artifact|project|baseline|change|task|workflow|external. Current
|
|
154
|
-
public authority rejects workflow-owned legacy references.
|
|
155
|
-
|
|
156
|
-
event/append is exactly {type, task_id?, change_id?, session_id?,
|
|
157
|
-
runtime?, payload?}. Identifiers/runtime are strings or null and
|
|
158
|
-
payload is a JSON object.
|
|
159
|
-
idempotency_key: { type: string, minLength: 3 }
|
|
160
|
-
output_schema: { type: object }
|
|
161
|
-
errors:
|
|
162
|
-
- { code: VALIDATION_ERROR, description: 'input failed structural validation' }
|
|
163
|
-
- { code: STATE_CORRUPT, description: 'local authority cannot be updated safely' }
|
|
164
|
-
- { code: PATH_AUTHORITY_VIOLATION, description: 'a requested write escapes managed authority' }
|
|
165
|
-
cli_subcommand: 'ultra record'
|
|
166
|
-
emits_events: [ultra_facade_call]
|
|
167
|
-
|
|
168
|
-
- name: ultra.checkpoint
|
|
169
|
-
family: ultra
|
|
170
|
-
description: Commit one caller-declared stage checkpoint after validating scope, structure, idempotency, current file bytes, digests, and transactional publication. Semantic completeness remains a Skill/model judgment and is returned only as advisory diagnostics.
|
|
171
|
-
phase: '24'
|
|
172
|
-
writer_role: mcp
|
|
173
|
-
input_schema:
|
|
174
|
-
type: object
|
|
175
|
-
required: [stage, scope, payload, idempotency_key]
|
|
176
|
-
additionalProperties: false
|
|
177
|
-
properties:
|
|
178
|
-
stage: { type: string, enum: [research, plan, dev, test, review, deliver] }
|
|
179
|
-
scope:
|
|
180
|
-
type: object
|
|
181
|
-
additionalProperties: false
|
|
182
|
-
properties:
|
|
183
|
-
change_id: { type: string, minLength: 1 }
|
|
184
|
-
task_id: { type: string, minLength: 1 }
|
|
185
|
-
payload:
|
|
186
|
-
type: object
|
|
187
|
-
description: |
|
|
188
|
-
Stage-specific semantic fields remain model-owned. Kernel-owned evidence
|
|
189
|
-
is an object array whose kind/ref/summary/digest/artifact_id values are
|
|
190
|
-
strings when present. diagnostics is an exact object array with required
|
|
191
|
-
string code and optional string severity/message plus JSON details.
|
|
192
|
-
Evidence authority, current bytes, scope, checkpoint identity, and the
|
|
193
|
-
accepted receipt are validated atomically.
|
|
194
|
-
idempotency_key: { type: string, minLength: 3 }
|
|
195
|
-
output_schema: { type: object }
|
|
196
|
-
errors:
|
|
197
|
-
- { code: VALIDATION_ERROR, description: 'input failed structural validation' }
|
|
198
|
-
- { code: STATE_CORRUPT, description: 'local authority cannot be checkpointed safely' }
|
|
199
|
-
- { code: PATH_AUTHORITY_VIOLATION, description: 'checkpoint evidence escapes managed authority' }
|
|
200
|
-
- { code: CHECKPOINT_EVIDENCE_AUTHORITY_MISSING, description: 'declared checkpoint evidence is not current managed authority' }
|
|
201
|
-
- { code: CHECKPOINT_EVIDENCE_DIGEST_MISMATCH, description: 'declared checkpoint evidence bytes changed' }
|
|
202
|
-
- { code: CHECKPOINT_SCOPE_NOT_FOUND, description: 'the explicit Task or Change scope does not exist' }
|
|
203
|
-
- { code: CHECKPOINT_SCOPE_MISMATCH, description: 'the explicit Task does not belong to the supplied Change scope' }
|
|
204
|
-
cli_subcommand: 'ultra checkpoint'
|
|
205
|
-
emits_events: [ultra_checkpoint_accepted, ultra_checkpoint_rejected]
|
|
206
|
-
|
|
207
|
-
- name: ultra.sync
|
|
208
|
-
family: ultra
|
|
209
|
-
description: Inspect, import, or publish the Git team checkpoint while preserving local sessions and rejecting real concurrent team-state conflicts.
|
|
210
|
-
phase: '24'
|
|
211
|
-
writer_role: mcp
|
|
212
|
-
input_schema:
|
|
213
|
-
type: object
|
|
214
|
-
required: [action]
|
|
215
|
-
additionalProperties: false
|
|
216
|
-
properties:
|
|
217
|
-
action: { type: string, enum: [inspect, import, publish, migrate] }
|
|
218
|
-
reason:
|
|
219
|
-
type: string
|
|
220
|
-
description: Allowed only for publish.
|
|
221
|
-
idempotency_key:
|
|
222
|
-
type: string
|
|
223
|
-
minLength: 3
|
|
224
|
-
description: Required only for publish; binds the exact request and ledger generation.
|
|
225
|
-
output_schema: { type: object }
|
|
226
|
-
errors:
|
|
227
|
-
- { code: VALIDATION_ERROR, description: 'input failed structural validation' }
|
|
228
|
-
- { code: TASK_LEDGER_HISTORY_CONFLICT, description: 'team checkpoint histories conflict' }
|
|
229
|
-
- { code: TASK_LEDGER_TASK_CONFLICT, description: 'the same durable task changed concurrently' }
|
|
230
|
-
cli_subcommand: 'ultra sync'
|
|
231
|
-
|
|
232
|
-
- name: ultra.session
|
|
233
|
-
family: ultra
|
|
234
|
-
description: Acquire, inspect, heartbeat, or release the small execution lease that requires transactional concurrency control.
|
|
235
|
-
phase: '24'
|
|
236
|
-
writer_role: mcp
|
|
237
|
-
input_schema:
|
|
238
|
-
type: object
|
|
239
|
-
required: [action]
|
|
240
|
-
additionalProperties: false
|
|
241
|
-
properties:
|
|
242
|
-
action: { type: string, enum: [admission, acquire, get, list, heartbeat, release] }
|
|
243
|
-
scope:
|
|
244
|
-
type: object
|
|
245
|
-
description: |
|
|
246
|
-
admission/acquire/list use task_id (list may omit it); get/heartbeat/release
|
|
247
|
-
use sid. Unknown scope fields are rejected.
|
|
248
|
-
payload:
|
|
249
|
-
type: object
|
|
250
|
-
description: |
|
|
251
|
-
admission/get/list/heartbeat accept no payload fields. acquire accepts only
|
|
252
|
-
role, runtime, output_path, output_schema, evidence_refs, diff_range,
|
|
253
|
-
changed_files, takeover, and worktree_base. release accepts status
|
|
254
|
-
completed|crashed and optional boolean remove_worktree. Acquire, heartbeat,
|
|
255
|
-
and release compensate Session, lease, Worker Packet, and worktree effects
|
|
256
|
-
if their durable receipt fails.
|
|
257
|
-
idempotency_key:
|
|
258
|
-
type: string
|
|
259
|
-
minLength: 3
|
|
260
|
-
description: Required for acquire, heartbeat, and release.
|
|
261
|
-
output_schema: { type: object }
|
|
262
|
-
errors:
|
|
263
|
-
- { code: VALIDATION_ERROR, description: 'input failed structural validation' }
|
|
264
|
-
- { code: SESSION_STATUS_CONFLICT, description: 'a concurrent session transition won' }
|
|
265
|
-
- { code: LEASE_EXPIRED, description: 'the execution lease already expired' }
|
|
266
|
-
cli_subcommand: 'ultra session'
|
|
267
|
-
|
|
268
|
-
- name: ultra.archive
|
|
269
|
-
family: ultra
|
|
270
|
-
description: Archive one caller-declared local Change handoff through a recoverable filesystem and database transaction. The kernel validates authority, paths, digests, reconciliation structure, and recovery safety without requiring a fixed semantic stage sequence.
|
|
271
|
-
phase: '24'
|
|
272
|
-
writer_role: mcp
|
|
273
|
-
input_schema:
|
|
274
|
-
type: object
|
|
275
|
-
required: [change_id, payload, idempotency_key]
|
|
276
|
-
additionalProperties: false
|
|
277
|
-
properties:
|
|
278
|
-
change_id: { type: string, minLength: 1 }
|
|
279
|
-
payload:
|
|
280
|
-
type: object
|
|
281
|
-
additionalProperties: false
|
|
282
|
-
properties:
|
|
283
|
-
summary: { type: string }
|
|
284
|
-
baseline_updates:
|
|
285
|
-
type: array
|
|
286
|
-
items: { type: string }
|
|
287
|
-
no_baseline_change_reason: { type: string }
|
|
288
|
-
reconciliation_path: { type: string }
|
|
289
|
-
description: The payload cannot replace the caller-declared change_id.
|
|
290
|
-
idempotency_key: { type: string, minLength: 3 }
|
|
291
|
-
output_schema: { type: object }
|
|
292
|
-
errors:
|
|
293
|
-
- { code: VALIDATION_ERROR, description: 'input failed structural validation' }
|
|
294
|
-
- { code: STATE_CORRUPT, description: 'archive authority cannot be trusted' }
|
|
295
|
-
- { code: ARCHIVE_RUNTIME_UNAVAILABLE, description: 'safe archive primitives are unavailable' }
|
|
296
|
-
cli_subcommand: 'ultra archive'
|
|
297
|
-
|
|
298
|
-
- name: ultra.doctor
|
|
299
|
-
family: ultra
|
|
300
|
-
description: Inspect mechanical health and optionally apply only backup-first deterministic repairs. Semantic choices remain with the model and owner.
|
|
301
|
-
phase: '24'
|
|
302
|
-
writer_role: mcp
|
|
303
|
-
input_schema:
|
|
304
|
-
type: object
|
|
305
|
-
additionalProperties: false
|
|
306
|
-
properties:
|
|
307
|
-
repair: { type: boolean }
|
|
308
|
-
output_schema: { type: object }
|
|
309
|
-
errors:
|
|
310
|
-
- { code: STATE_CORRUPT, description: 'the state database cannot be inspected safely' }
|
|
311
|
-
- { code: BACKUP_FAILED, description: 'a required recovery backup could not be created' }
|
|
312
|
-
cli_subcommand: 'ultra doctor'
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"$id": "https://ultra-builder-pro.dev/schemas/baseline-reconciliation.v1.schema.json",
|
|
4
|
-
"title": "Ultra baseline reconciliation v1",
|
|
5
|
-
"type": "object",
|
|
6
|
-
"required": [
|
|
7
|
-
"$schema", "change_id", "baseline_id", "baseline_updates", "semantic_changes",
|
|
8
|
-
"resolved_gap_ids", "resolved_unknowns", "verification"
|
|
9
|
-
],
|
|
10
|
-
"additionalProperties": false,
|
|
11
|
-
"properties": {
|
|
12
|
-
"$schema": { "const": "ultra-baseline-reconciliation-v1" },
|
|
13
|
-
"change_id": { "type": "string", "minLength": 1 },
|
|
14
|
-
"baseline_id": { "type": ["string", "null"] },
|
|
15
|
-
"baseline_updates": {
|
|
16
|
-
"type": "array",
|
|
17
|
-
"uniqueItems": true,
|
|
18
|
-
"items": { "type": "string", "minLength": 1 }
|
|
19
|
-
},
|
|
20
|
-
"semantic_changes": {
|
|
21
|
-
"type": "array",
|
|
22
|
-
"items": {
|
|
23
|
-
"type": "object",
|
|
24
|
-
"required": ["id", "action", "source_ref", "before_digest", "after_digest"],
|
|
25
|
-
"additionalProperties": false,
|
|
26
|
-
"properties": {
|
|
27
|
-
"id": { "type": "string", "pattern": "^[a-zA-Z0-9_-]+$" },
|
|
28
|
-
"action": { "enum": ["add", "update"] },
|
|
29
|
-
"source_ref": { "type": "string", "pattern": "^[^#]+#[^#]+$" },
|
|
30
|
-
"before_digest": { "type": ["string", "null"], "pattern": "^[0-9a-f]{64}$" },
|
|
31
|
-
"after_digest": { "type": "string", "pattern": "^[0-9a-f]{64}$" }
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
},
|
|
35
|
-
"resolved_gap_ids": {
|
|
36
|
-
"type": "array", "uniqueItems": true,
|
|
37
|
-
"items": { "type": "string", "minLength": 1 }
|
|
38
|
-
},
|
|
39
|
-
"resolved_unknowns": {
|
|
40
|
-
"type": "array", "uniqueItems": true,
|
|
41
|
-
"items": { "type": "string", "minLength": 1 }
|
|
42
|
-
},
|
|
43
|
-
"verification": {
|
|
44
|
-
"type": "array",
|
|
45
|
-
"minItems": 1,
|
|
46
|
-
"items": {
|
|
47
|
-
"type": "object",
|
|
48
|
-
"required": ["name", "command", "status", "evidence"],
|
|
49
|
-
"additionalProperties": false,
|
|
50
|
-
"properties": {
|
|
51
|
-
"name": { "type": "string", "minLength": 1 },
|
|
52
|
-
"command": { "type": "string", "minLength": 1 },
|
|
53
|
-
"status": { "const": "pass" },
|
|
54
|
-
"evidence": { "type": "string", "minLength": 1 }
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
},
|
|
58
|
-
"semantic_no_change_reason": { "type": ["string", "null"], "minLength": 3 }
|
|
59
|
-
},
|
|
60
|
-
"allOf": [
|
|
61
|
-
{
|
|
62
|
-
"if": { "properties": { "baseline_updates": { "maxItems": 0 } } },
|
|
63
|
-
"then": {
|
|
64
|
-
"required": ["semantic_no_change_reason"],
|
|
65
|
-
"properties": {
|
|
66
|
-
"semantic_changes": { "maxItems": 0 },
|
|
67
|
-
"semantic_no_change_reason": { "type": "string", "minLength": 3 }
|
|
68
|
-
}
|
|
69
|
-
},
|
|
70
|
-
"else": { "properties": { "semantic_changes": { "minItems": 1 } } }
|
|
71
|
-
}
|
|
72
|
-
]
|
|
73
|
-
}
|
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"$id": "https://ultra-builder-pro.dev/schemas/change-delta.v1.schema.json",
|
|
4
|
-
"title": "Ultra Change delta v1",
|
|
5
|
-
"type": "object",
|
|
6
|
-
"required": [
|
|
7
|
-
"$schema",
|
|
8
|
-
"change_id",
|
|
9
|
-
"baseline_anchor",
|
|
10
|
-
"decisions",
|
|
11
|
-
"non_goals",
|
|
12
|
-
"acceptance",
|
|
13
|
-
"documentation_impact",
|
|
14
|
-
"unknowns",
|
|
15
|
-
"mutations"
|
|
16
|
-
],
|
|
17
|
-
"additionalProperties": false,
|
|
18
|
-
"properties": {
|
|
19
|
-
"$schema": { "const": "ultra-change-delta-v1" },
|
|
20
|
-
"change_id": { "type": "string", "minLength": 1 },
|
|
21
|
-
"baseline_anchor": {
|
|
22
|
-
"type": "object",
|
|
23
|
-
"required": ["baseline_id", "repository_revision", "specs"],
|
|
24
|
-
"additionalProperties": false,
|
|
25
|
-
"properties": {
|
|
26
|
-
"baseline_id": { "type": "string", "minLength": 1 },
|
|
27
|
-
"repository_revision": { "type": ["string", "null"] },
|
|
28
|
-
"specs": {
|
|
29
|
-
"type": "array",
|
|
30
|
-
"uniqueItems": true,
|
|
31
|
-
"items": {
|
|
32
|
-
"type": "object",
|
|
33
|
-
"required": ["path", "digest"],
|
|
34
|
-
"additionalProperties": false,
|
|
35
|
-
"properties": {
|
|
36
|
-
"path": { "type": "string", "minLength": 1 },
|
|
37
|
-
"digest": { "type": "string", "pattern": "^[0-9a-f]{64}$" }
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
},
|
|
43
|
-
"decisions": {
|
|
44
|
-
"type": "array",
|
|
45
|
-
"items": {
|
|
46
|
-
"type": "object",
|
|
47
|
-
"required": ["id", "summary"],
|
|
48
|
-
"additionalProperties": false,
|
|
49
|
-
"properties": {
|
|
50
|
-
"id": { "type": "string", "pattern": "^[a-zA-Z0-9_\\-]+$" },
|
|
51
|
-
"summary": { "type": "string", "minLength": 1 },
|
|
52
|
-
"rationale": { "type": "string", "minLength": 1 }
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
},
|
|
56
|
-
"non_goals": {
|
|
57
|
-
"type": "array",
|
|
58
|
-
"uniqueItems": true,
|
|
59
|
-
"items": { "type": "string", "minLength": 1 }
|
|
60
|
-
},
|
|
61
|
-
"acceptance": {
|
|
62
|
-
"type": "array",
|
|
63
|
-
"minItems": 1,
|
|
64
|
-
"items": {
|
|
65
|
-
"type": "object",
|
|
66
|
-
"required": ["id", "criterion", "verification"],
|
|
67
|
-
"additionalProperties": false,
|
|
68
|
-
"properties": {
|
|
69
|
-
"id": { "type": "string", "pattern": "^[a-zA-Z0-9_\\-]+$" },
|
|
70
|
-
"criterion": { "type": "string", "minLength": 1 },
|
|
71
|
-
"verification": { "type": "string", "minLength": 1 }
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
},
|
|
75
|
-
"documentation_impact": {
|
|
76
|
-
"type": "object",
|
|
77
|
-
"required": ["status", "files", "rationale"],
|
|
78
|
-
"additionalProperties": false,
|
|
79
|
-
"properties": {
|
|
80
|
-
"status": { "enum": ["none", "required"] },
|
|
81
|
-
"files": {
|
|
82
|
-
"type": "array",
|
|
83
|
-
"uniqueItems": true,
|
|
84
|
-
"items": { "type": "string", "minLength": 1 }
|
|
85
|
-
},
|
|
86
|
-
"rationale": { "type": "string", "minLength": 3 }
|
|
87
|
-
}
|
|
88
|
-
},
|
|
89
|
-
"unknowns": {
|
|
90
|
-
"type": "array",
|
|
91
|
-
"items": {
|
|
92
|
-
"type": "object",
|
|
93
|
-
"required": ["id", "summary", "blocking"],
|
|
94
|
-
"additionalProperties": false,
|
|
95
|
-
"properties": {
|
|
96
|
-
"id": { "type": "string", "pattern": "^[a-zA-Z0-9_\\-]+$" },
|
|
97
|
-
"summary": { "type": "string", "minLength": 1 },
|
|
98
|
-
"blocking": { "type": "boolean" }
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
},
|
|
102
|
-
"no_semantic_change_reason": { "type": "string", "minLength": 3 },
|
|
103
|
-
"mutations": {
|
|
104
|
-
"type": "array",
|
|
105
|
-
"items": {
|
|
106
|
-
"type": "object",
|
|
107
|
-
"required": [
|
|
108
|
-
"id",
|
|
109
|
-
"action",
|
|
110
|
-
"target_path",
|
|
111
|
-
"overlay_path",
|
|
112
|
-
"before_digest",
|
|
113
|
-
"after_digest",
|
|
114
|
-
"acceptance_refs",
|
|
115
|
-
"documentation_refs"
|
|
116
|
-
],
|
|
117
|
-
"additionalProperties": false,
|
|
118
|
-
"properties": {
|
|
119
|
-
"id": { "type": "string", "pattern": "^[a-zA-Z0-9_\\-]+$" },
|
|
120
|
-
"action": { "enum": ["add", "update"] },
|
|
121
|
-
"target_path": { "type": "string", "minLength": 1 },
|
|
122
|
-
"overlay_path": { "type": "string", "minLength": 1 },
|
|
123
|
-
"before_digest": {
|
|
124
|
-
"type": ["string", "null"],
|
|
125
|
-
"pattern": "^[0-9a-f]{64}$"
|
|
126
|
-
},
|
|
127
|
-
"after_digest": { "type": "string", "pattern": "^[0-9a-f]{64}$" },
|
|
128
|
-
"acceptance_refs": {
|
|
129
|
-
"type": "array",
|
|
130
|
-
"minItems": 1,
|
|
131
|
-
"uniqueItems": true,
|
|
132
|
-
"items": { "type": "string", "minLength": 1 }
|
|
133
|
-
},
|
|
134
|
-
"documentation_refs": {
|
|
135
|
-
"type": "array",
|
|
136
|
-
"uniqueItems": true,
|
|
137
|
-
"items": { "type": "string", "minLength": 1 }
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
},
|
|
143
|
-
"allOf": [
|
|
144
|
-
{
|
|
145
|
-
"if": {
|
|
146
|
-
"properties": {
|
|
147
|
-
"mutations": { "maxItems": 0 }
|
|
148
|
-
}
|
|
149
|
-
},
|
|
150
|
-
"then": { "required": ["no_semantic_change_reason"] }
|
|
151
|
-
}
|
|
152
|
-
]
|
|
153
|
-
}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"$id": "https://ultra-builder-pro.dev/spec/command-manifest.schema.json",
|
|
4
|
-
"title": "Ultra command launcher frontmatter",
|
|
5
|
-
"description": "Portable source contract for a thin command launcher. Runtime metadata and workflow procedure belong outside the command file.",
|
|
6
|
-
"type": "object",
|
|
7
|
-
"required": ["description", "workflow-ref"],
|
|
8
|
-
"additionalProperties": false,
|
|
9
|
-
"properties": {
|
|
10
|
-
"description": {
|
|
11
|
-
"type": "string",
|
|
12
|
-
"minLength": 10,
|
|
13
|
-
"maxLength": 240,
|
|
14
|
-
"description": "Concise user-visible action description."
|
|
15
|
-
},
|
|
16
|
-
"argument-hint": {
|
|
17
|
-
"oneOf": [
|
|
18
|
-
{ "type": "string" },
|
|
19
|
-
{ "type": "array", "items": { "type": "string" }, "minItems": 1 }
|
|
20
|
-
],
|
|
21
|
-
"description": "Optional host launcher hint; it does not define argument semantics."
|
|
22
|
-
},
|
|
23
|
-
"workflow-ref": {
|
|
24
|
-
"type": "string",
|
|
25
|
-
"pattern": "^@skills/[a-z][a-z0-9\\-]*/SKILL\\.md$",
|
|
26
|
-
"description": "The single Skill that owns this workflow."
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
}
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"$id": "https://ultra-builder-pro.dev/spec/context-file.v4.5.schema.json",
|
|
4
|
-
"title": "context-file projection (v4.5)",
|
|
5
|
-
"description": "Schema for the parsed representation of .ultra/.runtime/projections/contexts/task-*.md. The file is regenerated by the projector from state.db and remains checkout-local. Authority boundary: docs/ARTIFACT-AUTHORITY.md.",
|
|
6
|
-
"type": "object",
|
|
7
|
-
"required": ["header", "body"],
|
|
8
|
-
"additionalProperties": false,
|
|
9
|
-
"properties": {
|
|
10
|
-
"header": {
|
|
11
|
-
"type": "object",
|
|
12
|
-
"required": ["task_id", "title", "status", "schema_version"],
|
|
13
|
-
"additionalProperties": false,
|
|
14
|
-
"properties": {
|
|
15
|
-
"task_id": { "type": "string" },
|
|
16
|
-
"title": { "type": "string" },
|
|
17
|
-
"status": {
|
|
18
|
-
"type": "string",
|
|
19
|
-
"enum": ["pending", "in_progress", "completed", "blocked", "expanded"],
|
|
20
|
-
"x-derived": true,
|
|
21
|
-
"description": "DERIVED from state.db tasks.status; written by projector, not by humans"
|
|
22
|
-
},
|
|
23
|
-
"priority": { "type": "string", "minLength": 1, "maxLength": 80 },
|
|
24
|
-
"type": { "type": "string", "minLength": 1, "maxLength": 80 },
|
|
25
|
-
"session_id": { "type": "string", "x-derived": true },
|
|
26
|
-
"schema_version": { "const": "4.5" },
|
|
27
|
-
"generated_at": { "type": "string", "format": "date-time" }
|
|
28
|
-
}
|
|
29
|
-
},
|
|
30
|
-
"body": {
|
|
31
|
-
"type": "object",
|
|
32
|
-
"required": ["sections"],
|
|
33
|
-
"additionalProperties": false,
|
|
34
|
-
"properties": {
|
|
35
|
-
"sections": {
|
|
36
|
-
"type": "array",
|
|
37
|
-
"items": {
|
|
38
|
-
"type": "object",
|
|
39
|
-
"required": ["heading", "content"],
|
|
40
|
-
"additionalProperties": false,
|
|
41
|
-
"properties": {
|
|
42
|
-
"heading": {
|
|
43
|
-
"type": "string",
|
|
44
|
-
"not": { "pattern": "^[Ss]tatus" },
|
|
45
|
-
"description": "body sections cannot be 'Status' — that lives only in header (D17)"
|
|
46
|
-
},
|
|
47
|
-
"content": { "type": "string" }
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
}
|