Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .claude/skills/quest-iterate/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
name: quest-iterate
description: Iterate on an open PR to settle its open decisions, fix CI and review findings, and push.
---

Run `quest skill iterate` and follow its output.
If `quest` is not installed, follow https://github.com/kixelated/quest/blob/main/SETUP.md first.
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Commits

PRs into `main` are squash-merged, so the PR title becomes the commit subject and the PR description becomes the body in `git log`.
PRs into any other branch (`release`, a questline) use a merge commit, so their history survives until they land.
PRs into `release` use a merge commit, so their history survives until they land.

- Use conventional-commit subjects (`feat(watch): ...`, `fix: ...`, `chore: ...`, `docs: ...`)
- AI commit attribution goes in a `Co-Authored-By:` trailer, not the commit body.
Expand Down
8 changes: 4 additions & 4 deletions flake.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
# The quest CLI, which also serves the quest guide and skills the stubs in
# .claude/skills call. Bump the rev to upgrade them.
quest = {
url = "github:kixelated/quest/362489bcf02833d8674cff339463b086442cf92d";
url = "github:kixelated/quest/677f8d11aa2fb71828ac7760bfa4bbf9d4165594";
inputs.nixpkgs.follows = "nixpkgs";
inputs.flake-utils.follows = "flake-utils";
inputs.crane.follows = "crane";
Expand Down
66 changes: 49 additions & 17 deletions quest/m1/quest-flat-lines.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,23 +11,55 @@ branches reaches `main`, and those branches retire.

kixelated/quest#44 dropped questline branches, `quest branch`, and
`quest ready --remote`; kixelated/quest#51 changed the import skill to treat a
report's fix as a claim and plan each issue fully. moq still pins the quest
input in `flake.nix` from before both.

Decided (2026-10-04): a quest of its own, not a routine pin bump, because 16
questline branches carry merged child work that is not on `main`
(`git ls-remote origin 'refs/heads/quest/*README'`).

- Bump the `quest` input and run `quest check` with the new CLI; fix what it
reports.
- For each questline branch, land its accumulated work on `main` through its
existing umbrella PR, or a new one, then delete the branch. A branch whose
work cannot land yet is decided with the maintainer, not left orphaned.
- Add the `quest-takeover` skill stub beside the other `.claude/skills/quest-*`
stubs, and decide with the maintainer whether it replaces the existing
`takeover` skill.
- Update `AGENTS.md` and `CONTRIBUTING.md` only where they describe questline
branches, with the maintainer's approval, as both files require.
report's fix as a claim and plan each issue fully. moq pins kixelated/quest
`677f8d1`, which includes both; `quest check` passed on the tree unchanged.

Decided 2026-10-04:

- A quest of its own, not a routine pin bump, because questline branches
carried merged child work that is not on `main`.
- Goal confirmed: questlines become planning groups whose children PR straight
to `main`. Finishing any line's remaining children is a non-goal.
- Bump the CLI now, not after the lines land, because the point is to get rid
of line branches.
- Each code-carrying line branch gets `main` merged in and its umbrella PR
marked ready; the maintainer lands them later with `/quest-complete`. Merging
`main` in is less churn than re-cutting each child, and finishing a line
first would keep its branch alive.
- Code-free lines (quic #3975, cluster-routing #4654, broadcast-epoch #4805)
are closed and their branches deleted; their children PR to `main`. Nothing
on them needs landing.
- Nested lines (rs2ts/sans-io #4438, archive/track-timeline #4255) fold into
their parent branch, then close, so each tree lands through one PR.
- The quest CLI's PR-adoption skill is installed as `quest-iterate` and
replaces the `takeover` skill, so one skill covers it. kixelated/quest#52
renamed it upstream to match.
- `CONTRIBUTING.md` drops ", a questline" so the merge-commit rule names only
`release`.

Interview paper trail (✅ marks the choice):

- Goal confirm: ✅ Confirm / Also finish lines / Bump only.
- Landing default: Land partial now / Re-cut per child / Finish then land /
✅ (user) "merge main into the branch, mark PR as ready for review, then I'll
do quest-complete later".
- Split: Per-line quests / One quest / Batch by size / ✅ (user) "spawn
sub-agents to merge main for all of them, then mark as ready".
- Order: Bump last / Bump first / Bump first, sync quest files / ✅ (user) "the
idea is to get rid of line branches", then confirmed ✅ Bump now.
- Empty lines: ✅ Close and retarget / Merge main and ready.
- Nested: ✅ Fold into parent / Retarget to main / Merge main, keep nesting.
- Takeover: Add stub, replace takeover / Add stub, keep both / Skip / ✅ (user)
"add stub, replace takeover, rename it to quest-iterate".
- CONTRIBUTING: ✅ Yes, edit it / Leave it.

Remaining:

- Land each line's umbrella PR with `/quest-complete`, then delete its branch:
#4162 audio-jitter-target, #4403 wildcard, #4034 archive (with #4255 folded
in), #4039 auth, #4079 cpp, #4519 ffi-shape, #4080 obs-moq-video, #4133 qos,
#4437 rs2ts (with #4438 folded in), #4653 test-flakes-2, #4180
transport-upgrade, #4640 tstd.

Done when `flake.nix` pins the new quest, no `quest/*README` branch remains,
and `quest check` passes.
Expand Down
Loading