Twelve scripts retired, three domains registered. `reach` now covers nine. generate: `generate-brands` and `generate-corporations` were the second and third copies of the same 24-line build-if-missing-then-exec bash `tooling/atlas` carried, so they collapsed into `core.process.cargo_binary` rather than being ported. `import_economics` shelled out to the first of those, so it now calls that helper — `generated_brands.toml` comes back byte-identical, and the stamp registry swaps the retired wrapper for `core/process.py`. pr: `watchlist-diff` derives its watched set from `generator_sources.py` instead of restating it, so it cannot drift from the stamp check. dev: the environment scripts split decision from performing, per D-263's guarded-exec rule. `godot_plan()` and `worktree_plan()` decide what would happen; `install_godot()`, `install_rust()` and `setup_worktree()` do it. `tooling/test_environment.py` pins the version pin, both override precedences, the already-current skip, the platform refusal and both worktree refusals — none of them performed. `make setup` now installs reach first, since the targets that install rust and godot are reach verbs. Two live bugs found while porting: - The clerk read its decision index from `decisions/README.md`, a path that stopped existing when the DQR tree moved to `governance/`. Every clerk agent has been grepping blind; its prompt pointed at the same dead directory. - The conformance exec-check matched any `x.system()` regardless of receiver, so `platform.system()` read as `os.system()`. Narrowed and re-proved against a real mutant. `process.run` gains `input=`, `timeout=` and a `ProcessTimeout` subclass so a killed run stays distinguishable from a verdict. The pre-push hook no longer merges the clerk's stderr into its stdout — under streaming the last merged line is a JSONL event, which would read as an unrecognised verdict and block. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
55 lines
3.0 KiB
Markdown
55 lines
3.0 KiB
Markdown
# Gitea Access (tea CLI)
|
|
|
|
**Never access the Gitea API directly** — use the `tea` CLI with all required flags to bypass interactive mode.
|
|
|
|
Always pass `--login schweitz --repo jpmschweitzer/settled-reach --output simple` to avoid TTY prompts.
|
|
|
|
```bash
|
|
# List open PRs
|
|
tea pr list --login schweitz --repo jpmschweitzer/settled-reach --state open --output simple
|
|
|
|
# View a PR with comments
|
|
tea pr --login schweitz --repo jpmschweitzer/settled-reach --comments -o simple <PR_NUMBER>
|
|
|
|
# Post a comment on a PR (or issue) — use @filepath for long comments
|
|
reach pr comment <NUMBER> @/tmp/review.md
|
|
reach pr comment <NUMBER> "short inline comment"
|
|
|
|
# Approve a PR
|
|
tea pr approve --login schweitz --repo jpmschweitzer/settled-reach <PR_NUMBER>
|
|
|
|
# List issues
|
|
tea issue list --login schweitz --repo jpmschweitzer/settled-reach --state open --output simple
|
|
```
|
|
|
|
## Key rules
|
|
|
|
- **All flags must be explicit** — omitting `--login` or `--repo` triggers interactive prompts that crash in Claude Code (no TTY). **One exception: `tea pr create` must OMIT `--repo`** — see Pull requests below.
|
|
- **Use `--output simple`** for machine-readable output (no table borders)
|
|
- **For comments, use `reach pr comment <number> @/tmp/file.md`** for long comments (write to file first, then pass `@filepath`). Short inline strings also work: `reach pr comment <number> "body"`. The `@filepath` form avoids `$()` subshells which break permission matching.
|
|
- **`tea pr reject` does not work on your own PRs** — use `tea comment` instead
|
|
- **Run `tea` from the main checkout, never a linked worktree** — its go-git can't read a worktree's `.git` *file* and errors with "local/remote repository required". `tea pr close`/`comment` take explicit `--login`/`--repo` so cwd barely matters for them, but `tea pr create` resolves the repo from the **local checkout's remote** (see below) — that is why it must run from the main repo.
|
|
- **Never delete protected branches:** `main`, `maintenance`, `server`, `client`, `copy`, `audio`, `visual`, `ci` are protected on Gitea. Do not use `tea pr clean`, `git push --delete`, or `git branch -D` on these branches.
|
|
|
|
## Pull requests
|
|
|
|
**Use `tea` (Gitea CLI), not `gh` (GitHub CLI).** The remote is Gitea at `https://git.schweitz.net` (the `.internal` vhost was retired in the 2026-07 proxy migration; AdGuard hairpins the `.net` name to the LAN).
|
|
|
|
`tea pr create` is the one command that must **omit `--repo`**: an explicit
|
|
`--repo <slug>` makes tea skip local-repo setup, but `pr create` unconditionally
|
|
needs the local repo handle (it checks whether the head branch is pushed) and
|
|
dies with `local repository required` — the flag *causes* the failure it
|
|
suggests fixing. Run it from the **main checkout** and let tea infer the repo
|
|
from `origin`'s URL. (This inference is also why the login's `ssh_host` in
|
|
`~/.config/tea/config.yml` must match the remote host — currently
|
|
`git.schweitz.net`.)
|
|
|
|
```bash
|
|
tea pr create \
|
|
--login schweitz \
|
|
--title "feat(scope): short description" \
|
|
--description "PR body here" \
|
|
--base main \
|
|
--head branch-name
|
|
```
|