Part of #1367 (Phase 0 — Foundation).
Problem
Three shipped-looking capabilities are scan/display-only:
- Zig (
build.zig.zon) — discovered (src/scanner/package-scanner.ts:119), parsed (src/utils/zig-parser.ts), rendered in PR bodies (src/pr/pr-generator.ts:501, ecosystem labelzigexists) — but there is no update-detection pass (checkZigForUpdatesdoesn't exist) andgenerateZigManifestUpdates(zig-parser.ts:173) is never called fromgenerateAllFileUpdates(src/buddy.ts:1108). A Zig PR would contain no file changes. The README markets Zig support. pantry.lock— parsed (src/utils/pantry-parser.ts) but no update detection or writer; only lock regeneration staging.resolution-drift.ts(src/scanner/resolution-drift.ts, 220 lines) — fully written, tested, exported fromsrc/index.ts, and never invoked by any command or scan path. This is the "packages capped by a dependant's range" analysis shipped in v0.9.27's scanner commit but left unwired.
Also: extractPackagesFromRunCommand() (src/utils/dockerfile-parser.ts:174) takes no arguments — dead stub; delete or implement.
Spec
Zig update pipeline
checkZigForUpdatesinsrc/buddy.tsmirroringcheckDependencyFilesForUpdates(buddy.ts:750): for each.urldependency, resolve latest upstream version (GitHub release tags forgithub.comURLs — reuse the release-lookup incheckGitHubActionsForUpdates,buddy.ts:830), compute new tarball URL, fetch it, and compute the new.hash(zig package hashes are content-addressed; shell tozig fetchwhen available, else skip hash update and mark the PR as needingzig fetch— decide and document)- Wire
generateZigManifestUpdatesintogenerateAllFileUpdates(buddy.ts:1108) - Respect
packages.ignore, strategy filtering, grouping (Zig updates should group like other ecosystems insrc/utils/helpers.ts:groupUpdates)
pantry.lock
Either implement update detection via ts-pantry version resolution (mirroring dependency-file-parser.ts) or explicitly descope: remove parse-only code paths and README claims. Decide in-issue; parse-only shipping is the worst option.
Resolution drift
- Invoke
resolution-driftanalysis insideBuddy.scanForUpdatesbehind a new config flagpackages.detectResolutionDrift(defaulttrue) - Surface findings: a "Capped dependencies" section on the dashboard (#1370) listing packages held back by a dependant's range, with the offending constraint
- Optionally propose PRs bumping the constraining dependant when that unlocks the capped package (flag-gated, default off)
Tasks
- Zig: update detection + hash strategy + writer wiring + labels/grouping + tests (fixtures under
test/fixtures/) - pantry.lock: implement or descope (with README/docs cleanup)
- Resolution drift: wire into scan, dashboard section, config flag, tests
- Remove/implement
extractPackagesFromRunCommandstub - README audit: claims must match shipped behavior after this issue
Acceptance criteria
- A repo with an outdated
build.zig.zondependency gets a PR whose diff actually updates url+hash scanForUpdatesreports drift findings and the dashboard renders them- No scan/display-only ecosystems remain (implemented or descoped + docs updated)
Dependencies
- Dashboard section lands cleanly after #1370; otherwise independent