Repository navigation
feat(worker): start and link epics on their README branch - #183
Conversation
Quest-Claim: 2b961c2f95e38c6d
kix used an epic's directory as its branch and board page, which git cannot create once a child's branch exists. Share the CLI's rule from the core (questBranch, and branchQuest for the inverse) so the start job, claim mapping, and board links all use quest/<path>/README. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Implementation pushed, and (Written by Claude Opus 5.5) |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
# Conflicts: # src/cli/main.ts
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: e2bafd1657
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
A quest X.md now collides with any document under X/, matching how git refs nest. This rejects a README directory under an epic, whose child branches would block the epic's .../README branch. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts: # cloudflare/src/github/state.ts # cloudflare/test/projects.test.ts # quest/m0/kix/README.md # src/cli/claims.ts
|
Enabling squash auto-merge at e3e955f.
(Written by Claude Opus 5.5) |
|
Main moved when kixelated/quest#190 landed, so I merged it into this branch as 9061eb6. The only conflict was in (Written by Claude Opus 5.5) |
Completes
quest/m0/kix/epic-branches.md(plan at d3d721c), a follow-up of kixelated/quest#169.kix named an epic's branch and board page after its directory (
quest/m0/foo). The CLI names it after its README (quest/m0/foo/README). Git can't createrefs/heads/quest/m0/foowhile anyquest/m0/foo/<child>branch exists, so kix couldn't start an epic once one of its children was claimed. kix also didn't recognize claims and PRs on the CLI's/READMEbranch.Changes
questBranch(path)moves fromsrc/cli/claims.tsintosrc/core/doc.ts. Beside it is its inverse,branchQuest(branch), which is the branch plus.md. Both are exported fromquest/core. The CLI (main,start,move,landed) imports them from the core, so the CLI and the Worker share one copy of the rule.cloudflare/src/jobs/routes.ts): the branch is nowquestBranch(target), so an epic starts onquest/<path>/README.associatedQuestincloudflare/src/github/state.ts): a branch maps only tobranchQuest(branch). A bare directory branch such asquest/m0/foomatches nothing.questHrefin bothcloudflare/src/board/model.tsandcloudflare/src/inbox/model.tsbuilds the page fromquestBranch. An epic's page is now.../board/quest/m0/foo/README.findDocresolves a page only throughbranchQuest, so each document has one URL.quest check(src/core/rules.ts): a questX.mdnow collides with any document underX/, not onlyX/README.md. Git can't hold a branch beside a branch nested under it, so this rejects every tree whose branches would nest. That includes a directory namedREADMEunder an epic (quest/m0/foo/README/README.md), whose branches would block the epic'squest/m0/foo/READMEbranch.quest/m0/kix/README.md. Stored directory-form branches need no migration, because kix has no production data.Decisions
findDocused to accept both.../quest/m0/fooand.../quest/m0/foo/READMEfor an epic; now only the README form resolves. Each page keeps one URL that matches its branch, and with no production data there are no saved links to break. A lenient lookup or a redirect was considered and declined.READMEdirectory under an epic is now rejected (settled by the maintainer, from the Codex review thread). This reverses the rule from kixelated/quest#94, which accepted it as having a distinct path from its parent README. That was true for paths, but now that an epic's branch isquest/m0/foo/README, a child branch such asquest/m0/foo/README/READMEsits under it. Git can't create the epic's branch while a child branch exists, and the merge path leaves head branches behind, so starting the epic would fail on every retry. Rejecting the tree inquest checkwas chosen over a different branch encoding, which would break the rule that a branch is its path without.md. The test intest/tree.test.tsnow expects the rejection.Validation
just check: passed.just test: passed. Vitest ran 390 tests (2 skipped) and the Worker suite ran 315. The shell suites and the lifecycle checks on both builds passed too.handedBackinto the core in kixelated/quest#182 and added anupstreamimport. The conflicts were in imports insrc/cli/main.ts,src/cli/claims.ts,cloudflare/src/github/state.ts, andcloudflare/test/projects.test.ts, which now import both, and inquest/m0/kix/README.md, which drops both finished entries.associatedQuestkeepsbranchQuest.quest check --base origin/main --branch quest/m0/kix/epic-branches: passed.quest/m0/epic/README.mdwhilequest/m0/epic/childis claimed creates a job onquest/m0/epic/README, and the claimed child stays unstartable.associatedQuestmapsquest/epic/READMEto the epic and a child branch to the child, and maps the barequest/epicto nothing./README, and its directory page no longer resolves.quest checkrejects aREADMEdirectory under an epic, and a quest with any document under its path.README-directory test intest/tree.test.tsnow expects a rejection, and epic links in the board, map, inbox, and Markdown tests.Suggested follow-ups
quest/m0/kix/recovery.md, which touchescloudflare/src/github/state.ts. Resolve that conflict by keepingbranchQuest.(Written by Claude Opus 5.5)
🤖 Generated with Claude Code