chore(web): refresh audited development dependencies - #192
Conversation
Review summary (verified independently)
Note for the stack: #189/#190/#191 currently base off this PR's branch ( |
Review follow-up — current head and dependency hold@Bindy-lbb Thanks for the technical re-review. At npm ci
npm run audit
npm run lint
npm run typecheck
npm run build
git diff --checkAll exited 0; audit reports zero production and development vulnerabilities; tracked worktree is clean. This is author-side verification, not a human approval. #189/#190/#191 are now Draft and their bodies explicitly document the invalid ancestry: their lockfile bytes equal this PR's, but this head is not their git ancestor. They must not merge into this feature branch. The sequence is: real non-author approval and merge this PR to main first; then retarget each dependent PR to main, integrate the actual new main without rewriting published history, verify ancestry, and require fresh CI/review on the resulting heads. Please submit a formal GitHub review against this exact #192 head: approve only if your review finds no blocker, otherwise request changes. Your latest technical comment is useful evidence but no APPROVED review is currently recorded. No self-approval, bypass, or merge has been performed. |
waterbro-8
left a comment
There was a problem hiding this comment.
Review: approved — this is the fix for the Web audit break, and it is the whole fix
Basis for this vote. I am a requested reviewer on this PR, I am not its author, and I am not the pusher of its head: pulls/192/commits reports author.user.login = PeterGuy326 and committer.user.login = PeterGuy326 on 11e02e21ef2c3dbd2dae26e4376872e54e78ecb5 (committed 2026-09-10T02:23:15Z). So this approval is independent of the author and is not invalidated by the last-push-approval rule. It is an independent human code-owner review, per #166's process.
Scope — verified, not read from the diff summary
Single file, web/package-lock.json, +50/−50. web/package.json is untouched. Parsed both committed trees entry by entry (434 package keys before, 434 after — nothing added or removed), and exactly 10 entries moved, every one of them dev: true:
vitestand the seven@vitest/{expect,mocker,pretty-format,runner,snapshot,spy,utils}packages:4.1.10 → 4.1.11js-yaml:4.3.1 → 4.3.2postcss-selector-parser:6.1.2 → 6.1.4
All three are patch-level. lockfileVersion is still 3, the root name/version are still mem-web / 0.1.1, and the legacy dependencies tree section is byte-for-byte unchanged. No production dependency moves: the --omit=dev leg already reported found 0 vulnerabilities before this PR, and still does.
Why this is needed now
Two advisories were published on 2026-09-08, after the last CI round of every PR that currently reads green:
GHSA-82fw-gwwq-j7x9(@vitest/mocker/vitest, moderate) —published_at 2026-09-08T20:46:45Z, first patched in4.1.11GHSA-2883-xcg3-v3hh(js-yaml, high) —published_at 2026-09-08T21:24:51Z, first patched in4.3.2
Together with the older GHSA-w9m9-85wc-3x92 (postcss-selector-parser, low, 6.1.3), they make the second half of npm run audit — npm audit --audit-level=high — exit non-zero. This is a main-side breakage that every branch inherits, not a defect introduced by whichever PR happens to be red.
The pair of job logs on today's runners makes it unambiguous, because both jobs invoke the identical command on the identical step:
- #193's
Web(job102753348999, run34440163922,2026-09-10T05:13:05Z) —found 0 vulnerabilitieson the--omit=devleg, then4 vulnerabilities (1 low, 2 moderate, 1 high)on the full leg, naming those three GHSA ids, each followed by npm's ownfix available via \npm audit fix`, and##[error]Process completed with exit code 1.` - this PR's
Web(job102721020860, run34429247843,2026-09-10T02:23:36Z) —found 0 vulnerabilitiestwice, step success.
So the fix is proven differentially on GitHub-hosted runners against the live advisory DB, at a time after both advisories were published.
Why I believe it is exactly complete, and not merely sufficient
I reproduced the remediation locally from main rather than trusting that the PR matches npm audit fix:
npm audit fix --package-lock-only --registry=https://registry.npmjs.org
The resulting web/package-lock.json is byte-identical to the one committed here. Two independent fingerprints agree:
- file sha256
a804edf8ae7c27353ff53e8ca619817a988b5802d39950c136ea250a9be07190for both - git blob
28a95f0b2f19ddccfe0e4ad2e2a3b247fd82c2f2, which equalsGET /repos/bytefolk/mem/contents/web/package-lock.json?ref=11e02e21ef2c…→.sha.main's is103ae42a203bd4a7317d1ad8a5ceadb9d8db1882.
Re-auditing the fixed tree returns found 0 vulnerabilities / rc 0. Because npm audit fix is a deterministic resolver over this advisory set, "identical to its output" is the claim that nothing needed is missing and nothing extra was dragged in.
Current status read live
mergeable = true, base is main tip 2986fe38175f54d99f15dd38a498708c6ecd88cd (so not behind, no conflict), and all 20 checks on this head are completed / success at attempt 1 (taking the max check_suite.id per name, so no stale-round aggregation).
What I am not claiming
- I did not re-run the whole
Webtest suite locally; I read its CI job logs. The audit step is the part I reproduced myself. - This PR does not touch the still-open Dependabot alerts for
grpc(#74/#78/#79) orpypdf(#71/#72/#73), and does not changemem-web's version — that belongs to#193. - Merging this will not by itself turn the other red branches green: each branch that lacks this lock needs its base refreshed. Expect
Webto stay red on those until then. - The remaining
postcss-selector-parsernote in#160overlaps with one of the ten entries here; whichever lands first, the other becomes a no-op for that package and should be re-checked rather than merged mechanically.
Suggested merge method: squash, per this repository's configuration (allow_merge_commit=false, allow_rebase_merge=false).
## Canonical requirement Refs bytefolk/.github#32 - Canonical Issue URL: bytefolk/.github#32 - Consumed revision: R1 - No automatic close keywords: acknowledged Decision reference: the initial R1 Issue body. It explicitly records that local candidates preceded this prospective publication record; no retrospective approval is claimed. ## Requirement trace | REQ/AC IDs | Changed files / domain | Tests or review evidence | |---|---|---| | REQ-001 / AC-001 | 4 exact-pinned version annotations | Exact expected-byte replacement PASS | | REQ-002 / AC-002 | 2 files in bytefolk/mem | Repository inventory PASS; aggregate 7 repositories, 13 files, 21 lines | | REQ-003 / AC-003 | Existing workflow content and modes | Parsed YAML and comment-stripped bytes identical | | REQ-004 / AC-004 | Current-head CI and independent review | Local independent replay recorded in the canonical R1 Issue linked above; hosted CI collected on head `f464f686` (19 of 20 checks succeed, see Validation); independent human review requested and still pending | ## File domains `.github/workflows/bytefolk-scorecard.yml` (47); `.github/workflows/bytefolk-security.yml` (58, 65, 68). Prepared parent / merge base: `2986fe38175f54d99f15dd38a498708c6ecd88cd` PR base at publication: `87db0dfe0507be2190fe2fdcce0e267be8224f4d`. Since that baseline `main` advanced by six commits through `3c13f04e` (#162, #160, #165, #188, #158, #204) — not only `web/package-lock.json` as previously stated here. None of them touched `.github/workflows/`, so the F9 workflow blobs and the PR diff are unchanged. The reviewed commit and original parent are preserved. Head: `f464f68636adc6bb5295c3818aa6654c46a3caad` — `d2a9ec5` plus one non-forced `Merge branch 'main'` commit (`f464f686`) that brought the branch up to `3c13f04e` so it is no longer `BEHIND`. Verified: `git rev-parse d2a9ec5:.github/workflows/bytefolk-scorecard.yml` and `...:bytefolk-security.yml` return the same blobs (`2058126c`, `48a507e0`) as at `f464f686`, and `git diff main...f464f68` is still exactly these 2 files, `+4/-4`. The comment-only payload is therefore byte-identical to the reviewed commit and the equality proof above holds on the current head. ## Scope and non-goals Correct only `# v4.37.4` to `# v4.37.9` on CodeQL uses-lines pinned to `cdf488f595d80d6e07e03d4674febd5ab45fa938`. The [official tag object](https://api.github.com/repos/github/codeql-action/git/tags/a35ac6e6798d72df5475948b28efb89edc2e19ca) resolves to that existing pin. Action SHAs, permissions, triggers, steps, matrices, other pins, and runtime code are unchanged. ## Validation - Exact commands: `ruby evidence/verify.rb --baseline` and `ruby evidence/verify.rb --committed` from the retained review packet; `git diff --check 2986fe3 d2a9ec5` from this repository. - Observed counts/results: PASS 2/2 files and 4/4 replacements here; aggregate PASS 13/13 files and 21/21 replacements. Baseline intentionally exits 1 after detecting all 21 stale annotations; committed verification exits 0. - Check URLs: collected on head `f464f686` — 19 of 20 checks succeed. The single failure is [`HTTP, CLI and MCP lifecycle`](https://github.com/bytefolk/mem/actions/runs/34807101354/job/103861020551), whose log is `pull access denied for minio/minio` at ~13s: a container-image pull failure in an unrelated job. The same workflow was green on `main` at `3c13f04e`, and the identical failure is present on #198 and #199, so it is not caused by this comment-only change. Root-cause tracking is separate and open. The strict verifier checks the changed-file allowlist; exact old blobs and line inventory; complete expected-byte replacement; absence of stale target annotations; parsed YAML equality; comment-stripped byte equality and SHA-256 digests; whitespace and unchanged modes; one commit with the exact parent; and clean worktrees with no untracked files. All passed. The independent replay is recorded in canonical R1. The verifier and inventory are retained outside repository commits. | ID | REQ/AC | Observable acceptance criterion | Command or manual steps | Environment | Expected | Observed | Status | |---|---|---|---|---|---|---|---| | V1 | AC-001, AC-002, AC-003 | Exact annotations with executable YAML unchanged | `ruby evidence/verify.rb --committed` | Ruby 2.6.10, Psych 3.1.0, isolated review packet | Exact scoped replacements and equality | 2/2 files; 4/4 lines; all invariants pass | PASS | | V2 | AC-004 | Hosted checks on this exact head | Inspect this PR's checks at `f464f686` | GitHub Actions | Applicable checks succeed | 19 of 20 succeed; `HTTP, CLI and MCP lifecycle` fails on `pull access denied for minio/minio` (infra, unrelated job, also failing on #198/#199, green on `main`) | PARTIAL | ## Security and compatibility Documentation annotation only. No dependencies, permissions, credentials, data flows, or runtime behavior change. The diff and commit identity were inspected for public-safe content. No CHANGELOG entry or behavior-documentation update is needed because only explanatory comments change. ## Known limitations Runtime suites, build, coverage, and dependency audits were not rerun for this comment-only change; no runtime test result is claimed. Hosted CI is separate from local equality proof. Two limits now apply: (1) the strict verifier's `one commit with the exact parent` invariant describes the reviewed payload commit `d2a9ec5`, not the current branch shape, which carries two additional `Merge branch 'main'` commits; (2) this PR is **not merge-ready yet** — repository `AGENTS.md` step 6 requires passing CI *and* an approval from someone other than the author, and `HTTP, CLI and MCP lifecycle` is red on the unrelated `minio` pull, so the green-CI half is unmet until that infrastructure failure is fixed. ## Risk and rollback Low-risk annotation correction. Roll back through an ordinary revert of this single commit. There is no migration or release action. ## Product review handoff - Implementation/publication owner: @PeterGuy326 - Automated pre-review result: independent local replay recorded in R1; no human approval implied. - Human final review: PENDING; no human review requested by this publication. - Merge ledger owner: @PeterGuy326 - Product reviewer: @PeterGuy326 - Milestone or release packet: N/A: bounded documentation annotation maintenance - Merge, CI, release, and model judgment do not accept or close the Issue: acknowledged ## Maintenance update (2026-09-14, @waterbro-8) Records written by the maintainer account, not by the implementation owner: - `f464f686 Merge branch 'main'` was pushed to this head branch (non-forced, `main` at `3c13f04e` is an ancestor of the head) to clear the `BEHIND` state this PR's own body said blocked merging. No workflow file content changed: both blobs are identical to `d2a9ec5`. - The stale facts above were corrected in place: the recorded head SHA, the "Main advanced only `web/package-lock.json` in PR #192" claim, the `NOT VERIFIED` hosted-CI rows, and the "this is a draft, not merge-ready" note. - This PR was marked ready for review and an independent review was requested. The maintainer account that pushed the merge commit did **not** approve it: `AGENTS.md` step 6 requires an approval from someone other than the author, and a commit author on the head cannot supply that approval for their own push. `@PeterGuy326` remains implementation and merge-ledger owner. Co-authored-by: 勒布朗-詹姆斯 <2986253039@qq.com>
…cessor to #170) (#199) ## Tracking record and provenance Refs #122 — bounded release-validation readiness, not publication or completion of the release issue. Canonical draft successor to #170. Original author `sun-970` and maintainer commits are preserved in ancestry. #170 remains open with its original discussion and reviews; no original review is transferred as an approval of this candidate. - Original/final source head: `fa2c30cc693bc0ae1e679e7d108d59aef1bd4007`. - Successor head: `260710d69a66f919520e5a4dccc3749335eb95fc`. - Integration commit `896aedb0069f688db3c46702147cf9ea7e015ba9` has normal merge parents, in order: source `fa2c30cc693bc0ae1e679e7d108d59aef1bd4007` and actual canonical main `2986fe38175f54d99f15dd38a498708c6ecd88cd`. - Final successor tree: `5f1313f778ae2dc964c20d350b8829a365852100`. - The integration merge was conflict-free. Its only tree additions over source were main's unchanged `.github/workflows/bytefolk-security.yml` and `.github/workflows/bytefolk-scorecard.yml`; source files remained exact at that integration commit. The subsequent `260710d` adds only the separately authorized output-path safety fix and regressions described below. - The lockfile retains #192 source `11e02e21ef2c3dbd2dae26e4376872e54e78ecb5` with its `cherry-pick -x` traceability. No original commit was rewritten. ## Summary and acceptance criteria CHANGELOG comparison links must use the exact preceding version and release endpoint. Missing predecessors fail closed; exact release-tag links remain valid. GNU/Linux checksum enumeration must process each basename separately, accept the correct six assets in a directory with spaces, reject an empty set with an explicit diagnostic, and emit no manifest for invalid input. An independent preflight then reproduced a separate unchanged-baseline gap: an existing `mem-mcp-checksums.txt` symlink to a directory made `mv` publish the temporary manifest outside the asset directory. A later checksum failure did not undo that write. This was NOT introduced by the basename fix and was NOT fixed at original head `fa2c30cc`. This successor now rejects all existing manifest paths (including dangling symlinks) before hashing and immediately before publication, preserving existing paths and external data. Staging still uses randomized `mktemp`, not a predictable filename. The canonical successor resolves the separate CI execution-path gate: main requires three CodeQL language contexts, but the existing workflow skips fork PRs. This same-repository candidate uses the existing allowed path without editing security permissions, fork restrictions, required checks or tests. Changed files against main: `CHANGELOG.md`, `scripts/generate_release_checksums.sh`, `scripts/test_release_guards.sh`, `scripts/validate_release_version.sh`, `scripts/test_release_checksum_output_safety.sh`, `web/package-lock.json`. No security workflow differs from main. ## Reproduction and attribution On real GNU/Linux, base `7a194f1e` passes the release guards, while pre-follow-up `1624cf74` fails with GNU basename's `extra operand` error because `find -exec basename {} +` batches paths. The fix invokes basename once per path with `\;`. The new comparison regression fails against the base wildcard validator with `wrong compare base v0.0.0: command unexpectedly succeeded`. The earlier macOS `find -printf` failure was not caused by the original comparison-link patch: its checksum script was byte-identical to base. [Public correction and evidence](#170 (comment)). Do not confuse the Bash compatibility suite's find stub with actual GNU semantics; the full guard suite uses real GNU find/basename/sha256sum. Output-safety negative controls: the new focused regression fails on both canonical main `2986fe38` and pre-safety integration head `896aedb0` with `symlink-directory: output publication changed existing data or created an unexpected file`. The fixed tree passes seven cases with path spaces: symlink-to-directory, symlink-to-file, dangling symlink, existing directory, existing regular file, an output symlink introduced during hashing, and a pre-existing template-shaped temporary symlink. File-content snapshots verify external data and existing outputs are preserved; the late-symlink case also verifies private staging cleanup. This is bounded path-safety validation, not a claim of atomic defense against a hostile process concurrently replacing paths after the final check; release staging must remain controlled by the release job. ## Validation ledger Environment: isolated Linux aarch64, Linux 6.8, GNU find 4.9.0/coreutils 9.4, Bash 5.2.21, Node 24.13.0/npm 11.6.2. The Node download is checksum-verified. Fresh exact Git bundle clone, two CPUs, GOMAXPROCS=2 and GOFLAGS=-p=1. | Command/check | Expected | Actual | | --- | --- | --- | | `git merge-base --is-ancestor fa2c30c HEAD` | Source ancestry retained | PASS | | Diff source..integration commit excluding the two unchanged main workflow additions | Source files exact before new safety fix | PASS, empty diff | | `git diff --stat 896aedb HEAD` | New baseline safety fix only | PASS, four scoped files: generator, focused tests, full-suite hook, changelog | | Diff main..HEAD for all security/release/publish/policy/acceptance workflows | No workflow changes | PASS, empty diff | | Root: `bash scripts/test_release_guards.sh` | Comparison and six-asset/empty-set guards fail closed | PASS, new comparison-link and full guard PASS | | `bash scripts/test_release_checksum_output_safety.sh` | Existing output paths fail without external writes; random staging remains safe | PASS, seven focused cases on final tree | | `bash scripts/test_release_helpers_compat.sh` | Collection compatibility | PASS | | `bash scripts/test_validate_release_action_pins_compat.sh` | Official action pin compatibility | PASS | | `bash scripts/validate_release_version.sh 0.1.1` | Version surfaces agree | PASS | | `shellcheck scripts/generate_release_checksums.sh scripts/test_release_checksum_output_safety.sh scripts/test_release_guards.sh scripts/validate_release_version.sh` | No shell diagnostics | PASS, ShellCheck 0.11.0 on macOS | | From `web/`: `npm ci --registry=https://registry.npmjs.org --fetch-timeout=45000` | Locked install | PASS, 401 installed packages | | `npm run audit --registry=https://registry.npmjs.org` | Both unchanged thresholds pass | PASS, zero vulnerabilities | | `npm test` | Application regressions pass | PASS, 67 tests / 6 files | | `npm run lint` / `npm run typecheck` / `npm run build` | Static validation and build pass | PASS, existing large-chunk warning only | | `git diff --check 2986fe3 HEAD` | Clean diff | PASS | | Canonical successor CI and CodeQL | All required named contexts execute and pass | PENDING at draft creation; no all-green claim | ## Tests, coverage and known limits The source-head [CI](https://github.com/bytefolk/mem/actions/runs/34437665487) and [acceptance](https://github.com/bytefolk/mem/actions/runs/34437665500) passed; CodeQL was skipped there and did not satisfy its required contexts. Those runs are source evidence, not the canonical successor's CI or review. Coverage percentage was not remeasured. The new output-path safety regression runs through the existing release-guard CI command; no job or check is removed. Full stock-macOS release-guard portability is not claimed: existing BSD `wc -l` padding affects a row-count assertion. The full suite is validated with real GNU tools. The existing large-chunk build warning remains. Windows, browser, Go/process and database acceptance use unchanged CI. No temporary macOS Go executable is run; fixtures are disposable and create no real release. ## Risk, rollback and review Build/release-validation/dependency maintenance, no API/CLI/MCP authorization, storage or migration contract change. `[Unreleased]` documents the behavior. No custom repository secret is referenced by PR workflows; CodeQL uses its existing security-events upload permission. Release/npm publication and Scorecard are not triggered by these candidate branches. No tag, release, original-PR closure, main merge, protection change or formal approval occurs. Rollback is to leave this draft unmerged; no deployed behavior changes. Draft pending exact-head required CI and independent review. The Owner relayed an independent preflight PASS for the original comparison/enumeration delta; that preflight found the baseline output-symlink gap and does not cover this new safety commit. Fresh review of `260710d` remains required. Original human-authored commits are retained; automated assistance helped with maintainer remediation and validation evidence. --------- Co-authored-by: liyuanyang <liyuanyang@users.noreply.github.com> Co-authored-by: waterbro-8 <318569545+waterbro-8@users.noreply.github.com> Co-authored-by: 勒布朗-詹姆斯 <2986253039@qq.com>
#198) ## Tracking record and provenance Refs #122 — bounded CI/release-readiness follow-up, not completion or publication of that release. Canonical draft successor to #169, with the original author's `sun-970` commits and maintainer follow-ups retained unchanged in ancestry. The original PR stays open; its reviews and discussion remain authoritative history, not an approval of this successor. - Original/final source head: `5c3a4a75ab96bed4c046c0822ebc76a87f215cda`. - Successor head: `5c3a4a75ab96bed4c046c0822ebc76a87f215cda`. - Source and successor tree: `9d8a127375fd8e945113e06ae88983a1328b9fae`. - Current canonical main: `2986fe38175f54d99f15dd38a498708c6ecd88cd`, already an ancestor. A normal merge reports `Already up to date`; no empty commit, cherry-pick reconstruction, rebasing, or force push was used. - The audited lockfile retains #192's provenance from `11e02e21ef2c3dbd2dae26e4376872e54e78ecb5` (`cherry-pick -x` in ancestry). ## Summary and acceptance criteria The Web CI job must run its unit tests. Recognized transient npm audit failures may retry, but vulnerabilities, unknown errors, failed spawns, signals and timeouts must remain failures. Successful audit output must remain visible, including below-threshold findings. The Windows evidence helper must complete its report and preserve a nonzero audit exit status. This successor changes no source file relative to #169's exact source head. It exists because the canonical security workflow skips the entire CodeQL job on fork PRs while main requires three language-specific CodeQL contexts. A same-repository candidate executes the existing supported path; no security workflow, permission, required check, audit threshold, or fork restriction is modified or waived. Changed files against main: `.github/workflows/ci.yml`, `CHANGELOG.md`, `scripts/test_win_audit_verify.mjs`, `scripts/win-audit-verify.bat`, `web/audit-retry.mjs`, `web/audit-retry.test.mjs`, `web/package.json`, `web/package-lock.json`, `web/vite.config.ts`. ## Validation ledger Environment: isolated Linux aarch64, Linux 6.8, GNU find 4.9.0/coreutils 9.4, Bash 5.2.21, Node 24.13.0/npm 11.6.2; checksum-verified official Node archive. Fresh Git clone from an exact local bundle, two CPUs, GOMAXPROCS=2 and GOFLAGS=-p=1. Tests use disposable fixtures, not production data or secrets. | Command/check | Expected | Actual | | --- | --- | --- | | `git diff --exit-code 5c3a4a7 HEAD` | Exact source tree | PASS, no differences | | `git merge-base --is-ancestor 2986fe3 HEAD` | Current main included | PASS | | From root: `bash scripts/test_release_guards.sh` | Release guards fail closed | PASS | | `bash scripts/test_release_helpers_compat.sh` | Collection compatibility | PASS | | `bash scripts/test_validate_release_action_pins_compat.sh` | Official pinned actions and compatibility | PASS | | `bash scripts/validate_release_version.sh 0.1.1` | Version surfaces agree | PASS | | From `web/`: `npm ci --registry=https://registry.npmjs.org --fetch-timeout=45000` | Locked install | PASS, 401 installed packages | | `npm run audit --registry=https://registry.npmjs.org` | Both unchanged thresholds pass | PASS, zero vulnerabilities, both reports printed | | `npm test` | Application and audit regressions pass | PASS, 104 tests / 7 files, including 37 audit regressions | | `npm run lint` / `npm run typecheck` / `npm run build` | Static validation and production build pass | PASS, existing large-chunk warning only | | `git -c core.whitespace=blank-at-eol,blank-at-eof,space-before-tab,cr-at-eol diff --check 2986fe3 HEAD` | Clean diff, intentional batch CRLF retained | PASS | | Canonical successor CI and CodeQL | All required named contexts execute and pass | PENDING at draft creation; no all-green claim | ## Tests, coverage and known limits The original successful-report regression was red before the fix (1 failed / 36 passed). Existing exact-source [Web CI](https://github.com/bytefolk/mem/actions/runs/34438230117/job/102747885693) passed 104 tests including 37 audit regressions. Existing real [Windows CI](https://github.com/bytefolk/mem/actions/runs/34438230117/job/102747885554) passed four native batch-helper regressions, including negative controls for both original defects. These are source-head evidence, not independent review or substitute results for the new canonical workflow execution. Coverage percentage was not remeasured. A real-registry Windows audit has not been requalified; its helper tests use local npm.cmd fixtures. The unchanged five-second process fixture timeout reproduces on both pre-follow-up and fixed heads on the managed macOS host; Linux is the validated environment. The existing large-chunk build warning remains. Full Linux process/database and browser acceptance, and native Windows execution, are delegated to unchanged CI; no temporary Go executable runs on macOS. ## Risk, rollback and review Build/CI/dependency maintenance; no application API, CLI/MCP authorization, storage or migration contract changes. `[Unreleased]` already documents the behavior. The PR-triggered workflows reference no custom repository secrets; CodeQL retains only its existing security-events upload permission. No release, npm publication, Scorecard dispatch, tag, merge, or formal approval is performed. Rollback is to leave this draft unmerged; no deployed behavior changes. Draft until the exact candidate has required CI plus independent review. The Owner reports independent review of the fix deltas is already in progress; this description does not represent that review as completed. Automated assistance produced validation and the maintainer follow-up; the original human-authored history remains intact. --------- Co-authored-by: liyuanyang <liyuanyang@users.noreply.github.com> Co-authored-by: waterbro-8 <318569545+waterbro-8@users.noreply.github.com>
) ## Linked draft successor — original #183 remains open Refs #176. ## Current follow-up: `c0421168bd145077bf164f91c0d2b454a79760ef` - Fixed the remaining exported MCP route enum: `tools/list` now includes `lexical`. The in-process MCP regression reproduced the missing enum before the fix and now verifies both schema and `tools/call` HTTP forwarding. All 9 MCP tests pass on Linux; affected-package vet passes. - Added a strict, populated PostgreSQL sequential-upgrade regression and a DB-free embedded-migration continuity guard. Actual PostgreSQL 16.14 / pgvector 0.8.2 advances 23 → 24, verifies lexical backfill and full history, and accepts ordinary production startup afterward. No `AllowMissing` option or migration renumbering. - Cumulative source/base order is #194 → #197 → #195. #197 remains HOLD for text-query planner acceptance; #195 remains HOLD behind it. See `docs/MIGRATION_SEQUENCE.md` for deployment and existing-gap recovery boundaries. - Tests ran at `2f2e965b6794863d7f5a38a748262da4691beb35`; this final head only corrects the documented verification command to `scripts/verify.sh integration`. Fresh exact-head CI and independent review remain required. The earlier evidence below is historical, not a fresh-head approval. Preserves @sun-970 / liyuanyang's complete authored chain through `13ebe9efa6ba3c733199d374e8db3d107f598ca2` for #176. This draft makes the bounded reviewed corrections accessible; it does not replace independent review, CI, or human approval. Do not close #183 before a replacement is verified and merged. The original fork's Git-data write returned HTTP 404 and its repository permissions report `push:false`. No ACL override was attempted. This canonical branch preserves original commit identities and hashes. Added blobs, trees, and commits were checked against local Git hashes; no force update was used. ## Corrections - `scripts/verify.sh`: expect migration 24, matching this branch's lexical migration. The former expectation of 23 caused the PostgreSQL validation failure. - Refresh audited Web development dependencies, traceable to #192 commit `11e02e21ef2c3dbd2dae26e4376872e54e78ecb5` via a separate `cherry-pick -x` commit. Audit threshold unchanged. - No additional search/ranking changes beyond original #183. ## Validation at head `3d885a8427e06fd7175011ef0188a06f32028a3f` - PASS: migration to 24 on PostgreSQL 16.14 / pgvector 0.8.2 and PostgreSQL 17.10 / pgvector 0.8.3. - PASS: `TestLexicalSearchWithoutWorker`, five cases: lexical without worker, text/auto fail closed, CJK trigram, path restriction. Go tests cross-compiled for Linux and executed against real disposable PostgreSQL with `GOMAXPROCS=2` and serial package builds. - PASS: audited lockfile check; shared fix from #192 remains explicit, not attributed to this feature. - NOT CLAIMED: provider-backed vector retrieval or production benchmark quality. - REQUIRED: fresh CI on this exact head and independent review. Original-head CI/review is not approval of this draft. Original feature scope: model-free file-corpus lexical route, migration 0024, API/CLI/docs, managed-provider bypass. Scope excludes tokenizer, generation lifecycle, and ranking redesign.
) (#196) ## Linked draft successor — original #184 remains open Refs #175. Preserves @sun-970 / liyuanyang's authored chain through `89bb12bdf2ae5edbdfa17260953ec6352ab9239f` for #175. Do not close #184 before a replacement is independently verified and merged. This draft remains HOLD for live acceptance. Source-fork Git-data writes returned HTTP 404, with repository `push:false`; no ACL override was attempted. The canonical branch preserves original commit hashes and identities. Added blobs, trees, and commits were individually hash-verified; no force update was used. ## Bounded corrections - Fail closed on ambiguous cross-workspace mappings, unknown result paths, malformed responses, non-finite scores, and failed requests; retain an error artifact and exit 2. - Map the shipping folder `path` plus file `name`; do not silently discard unknown hits or infer tenant identity from snippets. - Vector mode sends `route=text`; lexical mode sends `route=lexical` with null provider/model/dimension metadata. Do not claim `auto` is lexical/vector hybrid. - Reject structured-memory queries this file-search endpoint cannot serve. Document the existing file-only `profile-text-v1` fixture as the bounded corpus. - Remove hostname collection and invented provider/index identity. Configuration labels remain explicitly operator-declared, not server-verified. - Carry #192 audit remediation as a separate `cherry-pick -x` of `11e02e21ef2c3dbd2dae26e4376872e54e78ecb5`; audit threshold unchanged. ## Validation at `651bec1679c50a9cd07cf77b27b5556c20e3273e` - PASS: Python 3.11.14, `python3.11 -m unittest discover -s benchmarks/recall/tests`: 39 tests, including the reproduced fail-closed regressions and a loopback HTTP fixture. - PASS: `python3.11 -m benchmarks.recall verify`: deterministic harness and intentional leakage failure gate. - PASS: Web audit with the explicit shared fix. - NOT VERIFIED: real memd retrieval, actual embedding-provider quality, real index selection, production latency, or full structured-memory corpus acceptance. The HTTP handler is a fixture, not memd; its timing is not live benchmark evidence. ## Exact remaining live prerequisites (no external provider authorized) 1. An isolated, authorized test deployment of real memd and its Worker, with PostgreSQL/pgvector and ingest dependencies configured, plus a token verified to belong to the test workspace. No existing user deployment or provider credentials have been used. 2. Ingest all five synthetic files from `benchmarks/recall/data/profile-text-v1/corpus.jsonl`, preserving their full paths and contents, into that workspace. The producer is not an ingestor. Confirm indexing completed and file/result identities match the fixture. 3. For the bounded fixed-text experiment, use the same locally available, explicitly selected 768-dimensional text embedding model for corpus and query. Verify the corpus/provider metadata and which active generation or fixed table the server actually uses. A label passed to the producer proves none of these facts. No paid provider, external endpoint, model download, or provider configuration was enabled by this correction. 4. Execute all four file queries through real `/v1/search` with `--mode vector`, retain sanitized rankings, then score with `run --rankings` and record the exact memd head, actual model/dimension/index, environment, and errors. An empty/error run does not satisfy live acceptance. 5. Model-free lexical is a separate optional real-server experiment requiring #183's server capability (draft successor #194); it cannot establish vector quality. Full v1 structured-memory acceptance remains unsupported by this producer and must not be reported as passed. Fresh exact-head CI and independent review/human approval remain separate required gates. No fake or paid live run is substituted for the missing evidence.
Requirement / goal
Refs #139 (CI baseline only; this PR does not expand the checkpoint bug scope). Restore the current
memWeb audit gate by refreshing the lockfile entries with published fixes.Scope
web/package-lock.json.Validation ledger
npm cinpm run audit(production and high-severity development gates)npm run lintnpm run typechecknpm run buildgit diff --checkKnown limitations