ultra-builder-pro-cli 5.0.1 → 6.0.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/CHANGELOG.md +103 -3
- package/README.md +67 -478
- package/README.zh-CN.md +49 -422
- package/adapters/_shared/frontmatter.cjs +1 -18
- package/adapters/_shared/plugin-core.cjs +17 -83
- package/adapters/_shared/runtime-assets.cjs +6 -120
- package/adapters/claude.js +8 -24
- package/adapters/codex.js +13 -32
- package/bin/install.js +35 -57
- package/docs/PLUGIN-ISOLATION-CONTRACT.md +13 -101
- package/docs/examples/drive/claude-reviewer.sh +53 -0
- package/docs/examples/drive/claude-writer.sh +43 -0
- package/engine/FORMATS.md +1051 -0
- package/engine/checks.cjs +139 -0
- package/engine/cli.cjs +148 -0
- package/engine/completion.cjs +48 -0
- package/engine/context.cjs +94 -0
- package/engine/drive.cjs +220 -0
- package/engine/expect-worker.cjs +5 -0
- package/engine/expect.cjs +33 -0
- package/engine/formats.cjs +189 -0
- package/engine/git-state.cjs +112 -0
- package/engine/ledger.cjs +205 -0
- package/engine/loading.cjs +28 -0
- package/engine/merge.cjs +273 -0
- package/engine/milestone.cjs +89 -0
- package/engine/plan.cjs +232 -0
- package/engine/project.cjs +5 -0
- package/engine/signals.cjs +3 -0
- package/engine/states.cjs +175 -0
- package/hooks/session-start.cjs +54 -0
- package/package.json +17 -52
- package/skills/ultra/SKILL.md +395 -0
- package/.ultra-template/changes/abandoned/.gitkeep +0 -0
- package/.ultra-template/changes/active/.gitkeep +0 -1
- package/.ultra-template/changes/archive/.gitkeep +0 -1
- package/.ultra-template/contexts/TEMPLATE.md +0 -135
- package/.ultra-template/decisions/.gitkeep +0 -1
- package/.ultra-template/evidence/.gitkeep +0 -1
- package/.ultra-template/north-star.md +0 -52
- package/.ultra-template/project-brief.md +0 -28
- package/.ultra-template/research/.gitkeep +0 -1
- package/.ultra-template/specs/architecture.md +0 -81
- package/.ultra-template/specs/discovery.md +0 -74
- package/.ultra-template/specs/product.md +0 -80
- package/.ultra-template/specs/research-distillate.md +0 -57
- package/.ultra-template/tasks.json +0 -4
- package/.ultra-template/test-report.json +0 -44
- package/adapters/_shared/host-profile.cjs +0 -5
- package/adapters/grok.js +0 -242
- package/adapters/kimi.js +0 -232
- package/adapters/opencode.js +0 -408
- package/adapters/zcode.js +0 -375
- package/bin/delegate-worker.cjs +0 -5
- package/bin/delegate.cjs +0 -5
- package/docs/ARCHITECTURE.md +0 -274
- package/docs/ARTIFACT-AUTHORITY.md +0 -305
- package/docs/DECISIONS.md +0 -229
- package/docs/PHILOSOPHY.md +0 -261
- package/docs/RUNTIME-COMPAT-MATRIX.md +0 -316
- package/docs/SKILL-AUTHORING.md +0 -113
- package/docs/WORKFLOW-LIFECYCLE.md +0 -350
- package/docs/evals/adversarial-review-2026-08-14.md +0 -84
- package/docs/evals/ultra-5-0-journey-results.md +0 -62
- package/docs/evals/ultra-5-0-live-acp-conformance.md +0 -93
- package/docs/evals/ultra-5-0-route-journeys.md +0 -145
- package/docs/evals/zcode-automation-2026-08-14.md +0 -103
- package/hooks/README.md +0 -52
- package/hooks/_common.py +0 -1779
- package/hooks/adapters/codex.py +0 -295
- package/hooks/adapters/grok.py +0 -134
- package/hooks/adapters/kimi.py +0 -156
- package/hooks/adapters/zcode.py +0 -227
- package/hooks/block_dangerous_commands.py +0 -201
- package/hooks/compact_context.py +0 -224
- package/hooks/mid_workflow_recall.py +0 -47
- package/hooks/post_edit_guard.py +0 -215
- package/hooks/session_context.py +0 -741
- package/skills/ultra-change/SKILL.md +0 -165
- package/skills/ultra-change/references/change-contract.md +0 -199
- package/skills/ultra-change/references/execution-grant.md +0 -109
- package/skills/ultra-change/references/primary-transfer.md +0 -273
- package/skills/ultra-change/scripts/validate_primary_transfer.cjs +0 -1928
- package/skills/ultra-delegate/SKILL.md +0 -195
- package/skills/ultra-delegate/patches/zcode-acp-0.1.0-zcode-0.16.5.patch +0 -184
- package/skills/ultra-delegate/references/delegation-contract.md +0 -138
- package/skills/ultra-delegate/scripts/acp-conformance.cjs +0 -287
- package/skills/ultra-delegate/scripts/acp-driver.cjs +0 -762
- package/skills/ultra-delegate/scripts/agent-execution-driver.cjs +0 -320
- package/skills/ultra-delegate/scripts/cli-driver.cjs +0 -61
- package/skills/ultra-delegate/scripts/delegate-profiles/kimi-read-only.md +0 -15
- package/skills/ultra-delegate/scripts/delegate-profiles/kimi-write.md +0 -17
- package/skills/ultra-delegate/scripts/delegate-worker.cjs +0 -328
- package/skills/ultra-delegate/scripts/delegate.cjs +0 -690
- package/skills/ultra-delegate/scripts/delegate_wait.py +0 -86
- package/skills/ultra-delegate/scripts/host-profile.cjs +0 -267
- package/skills/ultra-deliver/SKILL.md +0 -194
- package/skills/ultra-deliver/references/baseline-reconciliation.md +0 -41
- package/skills/ultra-dev/SKILL.md +0 -265
- package/skills/ultra-dev/references/debugging.md +0 -22
- package/skills/ultra-domain-modeling/SKILL.md +0 -79
- package/skills/ultra-grilling/SKILL.md +0 -121
- package/skills/ultra-grilling/references/reframing.md +0 -76
- package/skills/ultra-init/SKILL.md +0 -143
- package/skills/ultra-init/references/brownfield-adoption.md +0 -32
- package/skills/ultra-init/scripts/init_project.cjs +0 -1031
- package/skills/ultra-plan/SKILL.md +0 -160
- package/skills/ultra-plan/references/task-evidence-v2.md +0 -300
- package/skills/ultra-plan/scripts/validate_task_evidence.cjs +0 -859
- package/skills/ultra-research/SKILL.md +0 -167
- package/skills/ultra-research/references/00-problem-validation.md +0 -36
- package/skills/ultra-research/references/01-opportunity-discovery.md +0 -33
- package/skills/ultra-research/references/02-market-assessment.md +0 -31
- package/skills/ultra-research/references/03-alternatives.md +0 -31
- package/skills/ultra-research/references/04-product-strategy.md +0 -41
- package/skills/ultra-research/references/05-assumptions-validation.md +0 -31
- package/skills/ultra-research/references/10-user-personas.md +0 -30
- package/skills/ultra-research/references/11-user-scenarios.md +0 -28
- package/skills/ultra-research/references/20-user-stories.md +0 -31
- package/skills/ultra-research/references/21-features-scope.md +0 -38
- package/skills/ultra-research/references/22-success-metrics.md +0 -33
- package/skills/ultra-research/references/30-architecture-context.md +0 -30
- package/skills/ultra-research/references/31-solution-strategy.md +0 -28
- package/skills/ultra-research/references/32-building-blocks.md +0 -28
- package/skills/ultra-research/references/40-deployment.md +0 -29
- package/skills/ultra-research/references/41-quality-risks.md +0 -28
- package/skills/ultra-research/references/99-synthesis.md +0 -59
- package/skills/ultra-research/references/north-star-v2.md +0 -168
- package/skills/ultra-research/references/wayfinding.md +0 -50
- package/skills/ultra-research/scripts/validate_north_star.cjs +0 -1174
- package/skills/ultra-review/SKILL.md +0 -275
- package/skills/ultra-review/references/adversarial-evaluation.md +0 -31
- package/skills/ultra-review/references/code.md +0 -17
- package/skills/ultra-review/references/comments.md +0 -12
- package/skills/ultra-review/references/design.md +0 -12
- package/skills/ultra-review/references/errors.md +0 -13
- package/skills/ultra-review/references/review-modes.md +0 -29
- package/skills/ultra-review/references/spec.md +0 -18
- package/skills/ultra-review/references/tests.md +0 -12
- package/skills/ultra-review/references/unified-schema.md +0 -284
- package/skills/ultra-review/references/worker-packet.md +0 -183
- package/skills/ultra-review/scripts/review_wait.py +0 -2943
- package/skills/ultra-status/SKILL.md +0 -209
- package/skills/ultra-status/references/route-contract.md +0 -100
- package/skills/ultra-tdd/SKILL.md +0 -91
- package/skills/ultra-tdd/references/templates/README.md +0 -20
- package/skills/ultra-tdd/references/templates/feature-flag-default-audit.sh +0 -79
- package/skills/ultra-tdd/references/templates/persistence-real.ts +0 -78
- package/skills/ultra-tdd/references/templates/testcontainer-postgres.py +0 -78
- package/skills/ultra-tdd/references/templates/testcontainer-postgres.ts +0 -73
- package/skills/ultra-tdd/references/templates/vertical-slice.ts +0 -66
- package/skills/ultra-tdd/references/test-execution.md +0 -23
- package/skills/ultra-test/SKILL.md +0 -244
- package/skills/ultra-test/references/export-syntax.md +0 -18
- package/skills/ultra-test/scripts/validate_review_transport.cjs +0 -549
- package/skills/ultra-test/scripts/worktree_digest.cjs +0 -576
- package/skills/ultra-think/SKILL.md +0 -56
- package/skills/ultra-think/references/autonomy-boundary.md +0 -48
- package/skills/ultra-think/references/interaction-boundary.md +0 -42
|
@@ -1,107 +1,19 @@
|
|
|
1
1
|
# Plugin isolation contract
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
entry or one mode covered by a currently valid Execution Grant; Hooks separately use
|
|
6
|
-
the presence of `.ultra/` as their idle guard.
|
|
3
|
+
UBP v6 installs one `ultra` Skill, its engine copy and a SessionStart observer for
|
|
4
|
+
Claude Code or Codex. Installation does not authorize project work or external effects.
|
|
7
5
|
|
|
8
|
-
|
|
6
|
+
The plugin never creates or rewrites the user's global `AGENTS.md` or `CLAUDE.md`.
|
|
7
|
+
Repository guidance belongs to the repository. The host owns permissions and hook trust.
|
|
9
8
|
|
|
10
|
-
|
|
9
|
+
Installers replace and remove only managed plugin trees. They preserve unrelated host
|
|
10
|
+
configuration and restore the previous managed installation if publication fails.
|
|
11
|
+
`--config-dir` confines both plugin files and host registration sidecars to that directory;
|
|
12
|
+
with `--all`, each host gets a separate child directory. Doctor is read-only.
|
|
11
13
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
`ultra-delegate/scripts/` Skill directory;
|
|
15
|
-
- exactly five hook scripts plus `_common.py` and any required wire adapter;
|
|
16
|
-
- one native plugin manifest or entrypoint;
|
|
17
|
-
- provenance and managed-ownership markers;
|
|
18
|
-
- the host's native registry entry where required.
|
|
14
|
+
SessionStart reads its input and project status, prints a reminder when `.ultra/spec.md`
|
|
15
|
+
exists and `UBP_DRIVE` is not set, and always exits successfully. It writes no files and grants no authority.
|
|
19
16
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
## Surfaces Ultra does not own
|
|
25
|
-
|
|
26
|
-
Ultra must not create or rewrite:
|
|
27
|
-
|
|
28
|
-
- global user instruction files such as `~/.codex/AGENTS.md` or
|
|
29
|
-
`~/.claude/CLAUDE.md`;
|
|
30
|
-
- general memory, code-graph, browser, deployment, framework, or productivity assets;
|
|
31
|
-
- user-defined commands, agents, plugins, hooks, or registry entries;
|
|
32
|
-
- repository files outside `.ultra/` and `CONTEXT.md` unless the selected engineering
|
|
33
|
-
task itself authorizes them;
|
|
34
|
-
- an Ultra database, server registration, semantic runtime, or daemon.
|
|
35
|
-
|
|
36
|
-
## Installation lifecycle
|
|
37
|
-
|
|
38
|
-
Install builds a complete staging tree, including the Skill-local delegation runtime,
|
|
39
|
-
marks it managed, writes provenance, then atomically publishes it. An existing unmanaged
|
|
40
|
-
target is never overwritten. Reinstall replaces only the managed tree. Doctor is
|
|
41
|
-
read-only and reports runner reachability separately. Uninstall removes only assets
|
|
42
|
-
whose ownership can be proven.
|
|
43
|
-
|
|
44
|
-
Host-owned sidecars must resolve from the same isolation root as `--config-dir`. For
|
|
45
|
-
Codex this includes both `plugins/ultra-builder-pro` and
|
|
46
|
-
`.agents/plugins/marketplace.json`; sandbox installation must not touch the real home
|
|
47
|
-
directory. Codex native registration runs with both `HOME` and `CODEX_HOME` set to that
|
|
48
|
-
root. If registration fails, install restores the previous managed tree and marketplace,
|
|
49
|
-
or removes every fresh partial artifact.
|
|
50
|
-
|
|
51
|
-
When one invocation selects multiple hosts, the supplied path is a parent isolation
|
|
52
|
-
root and each adapter receives `<path>/<runtime>`. Sharing one concrete config directory
|
|
53
|
-
would collide host-native `skills/` and `plugins/` layouts.
|
|
54
|
-
|
|
55
|
-
OpenCode installation may remove a specifically recognizable Ultra registration from
|
|
56
|
-
an older release. It must preserve unrelated configuration and files.
|
|
57
|
-
|
|
58
|
-
Before first install, each adapter records only the exact config files and directory
|
|
59
|
-
shells that do not yet exist. Uninstall may prune those recorded paths only when they
|
|
60
|
-
are still empty (or a zero-byte host-created file); it preserves every pre-existing,
|
|
61
|
-
non-empty, modified, symlinked, or unowned path. Codex marketplace and Kimi registry
|
|
62
|
-
files additionally remember whether Ultra created the registry itself, so an empty
|
|
63
|
-
registry that existed before installation is retained.
|
|
64
|
-
|
|
65
|
-
ZCode publishes one managed local marketplace whose nested plugin is activated through
|
|
66
|
-
the host's documented `plugins.dirs` configuration. Install preserves unrelated ZCode
|
|
67
|
-
configuration, and uninstall removes only Ultra's exact directory entry and restores
|
|
68
|
-
the pre-install `plugins.enabled` value when that value has not since been changed by
|
|
69
|
-
the owner.
|
|
70
|
-
|
|
71
|
-
## Activation
|
|
72
|
-
|
|
73
|
-
Public Skill modes are `explicit-entry`, `grant-continuable`, or read-only `router`.
|
|
74
|
-
Explicit-entry modes activate only through the Host's owner-facing Skill surface.
|
|
75
|
-
Grant-continuable modes may be model-selected only after the loaded Skill verifies the
|
|
76
|
-
same active Change, valid grant, allowed effects, and material checkpoints. A router may
|
|
77
|
-
diagnose read-only state only on explicit owner invocation and creates no continuation
|
|
78
|
-
authority. Model-discipline Skills
|
|
79
|
-
may be selected only as methods inside the current covered workflow.
|
|
80
|
-
|
|
81
|
-
Host invocation metadata is a coarse discovery aid. It cannot express every per-mode
|
|
82
|
-
boundary, so the in-Skill check remains mandatory and Hosts without an equivalent bit
|
|
83
|
-
rely on discriminating descriptions plus that same check. A public Skill may transition
|
|
84
|
-
to another only when a valid grant covers the exact next mode and effects, after showing
|
|
85
|
-
the Route Card; otherwise it stops and recommends the explicit route. Installation does
|
|
86
|
-
not create a grant, launch a workflow, or start background work. Hooks activate only
|
|
87
|
-
through Host lifecycle registrations and retain their independent idle guard.
|
|
88
|
-
|
|
89
|
-
## Idle behavior
|
|
90
|
-
|
|
91
|
-
Every hook resolves the current project and checks for `.ultra/` before reading,
|
|
92
|
-
writing, injecting context, or denying an effect. Without `.ultra/`, it emits no stdout,
|
|
93
|
-
exits zero, and leaves the project untouched.
|
|
94
|
-
|
|
95
|
-
The only hook denial is a named destructive shell effect in an active Ultra project.
|
|
96
|
-
The denial identifies the protected effect and supplies an exact-command SHA-256
|
|
97
|
-
authorization path. Additive protected-branch publication is an advisory observation
|
|
98
|
-
because a portable hook cannot consume every host's trusted owner-approval receipt;
|
|
99
|
-
history rewrites and branch deletion remain guarded. All other hook failures are
|
|
100
|
-
fail-open diagnostics.
|
|
101
|
-
|
|
102
|
-
## Project data boundary
|
|
103
|
-
|
|
104
|
-
Canonical project data is owner-readable and Git-compatible. Derived hook, review, and
|
|
105
|
-
delegation artifacts live only under ignored `.ultra/.runtime/`, `.ultra/progress/`, or
|
|
106
|
-
`.ultra/reviews/`. Disabling or uninstalling Ultra leaves canonical project data intact
|
|
107
|
-
and resumable by ordinary file reading.
|
|
17
|
+
Project truth is `.ultra/spec.md`, `checks.json`, `plan.json`, `rulings.md`, the ledgers,
|
|
18
|
+
records and Git. The engine computes progress; a hook's printed observation is not a new
|
|
19
|
+
source of truth. `.ultra/.runtime/` is disposable execution data.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
# Headless Claude Code reviewer for `ubp drive --reviewer`, run once at the milestone gate.
|
|
3
|
+
# The engine sets UBP_ROOT, UBP, UBP_DRIVE, UBP_MILESTONE and UBP_REVIEW (the review file to
|
|
4
|
+
# write), and puts its own `ubp` first on PATH.
|
|
5
|
+
# It runs with edits accepted and Bash allowed, without a sandbox: use it only on a
|
|
6
|
+
# repository you are willing to let an agent change. Copy it and adjust before use.
|
|
7
|
+
# Outward commands that cannot be undone are denied by Claude Code permission rules
|
|
8
|
+
# (--disallowedTools below). Ceiling: they match command prefixes, so they stop `git push`
|
|
9
|
+
# and compound forms (checked with claude -p on 2026-11-04) but not `git -C <dir> push`,
|
|
10
|
+
# `git -c k=v push` or a push made inside a script; a mid-command rule like `git * push *`
|
|
11
|
+
# would also deny every commit whose message says "push". The stronger guard is a work tree
|
|
12
|
+
# with no push remote; add the deploy and release CLIs your project uses to the list.
|
|
13
|
+
set -eu
|
|
14
|
+
cd "$UBP_ROOT"
|
|
15
|
+
PROMPT="# Mission: whole-branch review of milestone $UBP_MILESTONE
|
|
16
|
+
|
|
17
|
+
Workspace: $UBP_ROOT (a Git repository). You wrote none of this milestone's code. If you
|
|
18
|
+
need this project's engine, call it as \`eval \"\$UBP <args>\"\` (a plain \`ubp\` may be another
|
|
19
|
+
install); \`ubp check\` and \`ubp gate\` write the ledger, so prefer running tests on a copy.
|
|
20
|
+
|
|
21
|
+
Read: the milestone's requirements in .ultra/spec.md (the Direction and Interface sections
|
|
22
|
+
too), the milestone's diff (from the commit that last changed .ultra/ledger/milestones.jsonl
|
|
23
|
+
to HEAD), .ultra/ledger/plan-log.jsonl and .ultra/rulings.md since that commit, and the
|
|
24
|
+
handoffs under .ultra/records/handoffs/. Then drive the product by hand through its real
|
|
25
|
+
interface, and run the milestone's checks against deliberately broken copies of the code: make
|
|
26
|
+
each copy in a temporary directory outside the repository, never in it. A check that passes on
|
|
27
|
+
a broken copy is an acceptance gap. Run the checks once on an unmodified copy of HEAD too
|
|
28
|
+
(\`git archive HEAD\`): a fix that lives only in a file Git ignores passes in the work tree.
|
|
29
|
+
|
|
30
|
+
The Owner's rule is that a check that could be stronger never blocks. So a finding blocks only
|
|
31
|
+
when the product, as HEAD builds it, breaks a requirement's \`Done when\` line or the
|
|
32
|
+
Direction, or does something wrong that you can reproduce through its real interface. Wrong
|
|
33
|
+
means it contradicts the text of the spec (a requirement, the Interface or the Direction),
|
|
34
|
+
loses or corrupts data, crashes, or opens a security hole. An acceptance gap does not block
|
|
35
|
+
once you have driven HEAD through its real interface on the input the broken copy got wrong
|
|
36
|
+
and seen it behave correctly: quote what HEAD did, name the check that would close the gap
|
|
37
|
+
under \"What must be said to the Owner\", and keep the verdict accept. If the latest earlier
|
|
38
|
+
review of this milestone in .ultra/records/milestones/ (\`$UBP_MILESTONE-review-<n>.md\`) ends
|
|
39
|
+
with \`Verdict: revise\`, also check each of its blocking findings and look for regressions.
|
|
40
|
+
Quote an earlier verdict only inside a code fence.
|
|
41
|
+
|
|
42
|
+
Write $UBP_REVIEW and nothing else in the repository (no commits, no other edits): a first
|
|
43
|
+
line \`Reviewer: claude -p (${UBP_REVIEWER_MODEL:-opus}), fresh session\`, then the findings
|
|
44
|
+
that block (each with its evidence, the \`Done when\` line, Direction or reproduction it rests
|
|
45
|
+
on, and the layer it belongs to: L4 implementation, L2 design, L1 acceptance or requirements,
|
|
46
|
+
L0 direction), then a section \"What must be said to the Owner\" with everything else, then
|
|
47
|
+
exactly one line \`Verdict: accept\` (no finding blocks) or \`Verdict: revise\`. Stop every
|
|
48
|
+
server you start by its PID."
|
|
49
|
+
exec claude -p "$PROMPT" --model "${UBP_REVIEWER_MODEL:-opus}" --output-format json \
|
|
50
|
+
--setting-sources project --strict-mcp-config --disable-slash-commands \
|
|
51
|
+
--no-session-persistence --permission-mode acceptEdits \
|
|
52
|
+
--allowedTools "Bash,Read,Edit,Write,Glob,Grep" \
|
|
53
|
+
--disallowedTools "Bash(git push *)" "Bash(npm publish *)" "Bash(gh *)"
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
# Headless Claude Code writer for `ubp drive --writer`. The engine sets UBP_ROOT, UBP_NODE,
|
|
3
|
+
# UBP_BRIEF, UBP_ATTEMPT, UBP_DRIVE and UBP, and puts its own `ubp` first on PATH.
|
|
4
|
+
# The writer sees the brief and the repository only, never the controller's conversation.
|
|
5
|
+
# It runs with edits accepted and Bash allowed, without a sandbox: use it only on a
|
|
6
|
+
# repository you are willing to let an agent change. Copy it and adjust before use.
|
|
7
|
+
# Outward commands that cannot be undone are denied by Claude Code permission rules
|
|
8
|
+
# (--disallowedTools below). Ceiling: they match command prefixes, so they stop `git push`
|
|
9
|
+
# and compound forms (checked with claude -p on 2026-11-04) but not `git -C <dir> push`,
|
|
10
|
+
# `git -c k=v push` or a push made inside a script; a mid-command rule like `git * push *`
|
|
11
|
+
# would also deny every commit whose message says "push". The stronger guard is a work tree
|
|
12
|
+
# with no push remote; add the deploy and release CLIs your project uses to the list.
|
|
13
|
+
set -eu
|
|
14
|
+
cd "$UBP_ROOT"
|
|
15
|
+
PROMPT="# Mission: node $UBP_NODE (attempt $UBP_ATTEMPT)
|
|
16
|
+
|
|
17
|
+
Workspace: $UBP_ROOT (a Git repository). You are the writer of one node. The brief below is
|
|
18
|
+
everything you are given; the current code is in the repository.
|
|
19
|
+
|
|
20
|
+
Call this project's engine as \`eval \"\$UBP <args>\"\` from the workspace (the current
|
|
21
|
+
directory is the project root), for example \`eval \"\$UBP check C-1\"\`; a plain \`ubp\` may be
|
|
22
|
+
another install. Below, \`ubp <args>\` means exactly that. Work test-first inside the node's
|
|
23
|
+
scope. Run the \`ubp check\` line of the brief's rules for this node's checks until they are
|
|
24
|
+
green; before \`ubp node done $UBP_NODE\`, also run \`ubp check\` (every stale check):
|
|
25
|
+
invariants and checks that were green before must stay green. Red checks of other nodes or of later milestones are expected; leave them alone.
|
|
26
|
+
|
|
27
|
+
Never edit .ultra/spec.md, .ultra/checks.json, .ultra/plan.json, .ultra/ledger/milestones.jsonl,
|
|
28
|
+
.ultra/ledger/approvals.jsonl, .ultra/ledger/plan-log.jsonl or any check's test file, and never
|
|
29
|
+
run \`ubp gate\`, \`ubp approve\` or \`ubp milestone close\`: if one of them looks wrong, stop and
|
|
30
|
+
say so in .ultra/records/handoffs/$UBP_NODE.md. Write that handoff and commit it with the
|
|
31
|
+
code; besides what the brief asks, say in it what you noticed and left unchanged and what
|
|
32
|
+
behavior no check pins. Commit inside this repository only (local commits); leave the work tree clean; install
|
|
33
|
+
nothing. Stop every server you start by its PID, never with a pattern-based kill, and keep
|
|
34
|
+
data files in a temp directory outside the repository. Finish with \`ubp node done $UBP_NODE\`.
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
$(cat "$UBP_BRIEF")"
|
|
39
|
+
exec claude -p "$PROMPT" --model "${UBP_WRITER_MODEL:-sonnet}" --output-format json \
|
|
40
|
+
--setting-sources project --strict-mcp-config --disable-slash-commands \
|
|
41
|
+
--no-session-persistence --permission-mode acceptEdits \
|
|
42
|
+
--allowedTools "Bash,Read,Edit,Write,Glob,Grep" \
|
|
43
|
+
--disallowedTools "Bash(git push *)" "Bash(npm publish *)" "Bash(gh *)"
|