Repository navigation
docs(quest): plan per-project forks and the decision paper trail #150
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
3 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,38 @@ | ||
| # [S] Record each project's service fork by repository ID | ||
|
|
||
| ## Goal | ||
|
|
||
| Two enrolled upstreams with the same repository name, such as `alice/app` and | ||
| `bob/app`, each publish through their own service fork. Publication finds a | ||
| project's fork by its stored GitHub repository ID, not by | ||
| `GITHUB_FORK_OWNER/<upstream name>`, so names can never collide or be | ||
| mistaken for one another. | ||
|
|
||
| ## Plan | ||
|
|
||
| Decided 2026-10-19 as a follow-up of bot publication (#145), which looks the | ||
| fork up by the upstream's name: | ||
|
|
||
| - The operator keeps creating each fork by hand in the `GITHUB_FORK_OWNER` | ||
| namespace, under any name (for example `bob-app`). The App gains no | ||
| repository-creation permission. | ||
| - kix records the fork's repository ID per project when it first finds it, | ||
| after verifying that the fork's parent is that project's upstream. Later | ||
| publications use the ID and refuse a fork whose identity or parent has | ||
| changed. | ||
| - How kix first finds a fork under a non-default name (an operator-entered | ||
| name at enrollment, or a scan of the namespace for a fork whose parent is | ||
| the upstream) is an implementation choice; prefer the one with fewer | ||
| GitHub calls and no new permissions. | ||
| - A project with no recorded or discoverable fork keeps today's "provision | ||
| the service fork first" refusal, naming what the operator must create. | ||
| - Disconnecting a project clears its recorded fork. Update the fork steps in | ||
| `cloudflare/GITHUB.md`. | ||
| - Land this in m0 before launch: kix.quest is public in m0, so any enrolled | ||
| repository could collide. | ||
| - Test two same-named upstreams, a fork with a changed parent, and a missing | ||
| fork. | ||
|
|
||
| ## Required | ||
|
|
||
| - [Operator setup](/quest/m0/kix/operator-setup.md) - the fork namespace and live fork behavior this builds on |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,44 @@ | ||
| # [S] Render planning decisions into PRs from recorded answers | ||
|
|
||
| ## Goal | ||
|
|
||
| A planning PR published by kix carries a decision section that the service | ||
| writes from the job's recorded questions and answers, with ✅ on each chosen | ||
| option and any free-text answer. The agent no longer writes its own paper | ||
| trail, so the record cannot be paraphrased or drift from what the maintainer | ||
| actually chose. | ||
|
|
||
| ## Plan | ||
|
|
||
| Decided 2026-10-19 as a follow-up of bot publication (#145), which takes the | ||
| paper trail from the agent's quest files and PR body: | ||
|
|
||
| - The service renders the section from the job's stored questions and | ||
| answers (the decision inbox's prompt contract) when it creates or updates | ||
|
kixelated marked this conversation as resolved.
Resolved
|
||
| the planning PR. Include only answered `agent` questions whose prompt is a | ||
| `decision`, not a `permission` request. Operational question kinds such as | ||
| `account` and `publication` stay out, since they can name runners and | ||
| accounts in a public PR. | ||
| - Prompts and answers are untrusted text. Escaping Markdown is not enough: | ||
| also neutralize GitHub's own semantics, so no `@` mention notifies anyone, | ||
| no `#N`, `owner/repo#N`, or commit reference autolinks, no bare URL links, | ||
| and no closing keyword (`Closes #N`, `Fixes`, `Resolves`) links or closes | ||
| an issue. For example, render all prompt text in code spans or break each | ||
| pattern with a zero-width character. | ||
| - Replace, don't append: the agent's PR body keeps its summary, and the | ||
| service owns the decision section. Re-rendering on later deliveries | ||
| updates the same section in place rather than duplicating it. | ||
| - Quest files still record each settled decision and its reason in their | ||
| Plan, as the guide requires; this changes only the PR's paper trail. | ||
| - Tell agents in kix planning jobs, through the job's own instructions | ||
| rather than the shared skills, not to write the trail. Local agents running | ||
| the skills without kix keep writing their own. | ||
| - Test multi-round interviews, free-text answers, a re-delivery that | ||
| updates the section, and a planning job that hit an account limit, whose | ||
| account question must not appear. Cover hostile prompts with Markdown, | ||
| `@user` and `@org/team` mentions, bare URLs, issue and cross-repository | ||
| references, and closing keywords. | ||
|
|
||
| ## Required | ||
|
|
||
| - [Decision inbox](/quest/m0/kix/prompts.md) - the recorded prompt and answer format this renders | ||
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.