Skip to content

docs(context): ! marks a breaking API or wire change, not a behavior change - #595

Merged
kixelated merged 1 commit into
mainfrom
docs/bang-is-api-breaking
Nov 10, 2026
Merged

kixelated merged 1 commit into
mainfrom
docs/bang-is-api-breaking

Conversation

@kixelated

@kixelated kixelated commented Nov 10, 2026 •

Copy link
Copy Markdown
Collaborator

quest context's Public API rule said only "a breaking change marks its title with !", and agents marked behavior changes too: of the 53 commits that edited a MIGRATE.md in moq-dev/moq since 2026-11-03, 38 carried !. The rule now names what breaks (the public API or wire) and says a behavior change alone takes no ! (user, 2026-11-09: "! is for breaking API changes, not behavior changes").

assets/CONTEXT.md grows from 9,612 to 9,676 characters, within the 10,000 Claude Code shows.

Impact

Public API: none. Wire: none. quest context prints the reworded rule.

Decisions

  • Rule wording: ✅ "A breaking change to the public API or wire marks its title with ! and says how to migrate; a behavior change alone takes no !." (rejected: the old "A breaking change marks its title with !", which agents read as covering behavior changes; "behavior changes take no !", which drops "alone" and would suggest a change that breaks the API and also changes behavior takes no ! either). Reason: the user's 2026-11-09 instruction.
  • Taking over this draft: ✅ take it over in this session (rejected: wait for its starter, which has been quiet since 2026-11-10T05:43:02Z). Reason: the user approved the takeover. The draft had no ## Waiting heading, so quest iterate treated it as its starter's; a hand-back heading was added to take it, and that heading is removed here.
  • Approach: ✅ keep the one-line reword in assets/CONTEXT.md. The rule already lives there, and the user asked for this wording, so no other placement was weighed.

Validation

  • just install in the Nix dev shell at 43c5ace: passed.
  • quest gate just check at 43c5ace: passed (typecheck, Prettier, 35 quest documents and 4 example documents, actionlint, shellcheck, shfmt, nixfmt).
  • quest gate just test at 43c5ace: passed (vitest: 33 files, 1183 tests passed, 5 skipped; lifecycle, installer, and install-check regression tests passed). The log shows signal-exit lines from the gate's own tests, and the run exited 0.
  • quest context prints the reworded rule.

Models

Size: XS
Implementer: Claude Code, claude-fable-5-2, medium effort
Implementer: Claude Code, claude-haiku-5-5, high effort (iterate, XS)

(Written by Claude Haiku 5.5 with high)

🤖 Generated with Claude Code

Review

Rewritten by quest review after each round.

  • Reviewer: Codex, gpt-6.1-sol, low effort
  • Session: 01a1c3fa-e6d1-7462-a22b-f6d758f6b113, round 1
  • Head: 43c5ace
  • Base: origin/main at 25f58e5
  • Score: 10/10, This focused wording change clarifies when breaking-change notation is required and introduces no code or runtime changes.
  • Findings: none

…change

Co-Authored-By: Claude <noreply@anthropic.com>
@pullfrog

pullfrog Bot commented Nov 10, 2026

Copy link
Copy Markdown

Pullfrog  | Review this ➔

@kixelated
kixelated marked this pull request as ready for review November 10, 2026 16:23
@coderabbitai

coderabbitai Bot commented Nov 10, 2026

Copy link
Copy Markdown

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 21 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

Learn how review limits work.

Review configuration:

Run configuration

  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 8e26b868-344d-4fc2-b3b5-8f014d1dd565
Commits

Reviewing files that changed from the base of the PR and between 25f58e5 and 43c5ace.

Files selected for processing: 1

  • assets/CONTEXT.md
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

@kixelated kixelated left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Automated review by review (OpenAI)

Reviewed commit: 43c5ace

No actionable findings. The single-line change in assets/CONTEXT.md:43 clearly limits ! to public API or wire breakage, while “alone” preserves the case where a behavior change also breaks the API. The surrounding migration requirement remains intact. Overall direction matches the stated intent.

Verification limits: GitHub-only static review of the complete patch and surrounding text. Confirmed the fetched file contains 9,676 characters, below the stated 10,000-character limit; did not independently run tests or quest context. Rechecked open/non-draft state, full head SHA and reviews immediately before posting.

@kixelated
kixelated added this pull request to the merge queue Nov 10, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Nov 10, 2026
@moq-bot

moq-bot Bot commented Nov 10, 2026

