Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions STANDUP.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,33 @@ After the first commit, confirm it took with `git log -1 --format='%G? author=%a

**Escalate a blocking prerequisite the moment it is found, rather than carrying it.** In a task list a pending task and a blocking prerequisite look identical, and the second quietly becomes the first as work continues around it. Stop at the step that needs the missing input and say which input it is.

## 0B. Create the Branches, Before the First Standup Commit

**Create both long-lived branches empty and do the whole standup on a feature branch off `develop`.** An agent that starts committing onto whichever branch `git init` produced is writing the repo's permanent history, and every step below is exploratory work that has no business being permanent. Doing this first means nothing ever has to be cleaned off `main` or `develop`, because nothing reaches either without review.

1. **Create `main` carrying nothing.** A git branch cannot exist without a commit, so carrying nothing means exactly one signed empty root commit, and section 0's signing window applies to it like any other.
2. **Create `develop` from `main`**, also carrying nothing, so the two start level.
3. **Create the first feature branch from `develop`** and run every step below on it, through the audit in step 5.
4. **Add the repository on GitHub and apply the configuration while still on that branch**, which is step 4 and needs no branch of its own.
5. **Open a normal pull request into `develop`** when the standup is done, and let it squash like any other change.
Comment thread
ptr727 marked this conversation as resolved.

The three local steps are four commands, run before the repository exists on GitHub:

```shell
git init --initial-branch main # Rather than relying on the host's init.defaultBranch.
git commit --allow-empty --message "Initial commit" # The one signed empty root commit.
git branch develop # From main, so the two start level.
git switch --create "<feature-branch>" develop # Every step below runs here.
```

The placeholder is quoted for the reason step 4 gives, that an unquoted `<` is input redirection. Section 0's `git config --local` check belongs between the first and second lines, and its `git log -1` verification reads that empty commit, which is the first commit the signing window covers rather than an exception to it. Push `main` and `develop` once the repository exists and **before** step 4 applies the rulesets, since [`repo-config/main.json`][repo-config] carries a `pull_request` rule and no bypass actors, so an applied ruleset blocks the direct push that would otherwise seed the branch.

**Committing onto `develop` and squashing afterwards does not work**, because `non_fast_forward` is set on both `develop` payloads and rewriting that history is exactly what the rule rejects. This is not hypothetical, since a repo stood up that way was correctly blocked at the point the history needed rewriting, with the standup already written into the branch it had to be lifted off.

**The protection is uneven, so on an operational repo this instruction is the only thing holding the line.** A release repo's `repo-config/develop.json` carries a `pull_request` rule that blocks a direct commit outright, while `repo-config/operational/develop.json` carries three rules, `deletion`, `non_fast_forward` and `required_signatures`, and none of them stops one. A conformant operational repo therefore accepts the commit that this step exists to prevent, and reports nothing wrong afterwards.

**On a public repo the squash is the one chance to leave the exploratory history out.** Standup is where a wrong secret value, a throwaway credential, and a run of noise commits accumulate, and a squashed feature branch publishes the result rather than the route to it.

## 1. Classify and Catalog

Resolve the repo's type(s) with the [`AUDIT.md`][audit] section 2 detection rules, then write or repair its [`registry/repos.json`][repos] entry: `status`, `types[]`, `groundTruthBranch`, `hasDevelop`, `publish[]`, `requiredSecrets[]`, `consumerModel`, `releaseTrigger`, `workflowModel` (omit to take the `release` default), `configLayout`, and `driftNotes` that describe what the repo **actually is**. Run [`spec/validate.py`][validate] to confirm it classifies cleanly. The registry is ground truth about reality, not intent, and a `validate.py`-clean entry is still false if it disagrees with the live repo.
Expand Down
18 changes: 0 additions & 18 deletions TODO.md
Original file line number Diff line number Diff line change
Expand Up @@ -172,23 +172,6 @@ One pull request reworking the README spec to the hand-crafted PlexCleaner shape
- **Open** - The position of the sections the spec already names, since PlexCleaner places Questions or Issues immediately after the Table of Contents where the spec orders it ninth.
- **Settled** - PlexCleaner's Performance Considerations, Runtime Metrics, Custom Plugins, Testing, Development Tooling, Feature Ideas and Sample Media Files are correctly repo-specific under the recurrence rule in [`spec/section-model.md`][section-model] and stay undeclared.

### Branch Bootstrap in the Standup

One pull request giving [`STANDUP.md`][standup] the branch-creation step it lacks, so an agent stops committing onto whichever branch it finds.

**State** `ready`. **Touches** [`STANDUP.md`][standup]. **Cost** one hub edit, hub-only, since the file is deliberately not carried.

- **State the sequence that avoids every cleanup problem.** Nothing ever has to be cleaned off `main` or `develop`, because nothing reaches them without review.
- **Blocked by** - Nothing.
- **Issue** - [#490][issue-490] covered the human-gated half and is complete, so this is the remaining half rather than the whole gap.
- **Checked** - `develop` at `1ed0cc8` on 2026-08-03, where section 0A covers the prerequisites and nothing says how the branches come into being.
- **Open** - Nothing.
- **Settled** - The sequence is create `main` carrying nothing, create `develop` from it carrying nothing, create the first feature branch from `develop` and do the whole standup there, add the repo to GitHub and apply the config while still on that branch, then open a normal pull request to `develop`.
- **Settled** - A git branch cannot exist without a commit, so carrying nothing means exactly one signed empty root commit, and section 0's signing window applies to it like any other.
- **Settled** - Committing onto `develop` and squashing afterwards does not work, since `non_fast_forward` is set on both `develop` payloads, and Blog was correctly blocked when it tried.
- **Settled** - The protection is uneven, since a `release` repo's `develop` payload carries a `pull_request` rule that blocks a direct commit outright while the operational payload carries only three rules, so on an operational repo only the instruction stands between the agent and an unfixable history.
- **Settled** - It matters on a public repo because the exploratory standup history is where secrets and noise commits accumulate, and squashing the feature branch is the one chance to leave them out.

### Two Project Types and a Shared C++ Style

One pull request extending the type model with the two types the fleet already needs, plus the shared style the `cpp` type has no canonical for.
Expand Down Expand Up @@ -462,7 +445,6 @@ Each was checked against the tree and has nothing left to do anywhere. Closing i
[issue-456]: https://github.com/ptr727/ProjectTemplate/issues/456
[issue-483]: https://github.com/ptr727/ProjectTemplate/issues/483
[issue-489]: https://github.com/ptr727/ProjectTemplate/issues/489
[issue-490]: https://github.com/ptr727/ProjectTemplate/issues/490
[issue-509]: https://github.com/ptr727/ProjectTemplate/issues/509
[issue-519]: https://github.com/ptr727/ProjectTemplate/issues/519
[issue-521]: https://github.com/ptr727/ProjectTemplate/issues/521
Expand Down