Remove model-specific Fable write restriction#646
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_190a5c27-732f-41f3-830d-f16a00681a39) |
There was a problem hiding this comment.
💡 Codex Review
sandboxed.sh/src/api/control/mod.rs
Lines 6075 to 6080 in 3eb0872
With the Fable admission check removed, legacy Fable create requests that include a github_pr but omit writer now rely entirely on requested_pr_writer; however the remaining generic inference only recognizes base tokens like commit, push, merge, and rebase, not the gerunds that the deleted guard handled. For prompts such as “committing and pushing the branch” or “rebasing onto main”, request_is_writer stays false, so the mission is admitted without a durable PR writer lease/tag even though the mandate can mutate the PR branch; please extend the generic inference or otherwise preserve parity before removing the Fable guard.
ℹ️ 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".
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_db96a0c8-3979-42db-801e-b4a01ef37a4b) |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: a53ba3ca3f
ℹ️ 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".
| "integrate", | ||
| "integration", | ||
| "rebase", | ||
| "rebasing", |
There was a problem hiding this comment.
Keep contextual gerunds from taking writer leases
With writer omitted, requested_pr_writer treats any matching token here as permission to reserve the exclusive PR writer lease. A read-only PR mission whose prompt only discusses policy/status with a gerund, e.g. Audit only; rebasing is forbidden, now becomes pr-writer and can either conflict with the actual writer or block one later, even though before this addition that prompt did not match the generic inference. Please either require explicit writer=true for these inflections or carry over negation/context handling before using them for lease acquisition.
Useful? React with 👍 / 👎.
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_ce52a5ad-75f4-43d2-bd56-6a8ffa07b785) |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 4a2cdcc6ba
ℹ️ 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".
| "updating", | ||
| ]; | ||
| const NEGATORS_BEFORE: [&str; 9] = [ | ||
| "not", "never", "no", "without", "dont", "cannot", "cant", "forbid", "before", |
There was a problem hiding this comment.
Don't treat sequencing 'before' as negation
When writer is omitted, prompts such as Run tests before committing to the branch now hit this before entry and cause inferred_pr_writer to treat committing as negated. The create and follow-up paths rely on this inference to add pr-writer and acquire the exclusive PR lease, so a real commit request can be admitted as read-only and run alongside another writer for the same PR. Fresh evidence after the earlier gerund comment is that the final code globally lists before as a negator rather than recognizing only prohibition phrases like stop before ....
Useful? React with 👍 / 👎.
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_9f579db9-1041-4fb2-afd4-4b9d2f6f5060) |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: d745a6f6c2
ℹ️ 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".
| let negated_before = words[index.saturating_sub(3)..index] | ||
| .iter() | ||
| .any(|prior| NEGATORS_BEFORE.contains(prior)); |
There was a problem hiding this comment.
Preserve writer leases after unrelated negators
When writer is omitted, this three-token lookback treats any nearby no/cannot as negating the writer verb, even when it belongs to a separate clause. For example, a PR mission prompt like No tests required; fix the failing branch tokenizes with no in the window before fix, so inferred_pr_writer returns false; the create/follow-up paths then skip adding pr-writer and skip the exclusive PR lease even though the mission is explicitly asked to mutate the PR. Please scope negation to the verb phrase rather than any prior token in the window.
Useful? React with 👍 / 👎.
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_3f1ff35c-57a8-4259-b40e-716fafb3ad20) |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 0066aea556
ℹ️ 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".
| let coordinated_negation = (index.saturating_sub(4)..index).any(|negator_index| { | ||
| NEGATORS_BEFORE.contains(&words[negator_index]) | ||
| && words[(negator_index + 1)..index].iter().all(|between| { | ||
| WRITER_VERBS.contains(between) || matches!(*between, "and" | "or") | ||
| }) |
There was a problem hiding this comment.
Bound coordinated negation to one clause
When a PR mission forbids Git steps but still asks for a code change, e.g. Do not commit or push; fix the failing branch, tokenization has already removed the semicolon and this lookback treats the prior not as negating fix because only writer verbs/or appear between them. inferred_pr_writer then returns false, so create/follow-up paths skip pr-writer tagging and lease acquisition for an actual branch mutation, allowing it to run alongside another writer. Fresh evidence in the final code is the coordinated_negation window crossing punctuation-free clause boundaries.
Useful? React with 👍 / 👎.
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_161c09b6-f939-453f-8e4f-af6286a9690e) |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: b592d194f0
ℹ️ 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".
| let negated_after = words[(index + 1).min(words.len())..after_end] | ||
| .iter() | ||
| .any(|next| NEGATORS_AFTER.contains(next)); |
There was a problem hiding this comment.
Constrain after-verb negators to the verb phrase
When writer is omitted for a github_pr mission, this window treats any prohibited/forbidden/banned/disallowed token within the next three words as negating the writer verb. A real mutation request like Fix the prohibited dependency usage or Implement the banned-import repair is therefore classified as read-only because the adjective describes the object, so the create/follow-up paths skip the pr-writer tag and exclusive lease even though the branch will be edited. Please only treat these after-negators as negating the verb in predicate phrasing such as merging is prohibited.
Useful? React with 👍 / 👎.
What changed
writer=trueunder the same generic writer lease and merge gates as every other modelWhy
The Fable restriction was a local response to one historical routing incident, not a provider or model limitation. The owner explicitly authorizes Fable as a writer. Model identity should not override the structured mission capability system.
This also supersedes #645:
writer=falsealone did not make Claude Code's shell read-only, so a Fable-specific read-only carve-out was neither sufficient nor the desired policy.Validation
cargo fmt --all --checkcargo clippy --all-targets -- -D warningscargo test --all-targets(all passing: 1395 library tests plus all binary targets)Note
High Risk
Expands which models can obtain repository write authority at mission creation; mis-inference in
inferred_pr_writercould grant or deny writer capability incorrectly.Overview
Fable missions are no longer rejected at admission based on model name or prompt keywords. The dedicated
fable_mandate_*helpers and the400on Fable + write/orchestration wording are gone, so Fable uses the samewriterfield, PR writer lease, and merge gates as other models.inferred_pr_writeris reworked for all missions: text is split into clauses; integration/implementation nouns imply writer; writer verbs include -ing forms; negation handles immediate, coordinated (“do not commit or push”), stop before, and forbidden/prohibited phrasing—so prompts can forbid git actions without falsely clearing writer intent elsewhere in the text.Tests drop the Fable guard suite and add coverage for the new inference behavior.
Reviewed by Cursor Bugbot for commit b592d19. Bugbot is set up for automated code reviews on this repo. Configure here.