Copy link
Copy Markdown
Contributor

quest land watch: the merge queue removed this pull request at 43c5ace because its merge_group build failed (failed_checks).

The land fixer works on it in the background, and the watcher re-enqueues it at the back of the queue once it is fixed or judged flaky, or hands it back here with what it needs.

Queue / Queue build / Build (job) failure at step Test:

…efore any build�[33m 1175�[2mms�[22m�[39m
     �[33m�[2m✓�[22m�[39m a held pick keeps its place unbuilt, and stale queue branches and their runs are cleared on the first pass�[33m 1374�[2mms�[22m�[39m
     �[33m�[2m✓�[22m�[39m a drop interrupted before its comment is finished on the next pass, once�[33m 993�[2mms�[22m�[39m
     �[33m�[2m✓�[22m�[39m the land fixer's requeue arms auto-merge pinned to the head, at the back of the queue�[33m 3798�[2mms�[22m�[39m

�[31m⎯⎯⎯⎯⎯⎯⎯�[39m�[1m�[41m Failed Tests 1 �[49m�[22m�[31m⎯⎯⎯⎯⎯⎯⎯�[39m

�[41m�[1m FAIL �[22m�[49m test/review.test.ts�[2m > �[22manything but the head changing, such as a removed REVIEW.md, starts a new session that reviews it all
�[31m�[1mError�[22m: Test timed out in 5000ms.
If this is a long-running test, pass a timeout value as the last argument or configure it globally with "testTimeout".�[39m
�[90m �[2m❯�[22m forEach native:�[2m1:11�[22m�[39m
�[36m �[2m❯�[22m <anonymous> test/review.test.ts:�[2m1328:3�[22m�[39m
    �[90m1326|�[39m   ssh_url: `git@github.com:${login}/widget.git`,
    �[90m1327|�[39m  });
    �[90m1328|�[39m  vi.stubEnv("GH_TOKEN", "token");
    �[90m   |�[39m   �[31m^�[39m
    �[90m1329|�[39m  vi.stubGlobal("fetch", async (input: URL, init?: RequestInit) => {
    �[90m1330|�[39m   const url = new URL(input);

�[31m�[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/1]⎯�[22m�[39m


�[2m Test Files �[22m �[1m�[31m1 failed�[39m�[22m�[2m | �[22m�[1m�[32m33 passed�[39m�[22m�[90m (34)�[39m
�[2m      Tests �[22m �[1m�[31m1 failed�[39m�[22m�[2m | �[22m�[1m�[32m1190 passed�[39m�[22m�[2m | �[22m�[33m5 skipped�[39m�[90m (1196)�[39m
�[2m   Start at �[22m 08:28:32
�[2m   Duration �[22m 452.51s�[2m (tests 83%, transform 13%, import 4%)�[22m


##[error]Error: Test timed out in 5000ms.
If this is a long-running test, pass a timeout value as the last argument or configure it globally with "testTimeout".
 ❯ forEach native:1:11
 ❯ <anonymous> test/review.test.ts:1328:3


error: script "test" exited with code 1
error: recipe `_test` failed on line 32 with exit code 1
error: recipe `test` failed on line 29 with exit code 1
##[error]Process completed with exit code 1.
Post job cleanup.
[command]/nix/store/lg46w7hrjx7kylsh6645c9l975i8h43b-git-2.55.0/bin/git version
git version 2.55.0
Temporarily overriding HOME='/var/cache/github-runner-work/_temp/fe9c7135-c109-40a3-a5d9-8ac233ba8e88' before making global git config changes
Adding repository directory to the temporary git global config as a safe directory
[command]/nix/store/lg46w7hrjx7kylsh6645c9l975i8h43b-git-2.55.0/bin/git config --global --add safe.directory /var/cache/github-runner-work/quest/quest
Removing SSH command configuration
[command]/nix/store/lg46w7hrjx7kylsh6645c9l975i8h43b-git-2.55.0/bin/git config --local --name-only --get-regexp core\.sshCommand
[command]/nix/store/lg46w7hrjx7kylsh6645c9l975i8h43b-git-2.55.0/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :"
Removing HTTP extra header
[command]/nix/store/lg46w7hrjx7kylsh6645c9l975i8h43b-git-2.55.0/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader
[command]/nix/store/lg46w7hrjx7kylsh6645c9l975i8h43b-git-2.55.0/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :"
Removing includeIf entries pointing to credentials config files
[command]/nix/store/lg46w7hrjx7kylsh6645c9l975i8h43b-git-2.55.0/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir:
[command]/nix/store/lg46w7hrjx7kylsh6645c9l975i8h43b-git-2.55.0/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url
Post job cleanup.
[command]/nix/store/lg46w7hrjx7kylsh6645c9l975i8h43b-git-2.55.0/bin/git version
git version 2.55.0
Temporarily overriding HOME='/var/cache/github-runner-work/_temp/a2f45f4c-7d4c-41e9-8749-bebce1a2e852' before making global git config changes
Adding repository directory to the temporary git global config as a safe directory
[command]/nix/store/lg46w7hrjx7kylsh6645c9l975i8h43b-git-2.55.0/bin/git config --global --add safe.directory /var/cache/github-runner-work/quest/quest
Removing SSH command configuration
[command]/nix/store/lg46w7hrjx7kylsh6645c9l975i8h43b-git-2.55.0/bin/git config --local --name-only --get-regexp core\.sshCommand
[command]/nix/store/lg46w7hrjx7kylsh6645c9l975i8h43b-git-2.55.0/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :"
Removing HTTP extra header
[command]/nix/store/lg46w7hrjx7kylsh6645c9l975i8h43b-git-2.55.0/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader
[command]/nix/store/lg46w7hrjx7kylsh6645c9l975i8h43b-git-2.55.0/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :"
Removing includeIf entries pointing to credentials config files
[command]/nix/store/lg46w7hrjx7kylsh6645c9l975i8h43b-git-2.55.0/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir:
[command]/nix/store/lg46w7hrjx7kylsh6645c9l975i8h43b-git-2.55.0/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url
A job completed hook has been configured by the self-hosted runner administrator
##[group]Run '/nix/store/gx2v6q84b0w43bafm0whkdx93qyxbpps-ci-cache-gc.sh/bin/ci-cache-gc.sh'
shell: /nix/store/1mv3qz005gkbalxfghk4y3s8ayv4d2dl-bash-interactive-5.3p15/bin/bash --noprofile --norc -e -o pipefail {0}
##[endgroup]
evicted 0 objects and 0 action results (0 B logical); 50.0 GiB logical remain
Cleaning up orphan processes

Queue / Queue (job) failure at step Require the build to pass:

Current runner version: '2.338.2'
##[group]Runner Image Provisioner
Hosted Compute Agent
Version: 20261028.624
Commit: 54898b74c23fde5556c9b3c3a2290865feef0dfe
Build Date: 2026-10-28T21:51:42Z
Worker ID: {910f073e-3280-4752-9540-f9fb5843e78e}
Region: centralus
Cloud: Azure
##[endgroup]
##[group]Operating System
Ubuntu
26.04.1
LTS
##[endgroup]
##[group]Runner Image
Image: ubuntu-26.04
Version: 20261101.186.1
Included Software: https://github.com/actions/runner-images/blob/ubuntu26/20261101.186/images/ubuntu/Ubuntu2604-Readme.md
Image Release: https://github.com/actions/runner-images/releases/tag/ubuntu26%2F20261101.186
##[endgroup]
##[group]GITHUB_TOKEN Permissions
Contents: read
Metadata: read
PullRequests: read
##[endgroup]
Secret source: Actions
Cache mode: write
Prepare workflow directory
Prepare all required actions
Complete job name: Queue
##[group]Run [[ "$RESULT" == success ]] || { echo "::error::the queue build ended $RESULT" >&2; exit 1; }
�[36;1m[[ "$RESULT" == success ]] || { echo "::error::the queue build ended $RESULT" >&2; exit 1; }�[0m
shell: /usr/bin/bash -e {0}
env:
  RESULT: failure
##[endgroup]
##[error]the queue build ended failure
##[error]Process completed with exit code 1.
Cleaning up orphan processes

(written by quest land watch)

@moq-bot

moq-bot Bot commented Nov 10, 2026

Copy link
Copy Markdown
Contributor

Codex land fixer: fixer crashed (exit 1); run /quest-iterate. Recommendation: run /quest-iterate before picking it again.

quest land check: [Errno 32] Broken pipe

(written by Codex)

@kixelated
kixelated added this pull request to the merge queue Nov 10, 2026
Merged via the queue into main with commit 9f73a23 Nov 10, 2026
20 checks passed
@kixelated
kixelated deleted the docs/bang-is-api-breaking branch November 10, 2026 18:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant