♻️ Move script-header rationale into development/
branch.sh, finish.sh, release.sh, runner-image.sh and release-notes.sh carried multi-paragraph 'how we got here / rejected' essays in comments. They now live in the matching development/ category file, and each script keeps a one-line pointer so the rationale is single-homed and cannot drift.
This commit is contained in:
1 parent
9faa0ecc55
commit
c7372732ba
6 files changed
+27
-80
No files matched your search
+6
-36
@@ -4,43 +4,13 @@ set -eu
|
||||
|
||||
# Branch front-door. Run as `npm run create:branch -- <prefix>/<desc>`.
|
||||
#
|
||||
# How we got here (short): the branching model says every change starts from a
|
||||
# clean, current `main`, and the type-driven loop only produces trustworthy
|
||||
# results if the baseline was green *before* the first edit. Both facts were
|
||||
# prose. Prose rots silently — a rule nobody checks is a suggestion — so the
|
||||
# precondition became this script: it asserts, then branches, and the branch
|
||||
# only appears if the assertions passed. Cheap checks run first, `npm run test`
|
||||
# runs last: the expensive gate is not paid on a tree that was never eligible.
|
||||
# Asserts the branch preconditions — clean tree, no in-progress operation,
|
||||
# current `main`, green baseline — and only then creates the branch, so the
|
||||
# expensive `npm run test` is not paid on a tree that was never eligible.
|
||||
#
|
||||
# Rejected for the prefix name: `run:` / `perform:` (both mean only "do the
|
||||
# thing named after them", so every script in the repo would fit under them and
|
||||
# the taxonomy collapses); `git:` (names the tool, not the lifecycle moment, and
|
||||
# advertises passthrough aliases); `start:` (describes this half, not the
|
||||
# release); `cut:` (idiomatic for both, but it needs VCS slang to decode, and a
|
||||
# signpost that has to be explained is not one); `flow:` (overloaded in a library
|
||||
# about type-level matching); and the existing families — `check:*` is read-only
|
||||
# and aggregated by `check`, so CI would run a command that mutates repo state;
|
||||
# `fix:*`'s review surface is a file diff, not a branch; `maintain:*` is advisory
|
||||
# and explicitly never a gate.
|
||||
#
|
||||
# `create:` was kept because both members really do create something: a branch,
|
||||
# a release. It was added to both prefix lists in CONTRIBUTING.md in the same
|
||||
# commit as its first members, because a prefix missing from those lists is
|
||||
# invisible — which was the `use:` mistake this repo carried in backlog.tasks (since retired into `setup:`).
|
||||
# There is deliberately no bare `create` aggregator: "run all the workflows"
|
||||
# describes nothing anyone wants, and `publish:*` already sets the precedent for
|
||||
# a prefix without one.
|
||||
#
|
||||
# Also rejected here: reusing `pubv`'s preflight (release-shaped, third-party,
|
||||
# and it would make branch start pay a build + pack it has no use for). The
|
||||
# merge half was originally rejected too ("review the diff yourself" is
|
||||
# judgment), but it now has its own front door — `create:finish` — which owns
|
||||
# the merge-side preconditions and the post-merge `verify`, so the start half
|
||||
# does not have to carry that burden.
|
||||
#
|
||||
# Every refusal is non-mutating except the baseline test, which runs on `main`
|
||||
# after we switch there — so a red `main` restores the branch you started on
|
||||
# rather than stranding you on it.
|
||||
# Why the front door exists, the rejected prefix names, and the `create:`
|
||||
# decision: development/workflow.md § Branching model and § Script prefix
|
||||
# convention.
|
||||
|
||||
BASE="main"
|
||||
PREFIXES="feature fix chore"
|
||||
|
||||
Reference in new issue
Block a user