Skip to content

Record decision #16: concurrent drafts (W8), and propagate it - #7

Merged
mbreissi merged 1 commit into
mainfrom
design/w8-concurrent-drafts
Jul 24, 2026
Merged

Record decision #16: concurrent drafts (W8), and propagate it#7
mbreissi merged 1 commit into
mainfrom
design/w8-concurrent-drafts

Conversation

@mbreissi

Copy link
Copy Markdown
Contributor

W8 — the last open register item gating the write path — is ruled. Recorded as REVIEW.md §6 #16 and propagated in the same change.

The ruling

Optimistic concurrency, semantic output-level conflict detection, no user-visible branches.

  1. A draft is a named change; the branch is an implementation detail. The author names the change; the Studio derives the ref. Vocabulary is propose → review → apply — never create-branch/merge-branch. Opens implicitly on first edit.
  2. Optimistic concurrency, no locks at any granularity. A lock is a second control plane over Git: stale locks, cross-team blocking, and it needs the identity work being deferred.
  3. Conflict detection is semantic at the effective-config level, never textual. Render base, draft, main-now, merge(draft, main-now) and compare outputs. This catches what Git cannot see: two drafts touching different files (one re-parents a node, another edits the layer at its old scope) — no textual conflict, changed effective config.
  4. Rebase is continuous and invisible — a moved base surfaces as a consequence diff, not a Git conflict.
  5. Detect and surface; never auto-resolve. Scope delete/rename across drafts is an unconditional conflict.
  6. Presence is advisory, not a claim.
  7. Apply is the host's PR merge, gated by CODEOWNERS (#10).

Two consequences recorded with it

  • The write path forces a credential decision now — the Studio deliberately holds none today. Ship a bot/App identity behind the same port as per-user acting-as-user OAuth; design for the latter.
  • The authorization posture must not drift — authentication buys attribution, acting-as-user, and "you can/cannot approve this". Not a role system. Authorization stays CODEOWNERS + branch protection on the host.

Propagated in the same change

The W8 finding and the stale "remains open" line; REVIEW-UI F2 and M8; PLAN.md (write path unblocked, W8 struck from the open list); the deck's two draft cards, which said the UI "creates a Git branch and locks the editing context" — wrong on both counts now; and the mock's draft chip, which showed a raw ref and now shows the change's title.

Also: a regression fix from #6

Seven deck links still pointed at mock pages that PR deleted. They now resolve to the single-page mock, which gained minimal hash deep-linking (#area=Releases, #tab=Config) so those links land where they claim. Verified all six hash forms resolve to the correct selection and tab; the full mock sweep is still clean (264 screen states, 0 rationale leaks).

🤖 Generated with Claude Code

https://claude.ai/code/session_01LsX7cWVGLszurNYMVwMJGo

W8 ruled by the user 2026-07-24: optimistic concurrency with semantic,
output-level conflict detection, and no user-visible branches. Seven rulings
recorded in REVIEW.md §6 #16:

1. A draft is a named change; the branch is an implementation detail. The author
   names the change, the Studio derives the ref, and the vocabulary is
   propose -> review -> apply. A draft opens implicitly on first edit.
2. Optimistic concurrency, no locks at any granularity — a lock is a second
   control plane over Git, goes stale, blocks across teams, and needs the
   identity work that is deliberately deferred.
3. Conflict detection is semantic at the effective-config level, never textual:
   render base, draft, main-now and merge(draft, main-now) and compare outputs.
   This catches what Git cannot see — two drafts touching different files, no
   textual conflict, changed effective config.
4. Rebase is continuous and invisible; a moved base surfaces as a consequence
   diff, not a Git conflict.
5. Detect and surface, never auto-resolve. Scope delete/rename across drafts is
   an unconditional conflict.
6. Presence is advisory, not a claim.
7. Apply is the host's PR merge, gated by CODEOWNERS (register #10).

Two consequences recorded with it: the write path forces a Git-credential
decision (ship a bot/App identity behind the same port as per-user
acting-as-user OAuth; design for the latter), and the authorization posture must
not drift — authentication buys attribution and acting-as-user, never a role
system; authorization stays CODEOWNERS + branch protection on the host.

Propagated in the same change: the W8 finding and the "remains open" line in
REVIEW.md; REVIEW-UI F2 and M8; PLAN.md (write path unblocked, W8 struck from
the open list); the deck's two draft cards, which said the UI "creates a Git
branch and locks the editing context" — both now wrong on two counts; and the
mock's draft chip, which showed a raw ref and now shows the change's title.

Also fixes a regression from #6: seven deck links still pointed at mock pages
that PR deleted. They now resolve to the single-page mock, and the mock gained
minimal hash deep-linking (#area=Releases, #tab=Config) so those links land
where they claim. Verified: all six hash forms resolve to the right selection and
tab, and the full sweep is still clean (264 screen states, 0 rationale leaks).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LsX7cWVGLszurNYMVwMJGo
@mbreissi
mbreissi merged commit 9beac8d into main Jul 24, 2026
1 check passed
@mbreissi
mbreissi deleted the design/w8-concurrent-drafts branch July 24, 2026 18:16
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