Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
026280c
openRepoShape: `--install` records the ref it runs at in `openRepoSha…
Oct 14, 2026
d0cdbf4
install.sh: one line, `curl -fsSL https://github.com/opensoft/openRep…
Oct 14, 2026
319b005
openRepoShape and install.sh, the fix round on #577: `--install` reco…
Oct 15, 2026
322a305
README.md, docs/handbook.html, AGENTS.md and the v1.0.1 release notes…
Oct 15, 2026
868c9bf
docs/release-notes/v1.0.1.md: the "Before tagging" steps are safe to …
Oct 15, 2026
892a041
Merge remote-tracking branch 'origin/l3-564-one-line-install' into l3…
Oct 15, 2026
b2f0be3
tests/readme-cap.d/564.txt: README.md's cap is 1449, raised by 22 for…
Oct 15, 2026
68b999f
docs/handbook.html: the consent rules say every action the tool OFFER…
Oct 15, 2026
53416db
Merge remote-tracking branch 'origin/main' into l3-564-carry-to-main
Oct 15, 2026
a155945
Merge remote-tracking branch 'origin/main' into l3-564-carry-to-main
Oct 15, 2026
c1e6b82
README.md: the NOTE says the preflight installs nothing without the t…
Oct 15, 2026
5191f0e
docs/handbook.html: the consent rules say install.sh asks nothing bef…
Oct 15, 2026
25b2aee
Merge branch 'main' into l3-564-carry-to-main
brettheap Oct 15, 2026
b23b245
Merge remote-tracking branch 'origin/main' into l3-564-carry-to-main
Oct 15, 2026
d5011b1
Merge branch 'main' into l3-564-carry-to-main
brettheap Oct 15, 2026
f9b07c9
Merge remote-tracking branch 'origin/main' into l3-564-carry-to-main
Oct 15, 2026
3d8fa05
Merge branch 'main' into l3-564-carry-to-main
brettheap Oct 15, 2026
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
10 changes: 5 additions & 5 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,13 @@ types `yes` at its prompt; you never answer it for them. No terminal: section 2.
**Never answer an install prompt.** The preflight asks `Type yes to continue:`
for each thing it offers to run — an install, `gh auth login`, `gh auth
setup-git`. The human types it; you never install software or log in for them.
The one-line install (`install.sh`) is theirs to run: relay it, never run it.

**Never pass `--allow-upstream-org` on your own initiative.** It guards only
`--org opensoft` itself — scaffolding into opensoft's own namespace, the
upstream owner of openRepoShape. If setup.sh refuses because the organisation
you were given resolves to opensoft, STOP and relay what it said; the fix is
almost always an explicit `--org <their-org>`. Pass `--allow-upstream-org`
only if the human asks for it in those words.
`--org opensoft`, the namespace of openRepoShape's upstream owner. If setup.sh
refuses because the organisation you were given resolves to opensoft, STOP and
relay what it said; the fix is almost always an explicit `--org <their-org>`.
Pass `--allow-upstream-org` only if the human asks for it in those words.

**Never bypass an organisation ruleset.** A ruleset that refuses a direct push
to `main` is doing its job; the exit is in the tool's own failure message (for
Expand Down
52 changes: 37 additions & 15 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -102,10 +102,10 @@ is on no `PATH` by default, and its installer finishes by printing the line that
puts it there — run that line, or the next shell cannot find `brew`. Then `brew
install gh`, and `brew install git-filter-repo` only if you are ADOPTING an
existing repository rather than scaffolding a new one. The stock `/bin/bash` is
3.2 and is enough: `setup.sh` and the `openRepoShape` command are written to use
no syntax newer than that, though CI runs on Linux only and no run of it checks
them against bash 3.2. That the login shell is zsh changes nothing — both entry
points are run under `bash` explicitly.
3.2 and is enough: `setup.sh`, `install.sh` and the `openRepoShape` command are
written to use no syntax newer than that, though CI runs on Linux only and no
run of it checks them against bash 3.2. That the login shell is zsh changes
nothing — all three entry points are run under `bash` explicitly.

</details>

Expand Down Expand Up @@ -174,14 +174,14 @@ run the four steps below INSIDE the WSL shell.
> opens with a preflight that names what is missing and, for `gh`, its login and
> its credential helper, prints the command for THIS machine and asks once —
> `Type yes to continue:`, the same words it asks everything else with — then
> runs it and carries on. Nothing is installed without that typed `yes`; `--yes`
> does not answer it, and with no terminal attached there is no offer at all.
> Homebrew is the one install never run for you: on a Mac without `brew` the
> preflight names <https://brew.sh> and stops there. To check a machine and
> stop, creating nothing, run `openRepoShape --preflight` — `py setup-project.py
> --preflight` on Windows — which exits 0 when everything is present and 1 when
> it is not (`openRepoShape --preflight` exits 2 when `git` or a Python 3.9 or
> newer is missing).
> runs it and carries on. The preflight installs nothing without that typed
> `yes`; `--yes` does not answer it, and with no terminal attached there is no
> offer at all. Homebrew is the one install never run for you: on a Mac without
> `brew` the preflight names <https://brew.sh> and stops there. To check a
> machine and stop, creating nothing, run `openRepoShape --preflight` —
> `py setup-project.py --preflight` on Windows — which exits 0 when everything
> is present and 1 when it is not (`openRepoShape --preflight` exits 2 when
> `git` or a Python 3.9 or newer is missing).

