Skip to content

Add vcs_shape prep question and state dstack's line on version control - #11

Open
petaltank wants to merge 2 commits into
feat/roadmap-0.4from
feat/vcs-shape
Open

petaltank wants to merge 2 commits into
feat/roadmap-0.4from
feat/vcs-shape

Conversation

@petaltank

Copy link
Copy Markdown
Collaborator

Summary

Roadmap item 5 (meta/roadmap-0.4.md). Based on #6; GitHub retargets to master once #6 merges. Independent of the other feature PRs (if #8, #9 or #10 also land, the spec's principles list needs a one-line renumber — each adds an "18."; and if #8 lands, this becomes prep question 6 rather than 5).

Where the line is. dstack owns exactly three things about version control, for every project: the unit (one ticket = one commit bundling code + re-spec + status; never rewritten once pushed), the trailers (Dstack-Project / Dstack-Ticket), and the shape (below). It deliberately does not own — and reads from the host repo's CLAUDE.md — merge strategy, CI, review rules, branch protection, PR templates, release tagging. Stated once in the spec's Tooling section, echoed in the README FAQ.

The shape, new prep question vcs_shape, recommended from team_shape:

shape branch commit PR
branch-per-project (solo default; today's yolo behavior) dstack/<project>, once one per ticket phase boundary / close-out, with the retro suggestion
branch-per-ticket (team default) per ticket, from main — or stacked on a dependency's branch if its PR is still open one per ticket one per ticket; re-spec section = PR body
trunk none one per ticket none
  • Stacking differs by command, per the discussion: dstack-yolo stacks on its own (it's autonomous and warm), logs "stacked on (#N)", and pauses at two unmerged PRs deep; dstack-ticket asks the human — stack or wait — because stacking is a real commitment.
  • Fork A branch names are Linear's own per-issue branch name, verbatim (branchName via MCP), so Linear auto-links. Its format is a workspace setting, not dstack's — not configurable here, by design.
  • /dstack-ticket gains Step 7 — Close the ticket: verify → re-spec (Fork A: Linear comment first, then description) → status + Execution log → one commit with trailers → PR per shape → hand back. Step 4 now offers it for any [~] ticket whose work landed but was never closed — the Keystone's failure mode in progress.
  • dstack-yolo: Operating contract, Step 5 (branch per shape), Step 6 (PR per shape), Step 8 (new stop condition: at gate-every-ticket don't build a dependent on an unreviewed PR; at any tier don't stack three deep). dstack-retro reads PR open→merged timing as review latency.
  • Reference project: vcs_shape: branch-per-project, D1.md footer names the branch. README: walkthrough step 7, Decision guide entry, FAQ fallback + "how opinionated is dstack about git?".

Verification

  • ./install.sh into a scratch repo; vcs_shape present in spec, skill, all three commands.
  • Read yolo Steps 5–6 end to end as branch-per-ticket and as trunk; read ticket Step 7 once — no contradictions with Step 6's confirm.

🤖 Generated with Claude Code

https://claude.ai/code/session_01NLMK6F3vQ1HzyU1Mxqt6Kr

petaltank and others added 2 commits September 14, 2026 10:37
dstack's git opinion lived only in dstack-yolo (one branch per project, one commit per
ticket, trailers); /dstack-ticket had no close-out step at all, so the human-driven path
had nothing structural forcing re-spec.

New prep question vcs_shape: branch-per-project | branch-per-ticket | trunk, recommended
from team_shape (solo → per-project; team → per-ticket, because a PR per ticket is the
reviewable diff and the review is the re-spec forcing function). branch-per-ticket stacks
on a dependency's branch when its PR is still open — dstack-yolo does so on its own (max
two deep, then pauses for review), dstack-ticket asks. Fork A branch names are Linear's
own per-issue branch name, verbatim.

/dstack-ticket gains Step 7 — Close the ticket (verify → re-spec → status → one commit
with trailers → PR per shape) and offers it for any [~] ticket whose work landed but was
never closed. The spec's Tooling section states what dstack owns (the unit, the trailers,
the shape) and what it leaves to the host repo (merge strategy, CI, review rules, release
tagging). Unset → branch-per-project.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NLMK6F3vQ1HzyU1Mxqt6Kr
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NLMK6F3vQ1HzyU1Mxqt6Kr
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant