diff --git a/Forge-and-Tooling.md b/Forge-and-Tooling.md index 8e2fd54..a0a18f4 100644 --- a/Forge-and-Tooling.md +++ b/Forge-and-Tooling.md @@ -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 --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 diff --git a/Local-Development.md b/Local-Development.md index 33b4721..5c0356f 100644 --- a/Local-Development.md +++ b/Local-Development.md @@ -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 | diff --git a/Workflow.md b/Workflow.md index fde8a29..514bd97 100644 --- a/Workflow.md +++ b/Workflow.md @@ -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