Replace the onboarding-branch entry with the sequence that avoids cleanup - #506
Merged
Conversation
…anup The previous entry said the initial commits belong on a feature branch and reach develop by squash. Correct, but it still leaves main and develop as things an agent might commit onto and then have to clean up. Blog tried exactly that and was blocked, which is the ruleset working. The better sequence removes the problem instead of managing it. Create main carrying nothing, create develop from main carrying nothing, create the first feature branch from develop and do the whole standup there, add the repo to GitHub and apply the repo config from that branch, then open a normal pull request to develop when ready. Two details the write-up needs and would otherwise get wrong. A git branch cannot exist without a commit, so "carrying nothing" means one signed empty root commit, and section 0's signing window applies to it. And squashing afterwards is not an escape, because non_fast_forward is set on both develop payloads, so the history cannot be rewritten without disabling the ruleset. STANDUP.md currently says nothing about how main and develop come into being, which is the gap that lets an agent commit onto whichever branch it finds. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Contributor
There was a problem hiding this comment.
Pull request overview
Updates the TODO backlog entry that tracks the planned STANDUP.md onboarding guidance, replacing the prior “initial commits on a feature branch then squash to develop” write-up with a more explicit branch-bootstrap sequence that avoids ever needing to clean up main/develop.
Changes:
- Replaces the existing
STANDUP.md-documentation backlog item with an explicit “bootstrapmain/developthen do standup on first feature branch” sequence. - Adds the key constraint that “carrying nothing” still requires a (signed) empty root commit, and notes that
non_fast_forwardprevents later history rewrites ondevelop. - Records the operational vs release ruleset difference (
repo-config/develop.jsonvsrepo-config/operational/develop.json) as motivation for documenting the safer sequence.
ptr727
added a commit
that referenced
this pull request
Aug 1, 2026
… the carried-file corrections to main (#517) Promotes twelve commits to `main`. Three of them change **carried** files, so downstream repos read the stale text until this lands, which is what makes the promotion the delivery step rather than bookkeeping. ## What this delivers to the fleet **Carried-file corrections**, picked up by every repo on its next re-vendor: | PR | File | Correction | | --- | --- | --- | | #514 | `.github/copilot-instructions.md` | Described the pre-split `AGENTS.md`, wrong in both halves. `GOVERNANCE.md` holds the rule sections and the two `intent` ones; `AGENTS.md` carries two verbatim sections and none repo-specific | | #514 | `CODESTYLE.md` | Said MD033 flags HTML elements while the config allows `details` and `summary`; also gains the `HISTORY.md` mirror rule, moved from a hub-only spec file so a repo can read the rule it is graded against | | #514 | `WORKFLOW.md` | D2.2 "skipped on smoke" read as the job rather than the validation, and a review acting on it proposed a change that would have coupled the release to smoke | | #503 | `.editorconfig`, `.gitattributes` | 36 comment findings in the files a new repo copies first | | #501 (earlier) | `repo-config/configure.sh` | Already on `main` | **Spec and requirement changes**: - **#507** makes `OPERATIONS.md` `appliesTo: "*"`, keyed to the need rather than to `workflowModel`. Measured: 3 of 21 repos carry it, so **17 will report a new `LETTER file:` finding**. Intended, and a headed stub satisfies it. - **#512** declares `.github/workflows/merge-bot-pull-request.yml` at `interface` fidelity, closing a graded contract (`WORKFLOW.md` D8.1) that no spec required. 15 of 21 already carry it, so this ratifies a de facto standard; the other **6 report a new `DRIFT`**, and those six have Dependabot pull requests piling up with nothing to merge them. - **#505** stops the audit flagging the hub against itself and drops a premise that was false since this repo went public. - **#511** fixes the README shape across repository visibility. - **#515** puts audit-report authorship with the hub and names the base branch, after a downstream conformance PR targeted `main` and I merged it without checking. - **#513** forward-ports that PR's content, restoring the forward-only invariant. **Backlog and reports**: #504, #506, #510, #516 record the README shape rework, the branch-bootstrap step, the declared-description design, and why the audit is on demand. ## Fleet consequence, stated before it lands Two owed follow-ups this promotion creates or carries: 1. **Re-vendor `repo-config/configure.sh`**, already owed from #501, since it is `verbatim` with `appliesTo: "*"` and every repo holding a copy is byte-mismatched. 2. **The next fleet audit reads noisier**, by 17 `OPERATIONS.md` letters and 6 merge-bot drifts. Both are new requirements rather than repo regressions. ## Verification Run on `develop` at `e4c76bc`: ``` python3 scripts/test_prose_lint.py 144 tests, OK python3 scripts/test_repo_gate.py 23 tests, OK python3 scripts/test_pr_review.py 27 tests, OK python3 spec/audit.py --selftest SELFTEST PASS python3 scripts/repo_gate.py eol 0, sha-pin 0 python3 spec/validate.py OK, 21 cataloged prose_lint --check charset --check dupword --check spelling clean editorconfig-checker (docker, canonical) clean ``` Every one of the twelve was merged green with a Copilot review covering its head SHA. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Replaces the onboarding-branch entry added in #504 with the sequence Pieter proposed after watching
Bloghit the problem.What changed and why
The #504 entry said the initial commits belong on a feature branch and reach
developby squash. That is correct, but it still treatsmainanddevelopas branches an agent might commit onto and then have to clean up.Blogtried to squash its standup work back onto themainanddevelopit had already committed to, and was blocked, which is the ruleset doing its job.The proposed sequence removes the problem rather than managing it:
main, carrying nothing.developfrommain, carrying nothing.developand do the whole standup there.developwhen the repo is ready.Nothing ever has to be cleaned off
mainordevelop, because nothing ever reached them without review.Two details the write-up would otherwise get wrong
A git branch cannot exist without a commit. "Carrying nothing" therefore means exactly one signed empty root commit (
git commit --allow-empty), not a literally empty ref. Section 0's signing window applies to that commit like any other, so it has to be signed before it is made.Squashing afterwards is not an escape hatch.
non_fast_forwardis set on bothdeveloppayloads, so once history reachesdevelopit cannot be rewritten without disabling the ruleset. That is whyBlogwas blocked rather than merely inconvenienced.The gap this fills
STANDUP.mdsays nothing about howmainanddevelopcome into being. Section 0 covers signing before the first commit, section 0A covers the human-gated prerequisites, and section 2 covers carrying the baseline files, but the branch bootstrap between them is undocumented. An agent with no instruction commits onto whichever branch it finds itself on.Worth noting the protection is uneven, which the entry records:
developrepo-config/develop.json(release)pull_request,required_linear_history,required_status_checks,copilot_code_reviewrepo-config/operational/develop.jsondeletion,non_fast_forward,required_signaturesonlyOn an operational repo the ruleset alone would not stop a direct commit, so only the instruction stands between it and an unfixable history. That is the argument for documenting the sequence rather than relying on the gate.
Correction, after this PR was opened:
Blogisrelease, notoperational. I had classified it wrongly, and Pieter corrected it. The test is where the config lives, sinceoperationalis for config that sits on the actual server, and Blog builds and pushes releases out instead. So Blog's owndevelopis PR-gated and the ruleset does block it. That strengthens the entry rather than weakening it: the uneven-protection point stands for every genuinely operational repo, and the bootstrap sequence is what keepsmainanddevelopclean in both models.The reason it matters on a public repo: the exploratory standup history is where PII, secrets and noise commits accumulate, and squashing a feature branch is the one chance to leave them out.
Verification
cspellrejected "unreviewed" on the first pass. Rephrased rather than adding a word tocspell.json, since one entry's worth of dictionary growth is not worth a phrasing that had an ordinary alternative.Backlog only. The
STANDUP.mdchange itself is the work this entry describes, not this PR.🤖 Generated with Claude Code