docs(kb): the TUI composed-row rule, and a trap in our own remote topology
CI / Build all bundles (push) Has been cancelled
CI / Test and lint (host) (push) Has been cancelled
CI / wasm32 check (browser bundle crates) (push) Has been cancelled
CI / Browser JS unit tests (node --test) (push) Has been cancelled
CI / Knowledge base consistency (push) Has been cancelled
CI / Lint the harness crate (push) Has been cancelled
CI / Browser harness (OPFS contract + shell) (push) Has been cancelled
CI / Deploy to GitHub Pages (push) Has been cancelled
CI / Build all bundles (push) Has been cancelled
CI / Test and lint (host) (push) Has been cancelled
CI / wasm32 check (browser bundle crates) (push) Has been cancelled
CI / Browser JS unit tests (node --test) (push) Has been cancelled
CI / Knowledge base consistency (push) Has been cancelled
CI / Lint the harness crate (push) Has been cancelled
CI / Browser harness (OPFS contract + shell) (push) Has been cancelled
CI / Deploy to GitHub Pages (push) Has been cancelled
PRs #145/#149. New gotcha 50: `fill_line` takes a `Keeps` because the three rows sharing a line disagree about which side yields, and the one key table on screen is the one derived from the keymap — with the import wizard as the deliberate inverse, since its derived line comes from the mode keymap while the real keys are per-step. AGENTS.md gains the remote trap, and it is the orchestrator's fault: briefs said "merge `main`", and because `origin`/`gitea` take `main` directly while GitHub gets branches, `origin/main` runs ahead of `gh/main`. An agent doing the habitual thing pulled four unmerged commits — another PR's whole diff — into a branch based on `gh/main`. Nothing in CI can see it; the result compiles and passes. Codex caught it. The window is transient, which makes it worse: the hazard is absent exactly when you would think to check. Closes improvise-t14d, improvise-rr8n and improvise-vgp4 — the last stale-open, fixed by94a3d17two days before it was filed. Measured on main at78a7bbf: 1700 passed / 0 failed / 7 ignored over 38 binaries, longest single binary 0.69s. kb_consistent: TRUE, 792 facts. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FC2jVn8Au7E9JPkw6bwXXH
This commit is contained in:
@@ -139,6 +139,21 @@ merges agent branches into its *local* `main` to integrate and run the gates —
|
||||
that is how conflicts get found early — but the push is a branch push, not a
|
||||
`main` push. `origin` and `gitea` are mirrors and take `main` directly.
|
||||
|
||||
**So `origin/main` runs ahead of `gh/main`, and a branch destined for a GitHub
|
||||
PR must merge `gh/main` — never `origin/main`.** This is a trap in this repo's
|
||||
own topology rather than a slip: the two remotes are both spelled `main`, and
|
||||
nothing about `git merge origin/main` looks wrong. The session-completion
|
||||
protocol below literally says `git merge origin/main`, which is right for
|
||||
`main` itself and wrong for a PR branch. It cost a review round on PR #145,
|
||||
where four unmerged commits — including another PR's whole diff — were pulled
|
||||
into a branch based on `gh/main` and had to be rebuilt by cherry-picking.
|
||||
ChatGPT Codex caught it; nothing in CI could, because the result compiles and
|
||||
passes. The tell is a PR diff naming files the ticket has no reason to touch,
|
||||
so **read your own PR's file list before asking for review**. Note the window
|
||||
is transient — the two remotes are equal immediately after the orchestrator
|
||||
syncs — which makes it worse, not better: the hazard is absent exactly when
|
||||
you would think to check for it.
|
||||
|
||||
This is easy to drift out of, because merging locally and pushing feels like
|
||||
finishing. It happened in this repo: 27 commits across six agent branches —
|
||||
including a new crate, a new protocol type, and a type moving between crates —
|
||||
|
||||
Reference in New Issue
Block a user