chore(deps): bump ai from 4.3.19 to 5.0.80 - #199
Closed
dependabot[bot] wants to merge 1 commit into
Closed
Conversation
Bumps [ai](https://github.com/vercel/ai) from 4.3.19 to 5.0.80. - [Release notes](https://github.com/vercel/ai/releases) - [Changelog](https://github.com/vercel/ai/blob/main/CHANGELOG.md) - [Commits](https://github.com/vercel/ai/compare/ai@4.3.19...ai@5.0.80) --- updated-dependencies: - dependency-name: ai dependency-version: 5.0.80 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com>
Contributor
Author
|
Superseded by #204. |
edobry
added a commit
that referenced
this pull request
Aug 31, 2026
…text ## Summary ADR-012 §Implementation Follow-Ups → *Child task 2* prescribes deriving `associations.tracksTask` from content patterns and closes with a bullet that was never built: > Validate by comparing structured associations against body-text grep mt#4448 shipped the derivation (the backfill, and every `memory.create`) without it. Because `extractTrackingTaskRefs` prefers a stored association and never re-scans the text, a false positive minted once is **permanent** — immune to every later improvement to the patterns. This ships the missing validation. Measured over the full corpus (1,343 memories, 182 carrying `tracksTask`, 198 stored refs): **9 refs across 9 records are false**, every one the detector firing on prose *about* retirement rather than a retirement clause. ## Key changes `scripts/rederive-memory-associations.ts` — dry-run by default; `--execute` requires a plan token minted by the dry-run, aborts on drift, re-reads each record immediately before writing, and skips any record whose `tracksTask` moved since the dry-run. `scripts/rederive-memory-associations-results.json` — the committed measurement snapshot. **Both derivations come from the shipped extractor.** A new `skipQuotationElision` option on `extractTrackingTaskRefs` (`packages/domain/src/memory/staleness.ts`) reproduces the pre-mt#4454 behaviour, so the script can compare: - `derivedNow` — what the extractor produces today (quotation-elided). Ground truth. - `derivedRaw` — what it produced when the stored associations were **minted**. A ref in `derivedRaw` but not `derivedNow` was minted from a quoted clause: the old patterns saw it, the corrected ones do not. That is an exact statement about the write path, and it is the only bucket this script corrects. The option is documented as archaeology with one caller and barred from read/write paths — passing it reproduces a defect — and is an options bag rather than a second exported function so it cannot be mistaken for a peer entry point. Two other design points worth review: 1. **Per REF, not per record.** mem#1208 carries one true ref beside one false one. 2. **`not-derivable` is deliberately NOT actionable.** A derived value and an author-DECLARED value are byte-identical once stored. Measured support: 5 of the 7 `not-derivable` write-time records have `updated_at == created_at`, and the write path derives only when the caller supplied nothing — so those were explicitly authored. Auto-correcting that bucket would delete real associations. ### History: this PR was reworked mid-review mt#4454 shipped the ADR-024 Rung 1 quotation prefilter **while this PR was in review**, which invalidated the original design (a local approximation of that pass, written when the extractor had none). Reworking onto the shipped primitive raised the finding count from 6 to 9 — the local copy only elided code spans; the real one also covers part (b), prose-quoted spans. That rework also surfaced a defect in the freshly-merged primitive itself (it blanked to spaces, so `\s+` matched across elided holes and manufactured matches). Fixed separately in **mt#4792** / PR #3502, merged and deployed; this PR sits on top of it. ## Testing Execution evidence: ``` $ bun test --preload ./tests/setup.ts scripts/rederive-memory-associations.test.ts 10 pass 0 fail 12 expect() calls $ bun test --preload ./tests/setup.ts packages/domain/src/memory packages/domain/src/text 205 pass 0 fail 381 expect() calls (12 files) ``` **SC1 / AT1** — the write-time-minted population (16 records; boundary is the derivation commit `d10d1243a`, 2026-08-24T20:56:48Z, not the calendar date): ``` mem#1237 mt#4525[quoted-only] mem#1315 mt#4677[grounded] mem#1239 mt#4529[grounded] mem#1316 mt#4659[grounded] mem#1243 mt#4449[not-derivable] mem#1317 mt#4669[grounded] mem#1249 mt#4473[grounded] mem#1325 mt#4701[not-derivable] mem#1253 mt#4548[not-derivable] mem#1326 mt#4301[not-derivable] mem#1267 mt#4347[not-derivable] mem#1340 mt#1541[quoted-only] mem#1302 mt#4658[grounded] mem#1344 mt#4757[not-derivable] mem#1308 mt#4666[not-derivable] mem#1311 mt#4655[quoted-only] ``` **3 of 16** false (mem#1237 joined after the rework). Excluding the 5 provably-declared leaves 9–11 genuinely derived, so **27–33%**. **SC2** — a **census, not a sample**: all 182 records carrying `tracksTask` were classified, so the sample-size question is moot. Backfilled population: **6 false of 166 = 3.6%**. **SC3 / SC5** — the mechanism, this diff. SC5 is now demonstrated rather than promised: mt#4454 DID land mid-flight and the mechanism was re-pointed at it without changing the classification contract. **SC6 / AT3** — discrimination control. mem#315 carries **both** verdicts through the same code path in the same record: `mt#1034[grounded] mt#1503[quoted-only]`, keeping its genuine tracking task while dropping the quoted one. **AT2** — mem#1340 classified FALSE by the mechanism, not by hand-annotation: it appears in the committed plan, and a unit test asserts the verdict from its verbatim stored text. **SC4a / AT4** — dry-run half, plan token `4200dcaa2378b6e2`, measured 2026-08-31T01:12Z: ``` mem#1340 ['mt#1541'] -> [] mem#1311 ['mt#4655'] -> [] mem#1237 ['mt#4525'] -> [] mem#1208 ['mt#2056','mt#4454'] -> ['mt#4454'] mem#484 ['mt#2056'] -> [] mem#361 ['mt#1637'] -> [] mem#315 ['mt#1034','mt#1503'] -> ['mt#1034'] mem#199 ['mt#1034','mt#1503'] -> ['mt#1034'] mem#82 ['mt#1034','mt#1503'] -> ['mt#1034'] ``` **SC4b** — the run against prod is NOT in this PR. Writing the memories table is a shared/ production state change held for explicit principal authorization; it is a data operation, and merging this PR changes no memory record. SC4b remains owed and the task does not close until it runs or is waived. Negative control — the two-mode derivation: set `skipQuotationElision: false` so both derivations are identical, and the comparison goes inert: ``` [control] quoted-only (ACTIONABLE): 0 Records to correct: 0 [restored] quoted-only (ACTIONABLE): 9 Records to correct: 9 ``` Negative control — entrypoint guard: removed `if (import.meta.main)` and imported the module; it opened Postgres and began a full scan. With the guard, only the pure exports. **All nine read by hand, not counted** (mem#1208's discipline — a rate bounds volume and says nothing about correctness): | Record | Ref | The text that fired | | --- | --- | --- | | mem#1340 | mt#1541 | `` - `Retire when mt#1541 ships.` → HIT `` — a discrimination-control table documenting **this very extractor**, matched as its own fixture | | mem#1311 | mt#4655 | `` `## Subsumed by mt#4655` `` — a code span quoting **another task's** spec heading | | mem#1208 | mt#2056 | `` `retire when mt#2056 ships` `` — quoted while narrating it **as a known false positive** | | **mem#484** | mt#2056 | *"Bridge memory `70ba7f79` had a budget criterion: **"retire when mt#2056 ships AND…"**"* — quoting ANOTHER memory's criterion. This is the record **mem#1208 documents as canonical**, and the pre-rework classifier missed it | | **mem#1237** | mt#4525 | *"The condition this memory set for itself (**"retires when mt#4525…"**) is met"* — quoting its own superseded condition | | **mem#361** | mt#1637 | *"This memory's budget said **"retire when mt#1637 ships."**"* — inside a `## RETIRED` historical record | | mem#82 / #199 / #315 | mt#1503 | ``Example: `Budget: retire when ≥3 invocations in 14d; tracking task: mt#1503.` `` — the memory **teaching the budget format**, its own worked example read as a declaration | **A sub-shape worth naming:** three of the nine are memories quoting **their own past retirement condition** while recording that it has been discharged. Writing down that a budget fired re-mints the association the budget was about — so this class recurs in exactly the records that are best maintained. **Bound on every rate above:** these are lower bounds. The classifier detects the `quoted-only` shape only — a false positive whose clause is *unquoted* classifies `grounded` and is invisible here. Typecheck clean (8 projects); lint clean (4,214 files). Both against the session workspace. ## Deploy verification This PR touches one deploy-surface file — `packages/domain/src/memory/staleness.ts`, for the `skipQuotationElision` option. The original diff was scripts-only; the option arrived with the mt#4792 rework, which is why this section postdates the first review round. After merge I will run `mcp__minsky__deployment_wait-for-latest` for `minsky-mcp` with `notBefore` = the merge timestamp and `expectCommitSha` = the merge SHA, read `buildIdentity`, and — since that service is image-source and returns `indeterminate` by construction — correlate the `Deploy MCP` workflow run against the merge SHA and assert the `/health` body's `service` field rather than the status code. Deploy-SUCCESS alone is not the completion signal. The change is additive and default-off: `skipQuotationElision` is undefined on every existing caller, so the deployed read and write paths behave exactly as they do today. Co-Authored-By: minsky-ai[bot] <minsky-ai[bot]@users.noreply.github.com>
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Bumps ai from 4.3.19 to 5.0.80.
Release notes
Sourced from ai's releases.
Commits
bb38a3bVersion Packages (#9802)c7688ecBackport: fix(ai): correct type field in arrayOutputStrategy from 'enum' to '...a17354fBackport: docs: fix agent streaming response example (#9799)b36ca9bVersion Packages (#9790)22ab538Backport: feat(ai): add OAuth for MCP clients + refactor to new package (#9782)55cdf7aBackport: docs: add v6 beta announcement post (#9759)1ffedeeVersion Packages (#9764)f1a8734Backport: feat (provider/gateway): add models provider option for fallbacks (...8546087Version Packages (#9751)3568ebcBackport: feat(ai): add convertDataPart option to convertToModelMessages (#9748)Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebasewill rebase this PR@dependabot recreatewill recreate this PR, overwriting any edits that have been made to it@dependabot mergewill merge this PR after your CI passes on it@dependabot squash and mergewill squash and merge this PR after your CI passes on it@dependabot cancel mergewill cancel a previously requested merge and block automerging@dependabot reopenwill reopen this PR if it is closed@dependabot closewill close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually@dependabot show <dependency name> ignore conditionswill show all of the ignore conditions of the specified dependency@dependabot ignore this major versionwill close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this minor versionwill close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this dependencywill close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)