The Coder workspace is the normal case: tea without op, signing via its own SSH signer
3 files changed
+14
-8
No files matched your search
+11
-5
@@ -12,13 +12,16 @@ The workflow files under `.github/workflows/` are read by Gitea unchanged — th
|
||||
|
||||
## `tea`, not `gh`
|
||||
|
||||
Issues and pull requests are driven with `tea`, and only through 1Password:
|
||||
Issues and pull requests are driven with `tea`:
|
||||
|
||||
```bash
|
||||
op plugin run -- tea pr list
|
||||
tea pr list
|
||||
tea pr create --base main --head <branch> --title … --description …
|
||||
```
|
||||
|
||||
A bare `tea` invocation falls back to the wrong identity. Every call costs a 1Password confirmation, so **bundle calls and never poll**.
|
||||
**Work happens in a Coder workspace, and it has no `op`.** That is the normal case, not a broken environment — do not wait for the 1Password CLI and do not propose installing it as a precondition. `tea` carries the workspace's stored login, so anything it creates is authored by the **bot account**; that is accepted, and worth naming in the report when something is opened that way.
|
||||
|
||||
`op plugin run -- tea` is the older instruction and applies only where `op` actually exists. Where it does, every call costs a 1Password confirmation, so bundle calls and never poll.
|
||||
|
||||
## Remotes are named, and `origin` is not one of them
|
||||
|
||||
@@ -33,13 +36,16 @@ There is no `origin`, so `git push` without a remote is ambiguous here. Say whic
|
||||
|
||||
Branch protection on `main` requires a signature, and signatures verify on Gitea. A commit that is not signed does not reach `main`.
|
||||
|
||||
In the Coder workspace this works without any 1Password step: signing runs through the workspace's own SSH signer (`gpg.format = ssh`, `gpg.ssh.program = coder-git-ssh-sign`, `commit.gpgsign = true`).
|
||||
|
||||
Check before opening the PR, not at merge time:
|
||||
|
||||
```bash
|
||||
git log --show-signature -1
|
||||
git log --format='%G?' -1 # must print G
|
||||
git log --show-signature -1 # the long form
|
||||
```
|
||||
|
||||
If `op-ssh-sign` fails, stop and report. Pushing unsigned work only moves the failure to a place where it costs a review.
|
||||
If signing fails, stop and report. Pushing unsigned work only moves the failure to a place where it costs a review.
|
||||
|
||||
## No merge queue — auto-merge takes its place
|
||||
|
||||
|
||||
+2
-2
@@ -75,5 +75,5 @@ Doing it by hand is the same four steps:
|
||||
| `k3d` + `docker` | throwaway clusters |
|
||||
| `kubectl` | everything after the install |
|
||||
| `python3` | the quantity render test reads `values.schema.json` |
|
||||
| `op` + `tea` | issues and PRs — see [Forge and tooling](Forge-and-Tooling) |
|
||||
| `op-ssh-sign` | signed commits, which branch protection requires |
|
||||
| `tea` | issues and PRs — see [Forge and tooling](Forge-and-Tooling). The Coder workspace has **no `op`**, so `tea` is called directly and acts as the bot account |
|
||||
| a working commit signer | branch protection requires signed commits; the Coder workspace signs through `coder-git-ssh-sign` without a 1Password step |
|
||||
+1
-1
@@ -54,7 +54,7 @@ Page names are file names: `outline.md` is the page `outline`. Links between pag
|
||||
## Rules for every commit, PR, issue and comment
|
||||
|
||||
- **No `Co-Authored-By` trailer and no "Generated with Claude Code" footer.**
|
||||
- **Commits must be signed.** Verify the signature before opening the PR. If `op-ssh-sign` fails, stop and report rather than pushing unsigned work — branch protection rejects unsigned commits on `main`, and discovering that at merge time wastes the review.
|
||||
- **Commits must be signed.** In the Coder workspace that needs no extra step — its own SSH signer does it — but verify before opening the PR: `git log --format='%G?' -1` must print `G`. If signing fails, stop and report rather than pushing unsigned work; branch protection rejects unsigned commits on `main`, and discovering that at merge time wastes the review.
|
||||
- **Write new issue references with the Gitea number.** `#n` inside the repo's files means the old GitHub tracker, and Gitea silently resolves a bare `#n` against its own counter — so an old reference can render as a link to something unrelated. See [Forge and tooling](Forge-and-Tooling#issue-numbers-changed-with-the-move).
|
||||
|
||||
## Documentation that is not the wiki
|
||||
|
||||
Reference in new issue
Block a user