jj is misconfigured: trunk() points at GitHub's orphan commit #29
Labels
No labels
blocked
conflicted
curated
in-progress
in-review
needs-decision
No milestone
No project
No assignees
1 participant
Due date
No due date set.
Dependencies
No dependencies set
Reference
larandar/flaky-mesh#29
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Law 2 says "Local enforcement: jj
immutable_heads()extended withtags()" and law 12 assigns that bootstrap to the devshell doctor. Neither exists — and the default that fills the gap is actively wrong.Measured
jj's default
trunk()only ever matchesorigin/upstream, so it found GitHub's unrelated bootstrap commit — the very one the Forge Flow page flags for deliberate reset — and never looked atforge.Consequences
immutable_heads()protects nothing real. No actual commit is immutable, so law 2's tag horizon is unenforced locally and--ignore-immutableguards against nothing.jj log's default revset anchors on a disconnected commit.jj new trunk()/jj rebase -d trunk()would target the wrong graph entirely.mainreads divergent because two unrelated histories claim one bookmark name.The fix
Remote-agnostic, because remote names are a local choice — this repo has
forge+origin, while agit cloneof a lar.ad repo calls the forgeorigin:latest()picks the live bookmark over the stale one without being told which is which — verified: onmainit selects4cc81493@forgeover the GitHub orphan.Two blockers, in order
fastlanebookmark, sotrunk()would resolve toroot(). The Forge Flow model requires one.~mine()would freeze the entire repo today.jj user.emailis[email protected]andmine()matches 0 of 83 commits. Author emails present:[email protected](51),[email protected](17),[email protected](7),[email protected](4),[email protected](1),[email protected](1). Onlyomofollows AGENTS.md's<persona> <[email protected]>convention — three of those identities are harness defaults that leaked through. Thetrunk()..prefix normally bounds that scan, but withtrunk()degenerating toroot()the bound vanishes.So the
~mine()clause lands after fastlane exists and authorship is consistent, not before.Config cannot be committed
jj refuses to read config from inside the working copy — "For security reasons, they are not located inside the workspace" — because a tracked config carries
[aliases]andui.editor, so cloning would execute the author's commands. All three scopes live under~/.config/jj/;.jj/repo/config.tomlno longer exists in 0.43. The doctor applies it viajj config set --repo, idempotently, exactly as law 12 describes.Acceptance
user.emailis a persona address and fails loudly otherwisetrunk()resolves to a forge bookmark, never to GitHubjj git remote removealso forgets bookmarks, and rewritingoriginwould clobber personal forksRelated: #22 (build queue — this is the "repo jj config + devshell doctor" box), dendrite#9 (the same doctor, written there first).