**1. Install the GitHub CLI**, `gh`. The official instructions are at
<https://cli.github.com/> (and <https://github.com/cli/cli#installation>):
Expand Down Expand Up @@ -225,7 +225,22 @@ offer to configure git's credential helper, or run `gh auth setup-git`: the
first commits go up with a plain `git push` over HTTPS, and without it the
three repositories are created and the push fails.

**3. Install the `openRepoShape` command**, once:
**3. Install the `openRepoShape` command**, once, in one line:

```sh
curl -fsSL https://github.com/opensoft/openRepoShape/releases/latest/download/install.sh | bash
```

`install.sh` is attached to every release and installs the newest, with no `gh`
and no login. Its command is PINNED to the release tag, recorded in
`openRepoShape.ref` beside it: `setup.sh` and the standard are fetched at that
tag, not at main. It installs `git-filter-repo` with `pipx` where it can, or
prints the command, and ends with `openRepoShape --preflight`. `install.sh`
itself never runs `sudo`; the preflight it ends with offers what is missing,
each behind a typed `yes` at your terminal. `| bash -s -- v1.0.1` names a
release; the same line again upgrades.

By hand, the same command at main, which records no ref and follows main:

```sh
gh api repos/opensoft/openRepoShape/contents/openRepoShape \
Expand All @@ -239,7 +254,7 @@ curl -fsSL https://raw.githubusercontent.com/opensoft/openRepoShape/main/openRep
| bash -s -- --install
```

It installs ONE command into `~/.local/bin`, idempotently — a second run
Each way installs ONE command into `~/.local/bin`, idempotently — a second run
prints `unchanged` — and prints the `export PATH=…` line if that directory is
not on `PATH`. The estate verbs `park` and `resume`, for [carrying in-flight
work](#carrying-in-flight-work-to-another-workstation), are
Expand Down Expand Up @@ -380,7 +395,13 @@ records as whose act the election was, and it defaults to the `gh` login.

#### Install the command

Two ways in, the short one first. Install `openRepoShape` as a command:
Two ways in, the short one first. Install the command as step 3 above does:

```sh
curl -fsSL https://github.com/opensoft/openRepoShape/releases/latest/download/install.sh | bash
```

or by hand, at main, through the API:

```sh
gh api repos/opensoft/openRepoShape/contents/openRepoShape \
Expand Down Expand Up @@ -1394,6 +1415,7 @@ scripts/path_classify.py the classifier over the path policy
scripts/shape_materialize.py the ONE materializer, used by both tools
scripts/validate-repository-naming.py
openRepoShape installs itself as a command; runs setup.sh
install.sh the one-line install: a release, pinned
setup.sh the shim: find an interpreter, hand over
setup-project.py THE FLOW, and the Windows way in (no bash there)
scaffold-project.py creates the three repositories and the pins
Expand Down
14 changes: 13 additions & 1 deletion docs/cli.md
Original file line number Diff line number Diff line change
Expand Up @@ -152,10 +152,22 @@ opensoft/openRepoTools', and its own installer places them:
curl -fsSL https://raw.githubusercontent.com/opensoft/openRepoTools/main/openRepoTools | bash -s -- --install

$OPENREPOSHAPE_REPO owner/name to fetch from (default opensoft/openRepoShape)
$OPENREPOSHAPE_REF the ref to fetch it at (default main)
$OPENREPOSHAPE_REF the ref to fetch it at (default: the ref --install
recorded, else main)
$OPENREPOSHAPE_ORG the organisation, when --org is not given
$OPENREPOSHAPE_BIN_DIR where --install puts it (default ~/.local/bin)
$OPENREPOSHAPE_SETUP_SH run this setup.sh on disk instead of fetching one
$OPENREPOSHAPE_RECORD_REF 1: --install records $OPENREPOSHAPE_REF (below)

`--install` RECORDS A REF ONLY WHEN ASKED: with $OPENREPOSHAPE_RECORD_REF=1
it writes $OPENREPOSHAPE_REF to `openRepoShape.ref` beside the command it
places, which is what the one-line installer (install.sh) does with the
release tag it installs. The installed command then stays on that ref: it
fetches setup.sh at it, setup.sh clones the standard at it (`--shape-ref`),
and `--doctor` checks its clone out at it. $OPENREPOSHAPE_REF set for one run
still wins, and `--version` prints the ref in force. A command re-installing
itself keeps its own record; any other install records nothing, removes a
record already there, and follows main.

`--doctor [<path>] [--json] [--placement-plan <file>]` runs `shape-doctor.py`
over <path> (default `.`) and prints one row per check and ONE verdict:
Expand Down
Loading
Loading