Repository navigation
docs(devlog): open the meaning-preservation and request-scoped safety batch #5257
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
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
73 changes: 73 additions & 0 deletions
73
devlog/_plan/260920_meaning_preservation_batch/000_plan.md
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,73 @@ | ||
| # Meaning preservation and request-scoped safety batch | ||
|
|
||
| Status: OPEN. Opened against `main` 2.60.0 (`7c625fc9755c9824653ab944190e243091a2c85c`) and the | ||
| current `dev` head. This unit covers the first six items of the post-2.60.0 assessment: the two | ||
| safety fixes and the four meaning-preservation defects. Scope beyond those six is explicitly out. | ||
|
|
||
| ## Why these six | ||
|
|
||
| The assessment scored meaning preservation lowest of the six axes. The shared failure mode is that | ||
| a request arrives carrying an explicit constraint — which tools may be called, how a tool is | ||
| declared, an attached document, where an instruction sits in the conversation — and the proxy | ||
| returns a normal HTTP success after silently dropping it. A test that only asserts a successful | ||
| tool call or a 200 response cannot see any of them. | ||
|
|
||
| The governing rule for every item in this unit: | ||
|
|
||
| > On a supported path, preserve it. On an unsupported path, refuse it or apply the conversion | ||
| > policy the operator chose. Never drop it quietly and return as if the request was honored. | ||
|
|
||
| ## Delivery topology | ||
|
|
||
| Each lane delivers **one branch with ordered commits and one pull request** against `dev`. No | ||
| GitHub native stack and no chain of child pull requests. Where an existing contributor pull | ||
| request already covers part of a lane's scope, the lane carries that work into its own branch with | ||
| a `Co-authored-by` trailer naming the original author, and the superseded pull request is closed by | ||
| the coordinator only after the lane lands. Carrying without the trailer is not acceptable: | ||
| `missing_coauthor_credit` in `.github/scripts/pr-carry-attribution.cjs` exists because | ||
| `CREDITS.md` already lists 27 landings that lost their author. | ||
|
|
||
| ## Lanes | ||
|
|
||
| ### Lane A — meaning preservation on the request path | ||
|
|
||
| | Item | Contract to restore | | ||
| | --- | --- | | ||
| | #5211 | Caller-specified `allowed_tools` and `parallel_tool_calls: false` survive the Chat Completions path from inbound parse to the actual outbound request. | | ||
| | #5210 | Tool declaration `strict` and `allowed_callers` reach destinations that support them; an unsupported destination refuses rather than silently widening the declaration. | | ||
| | #5212 | Inline document bytes survive the inbound parse into the internal representation and outbound, so a title-only forward is never reported as a success. | | ||
| | #5213 | A `developer` message keeps its chronological position. Role conversion to `system` is a separate, explicitly recorded decision with its own acceptance, not a side effect of placement. | | ||
|
|
||
| #5237 is a correct narrow fix for the #5213 position problem and is not the whole of role | ||
| preservation. Lane A carries it with attribution and keeps position and role as two distinct | ||
| acceptance conditions. | ||
|
|
||
| ### Lane B — request-scoped transport and managed-write safety | ||
|
|
||
| | Item | Contract to restore | | ||
| | --- | --- | | ||
| | #5087 | DNS pinning and transport selection are decided by whether a proxy actually applies to *this request*, not by whether one is configured. Scheme mismatch, `NO_PROXY` and DNS failure must not produce an unintended unpinned direct connection. | | ||
| | #5241 | A managed configuration write never follows a terminal symlink to another file, including under `apply`, `refresh`, `disable` and `restore` races. | | ||
|
|
||
| Both existing pull requests are authored by the same contributor and are carried with attribution. | ||
|
|
||
| ## Regression discipline | ||
|
|
||
| Behaviour changes in `src/` need focused regressions next to the existing tests for that subsystem. | ||
| Before any push, check the union-defect classes `AGENTS.md` records, because exact-head CI cannot | ||
| see a defect that exists only in the union of two branches: | ||
|
|
||
| - the file-size ratchet only moves downward, so a new case goes in a sibling file registered in | ||
| both `scripts/test-layout/layout.json` and `tests/fixtures/test-layout-expected.json`; | ||
| - anything exhaustive over a union — locale catalogs, `satisfies Record<Union, ...>`, hand-written | ||
| rosters, counts in generated documentation — must be derived rather than restated. | ||
|
|
||
| The 2.60.0 release was blocked by exactly this class: #5239 tightened Fernet validation while an | ||
| older case in another domain directory still minted its fixture the loose way. | ||
|
|
||
| ## Execution constraints | ||
|
|
||
| No local suites, individual tests, typecheck, build, install or live `ocx` execution. Verification | ||
| is static source review plus exact-head hosted CI. Branch pushes use `--no-verify`. Only the | ||
| coordinator merges and closes issues. Public artifacts stay English and name no other repository or | ||
| model. | ||
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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Because this unit is explicitly OPEN, these rows publicly document two unfixed security weaknesses and their triggering conditions: an unpinned direct connection after proxy bypass or DNS failure, and a symlink-following managed-write race. Repository policy requires unreleased findings and pre-disclosure patch plans to remain in scratch space; move Lane B to
.tmp/until the fixes ship, then publish only the completed outcome under_fin/.AGENTS.md reference: AGENTS.md:L124-L127
Useful? React with 👍 / 👎.