Skip to content

[docs] - Record the 2026-10-13 dependency currency and install-surface sweep - #1640

Merged
cgfixit merged 14 commits into
mainfrom
claude/dep-sync-20261013
Oct 13, 2026
Merged

cgfixit merged 14 commits into
mainfrom
claude/dep-sync-20261013

Conversation

@cgfixit

@cgfixit cgfixit commented Oct 13, 2026 •

Copy link
Copy Markdown
Owner

Proposed changes

/dep-sync — a /verify-deps sweep of every install surface against
origin/main @ 6519135, recorded as a dated audit under docs/audits/
(the repo convention for reports). No pin is changed. The sweep found the
dependency files consistent with each other on every axis the checkers cover:

  • dep-guard D1–D11: 0 failures, 0 warnings (pydantic lock-step, numpy <2, torch +cpu, uvicorn no-extra, exact pins, pyproject↔constraints↔environment.yml, coverage flags, NeMo base dep).
  • extract_pins.py: requirements.txt + requirements-test.txt ↔ constraints.txt — no drift.
  • check_env_drift.py E1–E7: 0/0 — no undeclared import, workflow tool pins consistent, Python 3.12 everywhere, Docker surface coherent, every runtime pin still imported.
  • scripts/check_lock_contract.py: passed; all 25 locks/*.txt agree with constraints.txt on every shared pin.
  • Hashed Linux test lock and the hatchling wheel build dry-run clean; docker compose config renders. The hashed runtime lock is recorded as conditional: it resolved only because the sandbox venv already carried a torch 2.13.0 build (the lock omits torch by design), so it proves the pins and hashes, not a from-empty install.

What it could not prove here: the three surfaces that resolve
torch==2.13.0+cpu from download.pytorch.org (local dev, legacy/CI,
Dockerfile step 1) — the sandbox proxy denies that host, which is the
skill's documented "unverified, not failed" class. Conda was not dry-run.

Currency: 48 packages (47 from the install surfaces plus the hatchling
build backend, which extract_pins.py does not read), 26 behind latest.
19 current, 7 documented or compatibility-blocked exceptions (chromadb,
numpy, websockets, torch, setuptools, nltk, and huggingface-hub 2.x —
blocked by sentence-transformers==6.1.0's huggingface-hub<2.0.0), 18
runtime (the pydantic/pydantic-core lock-step pair counts as two rows,
one decision), 1 test-only (tzdata), 2 dev-tool, and 1 build-tool bump
candidates, grouped in the report into six review-ready decisions. The bump
recipe names which manifests and lock group own each package (base runtime /
extras-only / constraints-only transitives / test-only / dev tools — of the
LangChain family only langchain-core and langgraph are base;
pydantic-core is constraints-only even though it moves with base-runtime
pydantic; torch is in three manifests and never requirements.txt; the two
off-table inputs are requirements-torch.txt and the exact-pinned
scripts/ci-lock-inputs/extra-postgres.txt), states which lock-refresh
scripts a bump needs from what check_lock_contract.py actually hashes
(constraints.txt and the [project] tables → both; one group's own input →
that group; [build-system]/environment.yml → none), and for the
hard-coded contracts that move with a pin it names the command that
discovers them (git grep -nF '<version>' -- ':!locks' over tracked files,
filtered by package context with historical audits left alone, then
dep-guard and check_otel.py --strict) plus what that search returned
today: _PYDANTIC_LOCKSTEP, LAST_VERIFIED_VENDOR_PINS for the NeMo, ONNX,
and LangChain-family pins, the check_otel.py prose inventory rows that
--strict never version-checks (pendulum/pgvector/wcmatch, the
cloud-adapter deepagents/langchain-* row, the langgraph-cli analytics
row, and the core-libs row naming hatchling), the three live 1.30.0
literals in otel-hardening/verify.sh, the NeMo 0.24.0 sites in
guardrails/verify_install.py, dep-guard D11 and its fixture, ci.yml,
tests/nemo_runtime/, and five docs that doc_sync.py does not check, the
torch-cpu-2.13.0- cache keys in three workflows, the ruff==0.16.8 comment
in lint.yml that E1 does not check against the manifests, and the
versioned web-stack docs (README.md badge, the TestClient deprecation tech
note). It also records that fastapi 0.143.0 starts importing
opentelemetry-api itself — a new dependency edge onto a stack every runtime
lock already carries via chromadb under OTEL_SDK_DISABLED, so the
web-stack bump gets an otel-hardening review of FastAPI's use of it and no
new constraint; that constraints.txt's pydantic header comment is stale now
that 2.14.1 pairs with core 2.50.1; that a hatchling bump is exercised by a
full python -m build (wheel and sdist, as the release workflow runs it);
and names the real test files that exercise schemas/api.py. Advisories
were queried at the per-release PyPI endpoint for all 48 pins (the project
endpoint describes only the latest release) and are only the chromadb CVE
set and nltk CVE-2026-81726 — both already documented in SECURITY.md.

Why a report and not bumps: CLAUDE.md §7 and dep-guard class a runtime
bump as ask-first, and every bump requires regenerating the hashed locks/
on arm64 macOS (scripts/refresh-runtime-lock.sh + refresh-ci-locks.sh,
which use uv pip compile), which this Linux sandbox cannot do without
failing check_lock_contract.py. The owner picks the groups; the report
gives the exact file set and re-check per group.

Agent-instruction file changed (hook reminder):
.claude/skills/verify-deps/SKILL.md gains one Gotchas entry (2a6a4537,
extended in dfdc529e, 94e135bf, 3c53564f, c660bd48, befd6af0,
58261f9e, and 2224edb4), at the owner's request, recording the lesson
from this PR's review: derive a bump recipe from extract_pins.py columns
and the repo's checkers, derive the hard-coded-contract inventory from a
tracked-file search plus the checkers (as discovery, filtered by context),
query advisories per-release and say so, read what the lock contract hashes
before prescribing a refresh, and never work from memory of the install
surfaces. Hand-written from this session's verified findings; nothing copied
from an external source. verify-deps/verify.sh stays green.

Review history: Codex posted thirty-seven P2 findings across ten passes, all
verified against the repo or PyPI and fixed in b0b2a807, 212e4edf,
641d9abd, dfdc529e, 94e135bf, 3c53564f, c660bd48, befd6af0,
58261f9e, and 2224edb4 (threads answered and resolved). Two carried
precision notes: only opentelemetry-api is unconditional in fastapi
0.143.0, and the advisory loop had in fact queried the per-release endpoint
but the report never said so (re-run over all 48 pins, same result). All
were in the "how to act on this" guidance, the classification of rows the
guidance already treated as decisions, coverage the pin extractor never had
(the build backend), or unstated method — not the measured results for the
47 install-surface packages — which is the lesson the skill entry records.

Invariant / Governance Impact: none — one audit Markdown file added, one
skill Markdown file extended.

Types of changes

  • Bugfix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Security (auth, privacy, injection, egress, redaction, or secrets)
  • Invariant / Governance refinement (use this for changes that strengthen or evolve the 6 invariants, I6 isolation, or harness phases)
  • Dependencies (added, removed, or bumped)
  • CI / infrastructure (workflows, hooks, templates, or checkers)
  • Refactor or tests (behavior-preserving, no new capability)
  • Documentation update
  • Other (none of the boxes above fit)

Scope note: Docs + audits (a dependency audit, not a dependency change — no manifest, lock, workflow, or checker script is touched).

Benefits / why

  • One dated record answers "are the dependency files consistent and current as of today?" with the commands, results, and failure classes, so the next sweep diffs against it instead of starting over.
  • The bump candidates are pre-grouped by blast radius with the owning manifests, the hard-coded contracts, the consumer modules, and the CI checks each needs, so a bump PR can be scoped in minutes without leaking an extras-only or test-only package into the base install.
  • Confirms the two advisories PyPI reports on current pins are the already-accepted ones; nothing new to escalate.
  • The skill now carries the review's lesson, so the next sweep's recipe is checked the same way as its pin table.

Risks to monitor

  • Currency ages fast: info.version was read on 2026-10-13. Treat the table as a snapshot; re-run extract_pins.py + the PyPI loop before acting.
  • The three proxy-blocked dry-runs are unverified here and the runtime-lock result is conditional. CI's install steps and the Docker build exercise them on every PR, so a real resolution failure would already be red on main.
  • api.osv.dev was unreachable; advisory coverage is PyPI's feed only. It mirrors the PyPA advisory DB (GHSA/PYSEC ids), so coverage is equivalent for PyPI packages, but the report says so explicitly.

Checklist

  • I have read docs/THREAT_MODEL.md, INVARIANTS.md and SECURITY.md (and any relevant Phase docs)
  • This change preserves all 6 security invariants and I6 module isolation (explicit evidence or invariant matrix included for core changes)
  • Full sandbox validation has been run (GROK_API_KEY=dummy pytest tests/ -q --tb=short, and bash .claude/skills/CyClaw-Sandbox/verify.sh for core RAG/agentic paths) and passes with no regressions
  • No new external network dependencies or mandatory online LLM assumptions were introduced without explicit justification + offline fallback path
  • For any agentic/fsconnect change: two-phase audit, quota enforcement, governed delete/trash, and write guards have been verified
  • Relevant architecture docs or threat model notes have been updated if core behavior or topology changed
  • Commit messages follow the title prefix convention above
  • For large or complex changes: before/after invariant matrix + sandbox evidence is included in "Further comments" or linked

Further comments

Run directly in this session: check_deps.py, extract_pins.py,
check_env_drift.py, scripts/check_lock_contract.py, a lock↔constraints
pin diff over all 25 lock files, pip --dry-run for each surface in a
Python 3.12 venv, pip wheel --no-deps, docker compose config --quiet,
a PyPI info.version loop plus a per-release vulnerabilities loop over
all 48 pins (run twice: at the sweep and again after review),
.claude/skills/verify-deps/verify.sh after each skill edit, and
check_invariants.py after the main merge. Codex's findings were each
re-verified against the repo (extract_pins.py ownership columns,
pyproject.toml dependency tables, [build-system], and
[tool.hatch.build.targets.sdist], constraints.txt:9-12,
requirements.txt:17-20, locks/requirements-lock-linux.txt (OpenTelemetry
rows), check_lock_contract.py catalog()/contract()/digest(),
scripts/ci-lock-inputs/*.txt, check_deps.py:54, :118, :297, and
:485, check_env_drift.py:72-95, check_otel.py:127-196 and its
inventory prose at :273-278/410-413/448/494/615-625,
otel-hardening/verify.sh:48/338/344, doc_sync.py (no version rule),
utils/telemetry_kill.py (OTEL_SDK_DISABLED),
guardrails/verify_install.py:21, tests/nemo_runtime/test_nemo_runtime.py:31,
tools/lora_finetune/requirements.txt:14, ci.yml:341/366/863/1682,
lint.yml:84/91, pip-audit.yml:109, nemo-guardrails.yml:90/117,
python-publish.yml:49-55, refresh-runtime-lock.sh:95,
refresh-ci-locks.sh:138, Dockerfile:64, README.md:4,
docs/analysis/TESTCLIENT_HTTPX_DEPRECATION.md:5, .gitignore, ls tests/,
the session's own vuln.sh, and a tracked-file search for 0.24.0) or
PyPI metadata (fastapi 0.141.1 vs 0.143.0, pydantic 2.14.1,
hatchling, and the per-release advisory re-run) before the doc changed;
after each round the pin table's per-class row counts were re-counted
against the summary line. Not run: pytest (nothing under test changes),
conda, a uv install dry-run (no supported install path uses it; lock
generation does). doc_sync.py stays at 0 drift.

Suggested merge order of open PRs

Trial merges verified (git merge --no-commit --no-ff + abort) against main @ 6519135 on 2026-10-13; the branch has since merged main @ 663a8bb and again @ e61481d (after #1638 landed) cleanly — b0b212c8.

#1636 · merged ✅
Impact: removed the inert app.debug key.
Action: done.

#1639 · merged ✅
Impact: doc-sync pass over 29 READMEs/reference docs.
Action: done; this branch already contains it.

#1638 · merged ✅
Impact: the ponytail audit (docs/audits/2026-10-13-ponytail-audit.md); no file overlap with this PR.
Action: done; merged into this branch at b0b212c8.

This PR · Safe ✅
Impact: one new file under docs/audits/ and one Gotchas entry in .claude/skills/verify-deps/SKILL.md; only open PR.
Action: auto-merge is enabled; merges when checks pass.

ELI5

Think of the dependency files as five copies of the same shopping list
(pyproject.toml, constraints.txt, requirements*.txt, environment.yml,
and the hashed lock files). This PR adds a dated report saying: all five
copies agree with each other today, and here are the 26 items where the store
now sells a newer version — sorted into groups so you can decide which to
upgrade, which files each one lives in, which locked lists need regenerating
(worked out from what the lock checker actually hashes), and what to re-test.
It changes no version itself, because upgrading means regenerating the hashed
lists on the Mac and that is your call. One "newer version" (huggingface-hub
2.x) is flagged as not actually installable alongside the current
sentence-transformers, another (fastapi 0.143) starts using a telemetry
library the app already carries and already silences so it gets a look at
how it uses it, and the pydantic pair is a real upgrade now that a matching
pair exists upstream. The tool that builds the wheel (hatchling) was missing
from the count and is now in it. The only security notices on today's exact
versions (chromadb and nltk) are ones already written down and accepted in
SECURITY.md, checked version-by-version rather than against the newest
release. Three install checks could not run here because this sandbox cannot
reach PyTorch's download server, and one more only passed because torch was
already installed — both are labelled honestly. Codex caught thirty-seven
places where the "how to upgrade" instructions, the row labels, the coverage,
or the stated method were wrong or missing; all thirty-seven are fixed, and
the lesson — find the places a version is written down with a search over
tracked files, filter what it finds, say which endpoint you asked, read what
the checkers actually check, and hold the instructions to the same standard
as the numbers — is now written into the skill that produces these reports.

🤖 Generated with Claude Code

https://claude.ai/code/session_019bV9ZkenamEuQAMbhuTRGz


Generated by Claude Code

Last updated: 2026-10-13 03:35 ET

…e sweep

/verify-deps against origin/main 6519135: dep-guard D1-D11 clean, no
requirements<->constraints drift, env drift E1-E7 clean, lock contract
passed, all 25 hashed lock files agree with constraints.txt, hashed Linux
runtime/test locks and the hatchling wheel build dry-run clean. The three
surfaces that need the PyTorch CPU index are recorded as unverified because
this sandbox's proxy denies download.pytorch.org.

Currency: 47 packages, 25 behind latest, grouped into six review-ready bump
candidates; 8 documented exceptions left alone. PyPI advisories on the pins
are limited to the chromadb set and nltk CVE-2026-81726, both already in
SECURITY.md. No pin changed in this commit.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019bV9ZkenamEuQAMbhuTRGz
@github-actions

github-actions Bot commented Oct 13, 2026 •

Copy link
Copy Markdown

PR is a complete fill of .github/PULL_REQUEST_TEMPLATE.md (every section, ticked boxes, merge order, ELI5 last, last-updated stamp, title, branch).

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 14b6331d35

ℹ️ 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".

Comment thread docs/audits/2026-10-13-dependency-currency-sweep.md Outdated
Comment thread docs/audits/2026-10-13-dependency-currency-sweep.md Outdated
Comment thread docs/audits/2026-10-13-dependency-currency-sweep.md Outdated
Comment thread docs/audits/2026-10-13-dependency-currency-sweep.md Outdated
Comment thread docs/audits/2026-10-13-dependency-currency-sweep.md Outdated
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 13, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-13T07:43:01.130344Z b0b212c New commits
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

- The runtime-lock dry-run is recorded as conditional, not PASS: the lock
  omits torch by design and the sandbox venv already carried a torch 2.13.0
  build, so the resolve proves the pins and hashes, not a from-empty install.
- huggingface-hub 2.x is a compatibility-blocked exception, not a bump
  candidate: sentence-transformers==6.1.0 requires huggingface-hub<2.0.0.
  Counts: 17 runtime candidates, 9 exceptions.
- The bump recipe now names which manifests and lock group own each package
  (base runtime vs extras-only vs constraints-only transitives vs test
  tools) instead of a blanket four-file edit that would trip E4.
- The pydantic pair plan includes check_deps.py _PYDANTIC_LOCKSTEP and the
  CLAUDE.md dependency contract, which D1 pins.
- uv is used by the lock-refresh scripts; the no-uv claim is limited to
  installation surfaces.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019bV9ZkenamEuQAMbhuTRGz

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: b0b2a8077f

ℹ️ 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".

Comment thread docs/audits/2026-10-13-dependency-currency-sweep.md Outdated
Comment thread docs/audits/2026-10-13-dependency-currency-sweep.md Outdated
Two more Codex findings on the sweep report, both verified: tzdata is a
test-only dependency (pyproject test extra, requirements-test.txt,
python-tzdata in environment.yml), not base runtime; and
check_lock_contract.py hashes constraints.txt and pyproject.toml into every
lock group's inputs, so any manifest change needs both refresh scripts, not
the one whose resolved pins moved.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019bV9ZkenamEuQAMbhuTRGz

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 212e4edfc4

ℹ️ 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".

Comment thread docs/audits/2026-10-13-dependency-currency-sweep.md Outdated
Comment thread docs/audits/2026-10-13-dependency-currency-sweep.md Outdated
… plan

Two more Codex findings, both verified: no tests/test_schemas* exists, so
the pydantic plan now points at the files that import schemas/api.py
(test_gate, test_ops_runner, test_memory_routes, test_telegram_runner); and
check_otel.py pins nemoguardrails in LAST_VERIFIED_VENDOR_PINS, so that bump
needs the same telemetry re-verification the ONNX item already required.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019bV9ZkenamEuQAMbhuTRGz
…s skill

Nine correct Codex findings on PR #1640 all landed in the sweep report's
"how to bump" prose and none in its measured results. The new Gotchas entry
maps each wrong claim to the checker or file that disproves it and states
the rule: derive a bump recipe from extract_pins.py columns, grep the
hard-coded contracts, read dependents' requires_dist before a major bump,
run both lock-refresh scripts, and treat a dry-run in a pre-populated venv
as conditional.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019bV9ZkenamEuQAMbhuTRGz

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 2a6a45377b

ℹ️ 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".

Comment thread docs/audits/2026-10-13-dependency-currency-sweep.md Outdated
Comment thread docs/audits/2026-10-13-dependency-currency-sweep.md Outdated
Comment thread docs/audits/2026-10-13-dependency-currency-sweep.md Outdated
Comment thread .claude/skills/verify-deps/SKILL.md Outdated
Comment thread docs/audits/2026-10-13-dependency-currency-sweep.md Outdated
…torch pin sites

Codex round four on PR #1640, five findings, each verified against the
repo before the edit:

- tzdata is a test-only candidate: the pin-table row and the summary
  totals now agree (16 runtime | 1 test-only | 2 dev-tool).
- The base-runtime `langchain*` wildcard is replaced by `langchain-core`;
  `langchain` itself joins the extras-only list (agentic-deepagents).
- The LangChain stack item requires the otel-hardening re-verification:
  LAST_VERIFIED_VENDOR_PINS records langchain, langchain-core, langgraph,
  and langsmith, so --strict exits 2 until they move.
- The nemoguardrails item names the three other hard-coded 0.24.0 sites:
  guardrails/verify_install.py, dep-guard D11, and ci.yml's wheel assert.
- requirements-torch.txt is named as the torch-lock input that
  extract_pins.py has no column for, in the report and the skill gotcha.

Checked: verify-deps/verify.sh OK, doc_sync.py 0 drift, table-row counts
per class match the summary line.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019bV9ZkenamEuQAMbhuTRGz

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: dfdc529ee4

ℹ️ 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".

Comment thread docs/audits/2026-10-13-dependency-currency-sweep.md Outdated
Comment thread .claude/skills/verify-deps/SKILL.md Outdated
Comment thread docs/audits/2026-10-13-dependency-currency-sweep.md Outdated
…PI's new otel dep

Codex round five on PR #1640, three findings, each verified before the
edit:

- fastapi 0.143.0's PyPI metadata adds opentelemetry-api as an
  unconditional dependency (0.141.1 declares none; the SDK and OTLP
  exporter stay behind extras). Item 2 now requires the otel-hardening
  classification pass and an exact constraints.txt pin before the bump.
- The NeMo item no longer hand-lists the 0.24.0 sites; it names the
  grep that produces the inventory and records what it returned today,
  including tests/nemo_runtime's exact-version assert (run by
  nemo-guardrails.yml), dep-guard's verify.sh fixture, and five docs.
- Torch cache keys (torch-cpu-2.13.0-) in three workflows are named as
  the form a `torch==` grep misses and dep-guard D8 exists to catch.

The skill gotcha is reframed the same way: the inventory of hard-coded
contracts is a bare-version-string grep plus dep-guard and
check_otel.py --strict, never a list written from memory, and a bumped
package's requires_dist is read for new transitives.

Checked: verify-deps/verify.sh OK, doc_sync.py 0 drift, 16 runtime rows.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019bV9ZkenamEuQAMbhuTRGz

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 94e135bf45

ℹ️ 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".

Comment thread docs/audits/2026-10-13-dependency-currency-sweep.md
Comment thread docs/audits/2026-10-13-dependency-currency-sweep.md Outdated
Comment thread docs/audits/2026-10-13-dependency-currency-sweep.md
…nership in the sweep

Codex round six on PR #1640, three findings, each verified before the
edit:

- pydantic 2.14.1 hard-pins pydantic-core==2.50.1 on PyPI, so the pair is
  a lock-step runtime candidate (one decision, two rows), not an
  exception; totals move from 16/9 to 18/7 and the table rows agree.
  constraints.txt's header comment claiming no newer pydantic pairs with
  the newer core is noted as stale and moving with the pin.
- pydantic-core is constraints-only (extract_pins shows one column;
  pyproject.toml says why), so the base-runtime bullet no longer lists
  the pair; item 4 splits the ownership.
- pendulum, pgvector, and wcmatch versions appear in check_otel.py's
  prose inventory, which --strict never reads, so item 5 requires the
  source re-check and inventory-row update per bump.

The skill gotcha records the two generalisations: a lock-step pair whose
new parent exists is a candidate, and the strict otel run covers only the
pin dict, so the bare-version grep is what finds inventory prose.

Checked: verify-deps/verify.sh OK, doc_sync.py 0 drift, rows 18/1/2/19/7.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019bV9ZkenamEuQAMbhuTRGz

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 3c53564ff4

ℹ️ 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".

Comment thread docs/audits/2026-10-13-dependency-currency-sweep.md Outdated
Comment thread docs/audits/2026-10-13-dependency-currency-sweep.md Outdated
Comment thread docs/audits/2026-10-13-dependency-currency-sweep.md
Comment thread .claude/skills/verify-deps/SKILL.md Outdated
Comment thread docs/audits/2026-10-13-dependency-currency-sweep.md Outdated
Codex round seven on PR #1640, five findings, each verified before the
edit:

- torch lives in pyproject.toml, constraints.txt, and environment.yml
  only; requirements.txt excludes it on purpose and the Dockerfile
  installs the Linux lock, so the "four manifests plus a Docker torch
  line" wording is gone.
- lint.yml names ruff==0.16.8 only in a comment beside its hashed-lock
  install, and E1 compares workflow pins with each other, not with the
  manifests, so the comment is updated by hand, not caught by E1.
- constraints.txt pins direct deps plus selected critical transitives
  and leaves the rest to the hashed locks; opentelemetry-api earns a pin
  on telemetry grounds, not under a universal "no transitive floats" rule.
- The pin-site inventory uses `git grep -nF ... -- ':!locks'` over
  tracked files; a bare `grep -rn` walks ignored logs/, data/, and venvs
  and prints whatever matched.
- The otel cloud-adapter INVENTORY row carries deepagents/langchain-*
  versions in prose the strict run never compares; the LangChain item
  rewrites it with the bump.

Checked: verify-deps/verify.sh OK, doc_sync.py 0 drift, rows 18/1/2/19/7.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019bV9ZkenamEuQAMbhuTRGz

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c660bd4863

ℹ️ 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".

Comment thread .claude/skills/verify-deps/SKILL.md
Comment thread docs/audits/2026-10-13-dependency-currency-sweep.md Outdated
Comment thread docs/audits/2026-10-13-dependency-currency-sweep.md Outdated
Comment thread .claude/skills/verify-deps/SKILL.md Outdated
Codex round eight on PR #1640, four findings, each verified before the
edit:

- hatchling==1.32.0 lives in [build-system].requires, which
  extract_pins.py never reads; added as a 48th row (latest 1.32.4, no
  advisories) with its own build-tool class and a dev-tools item entry.
- opentelemetry-api/-sdk/the gRPC exporter are already in every runtime
  lock via chromadb and already under OTEL_SDK_DISABLED, so FastAPI
  0.143.0 adds a dependency edge, not a new package; item 2 now asks for
  a review of FastAPI's use of the installed stack and no new constraint.
- The bare-version search is discovery, not the edit set: 0.24.0 also
  matches trl<=0.24.0 in the LoRA kit and every dated audit; filter by
  package context and leave historical audits alone.
- doc_sync.py has no dependency-version check; the five NeMo docs are
  fixed by hand and re-verified by re-running the search.

Checked: verify-deps/verify.sh OK, doc_sync.py 0 drift, rows
18/1/2/1/19/7 = 48.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019bV9ZkenamEuQAMbhuTRGz

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: befd6af07e

ℹ️ 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".

Comment thread docs/audits/2026-10-13-dependency-currency-sweep.md Outdated
Comment thread docs/audits/2026-10-13-dependency-currency-sweep.md Outdated
Comment thread docs/audits/2026-10-13-dependency-currency-sweep.md Outdated
Comment thread docs/audits/2026-10-13-dependency-currency-sweep.md Outdated
Comment thread docs/audits/2026-10-13-dependency-currency-sweep.md
…'s otel and doc inventory

Codex round nine on PR #1640, five findings, each verified before the
edit:

- The advisory section now says every package was queried at the
  pinned-version PyPI endpoint (the original loop did; the report never
  said so) and records a re-run over all 48 pins with the same two
  results. The project endpoint's vulnerabilities array covers only the
  latest release, which the skill gotcha now states as a rule.
- The langgraph-cli analytics row in check_otel.py carries
  "langgraph==1.2.11 family" in prose; item 1 adds it to the rows
  rewritten with the LangChain bump.
- The web-stack item names the two versioned documents that move with
  it: the README FastAPI badge and the TestClient deprecation tech note,
  whose shim claim is re-verified against starlette 1.7.0, not reworded.
- The hatchling item requires a full `python -m build` (wheel and sdist,
  as python-publish.yml runs it; ci.yml builds only the wheel) and an
  update to check_otel.py's core-libs prose row that names its version.

Checked: verify-deps/verify.sh OK, doc_sync.py 0 drift, rows
18/1/2/1/19/7 = 48, advisory re-run 48 queried / 46 clean.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019bV9ZkenamEuQAMbhuTRGz

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 58261f9e2d

ℹ️ 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".

Comment thread .claude/skills/verify-deps/SKILL.md
Comment thread .claude/skills/verify-deps/SKILL.md Outdated
Comment thread docs/audits/2026-10-13-dependency-currency-sweep.md
…o more pin sites

Codex round ten on PR #1640, three findings, each verified before the
edit:

- check_lock_contract.py digests pyproject.toml by its [project]
  dependency tables only, so the "both refresh scripts after any manifest
  change" rule is now precise: both when constraints.txt or those tables
  move, one group's script when only its own input file moves, none for
  [build-system] or environment.yml edits.
- scripts/ci-lock-inputs/extra-postgres.txt is the one extra lock input
  with exact pins (psycopg, psycopg-binary); a psycopg bump edits it or
  refresh-ci-locks.sh fails on the stale pin.
- otel-hardening/verify.sh carries three live 1.30.0 literals (an exact
  assertion and two mutation targets) that an onnxruntime bump must edit.

Checked: verify-deps/verify.sh OK, doc_sync.py 0 drift, rows
18/1/2/1/19/7 = 48.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019bV9ZkenamEuQAMbhuTRGz
@cgfixit
cgfixit merged commit b3771da into main Oct 13, 2026
71 checks passed
@cgfixit
cgfixit deleted the claude/dep-sync-20261013 branch October 13, 2026 08:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants