|
| 1 | +# Dependency compatibility remediation — 2026-07-30 |
| 2 | + |
| 3 | +## Scope |
| 4 | + |
| 5 | +This record covers the Python cloud/Iceberg and optional MCP dependency |
| 6 | +boundaries discovered by the final CI run. It does not claim production |
| 7 | +acceptance or replace the remaining live golden-topology gates. |
| 8 | + |
| 9 | +After the owner asked to preserve the remaining Grok/Grokw weekly quota, Codex |
| 10 | +performed all diagnosis, remediation, Mac verification, documentation, and Git |
| 11 | +closeout work described here. Grok was not invoked for this remediation. |
| 12 | + |
| 13 | +## Trigger |
| 14 | + |
| 15 | +GitHub Actions CI run |
| 16 | +[`30573486366`](https://github.com/brownjuly2003-code/agentflow/actions/runs/30573486366) |
| 17 | +tested commit `f11fd59fea61fc7bf29d3fa8f8c41139c236cfb4`. Its lint, |
| 18 | +lock, SDK, Terraform, schema, Helm, and Python 3.11/3.12/3.13 compatibility |
| 19 | +gates passed. Separate Contract, E2E, Flink Smoke, Load, Security Scan, |
| 20 | +Scorecard, and Staging Deploy workflows also passed. |
| 21 | + |
| 22 | +Two dependency boundaries still failed: |
| 23 | + |
| 24 | +- the integration job resolved `pyiceberg==0.11.1` without |
| 25 | + `pyiceberg-core`; five Iceberg write/materialization tests raised |
| 26 | + `NotInstalledError`; |
| 27 | +- `integrations[mcp]` allowed an unbounded major upgrade, so the unit job |
| 28 | + resolved `mcp==2.0.0`; that release removed the MCP 1.x `Tool.inputSchema` |
| 29 | + model field and low-level `Server.list_tools()` decorator used by the |
| 30 | + integration. |
| 31 | + |
| 32 | +## Remediation |
| 33 | + |
| 34 | +The cloud extra now installs: |
| 35 | + |
| 36 | +```toml |
| 37 | +"pyiceberg>=0.7,<1", |
| 38 | +"pyiceberg-core>=0.7,<0.8", |
| 39 | +``` |
| 40 | + |
| 41 | +PyIceberg 0.11 uses the native package for partition transforms and table |
| 42 | +appends. The previously selected core 0.8 distribution excludes Python 3.13; |
| 43 | +core 0.7 provides a stable-ABI wheel across the supported Python 3.11–3.13 |
| 44 | +matrix. `uv.lock` and the hash-locked Docker export both resolve |
| 45 | +`pyiceberg-core==0.7.0`. |
| 46 | + |
| 47 | +The MCP extra now declares `mcp>=1.0,<2`. This preserves the integration's |
| 48 | +documented MCP 1.x API instead of silently accepting a breaking major release. |
| 49 | +A unit dependency contract pins both boundaries so future configuration or |
| 50 | +lock drift fails before the runtime jobs. |
| 51 | + |
| 52 | +## Verification |
| 53 | + |
| 54 | +- RED contract stage: two new dependency contracts failed against the old |
| 55 | + declarations. |
| 56 | +- GREEN targeted stage: `38 passed` locally across dependency contracts, MCP, |
| 57 | + and non-Docker Iceberg scenarios. |
| 58 | +- Full Windows Python 3.13 unit/property suite: `2170 passed, 1 warning`. |
| 59 | +- `uv 0.8.23`: `uv lock --check` passed; the generated lock/export diff adds |
| 60 | + only `pyiceberg-core==0.7.0`. |
| 61 | +- Isolated Mac clone: |
| 62 | + `/tmp/agentflow-ci-f11-codex-deps-01`, based on exact `f11fd59` plus the |
| 63 | + five candidate dependency files. |
| 64 | +- Clean Mac Python 3.13 environment: |
| 65 | + `mcp==1.29.0`, `pyiceberg==0.11.1`, |
| 66 | + `pyiceberg-core==0.7.0`, and `pip check` passed. |
| 67 | +- Mac contract/MCP/Iceberg selection: all `39` tests passed, including the |
| 68 | + Docker REST-catalog materialization case. |
| 69 | +- Direct OSV queries for the three resolved packages returned no vulnerability |
| 70 | + records. |
| 71 | + |
| 72 | +The changed Docker lock was also rebuilt through `Dockerfile.api` on Mac: |
| 73 | + |
| 74 | +```text |
| 75 | +agentflow-api:security-codex-f11deps-01 |
| 76 | +manifest list sha256:95254620bf98e73ce89feae28e0b178a3cf00956c7e63eedd40f8958705645d1 |
| 77 | +``` |
| 78 | + |
| 79 | +The build installed `pyiceberg-core==0.7.0`, completed `pip check`, and then |
| 80 | +removed `pip`, `setuptools`, and `wheel`. Runtime API import returned |
| 81 | +`AgentFlow Query API`; `python -m pip` remained absent. Trivy `0.70.0` with |
| 82 | +`HIGH,CRITICAL`, `--ignore-unfixed`, and `--exit-code 1` exited `0`; every |
| 83 | +reported OS and Python package row was clean. |
| 84 | + |
| 85 | +## Evidence boundary |
| 86 | + |
| 87 | +This is local and isolated-Mac acceptance of the dependency candidate. The |
| 88 | +exact pushed source state must still complete the repository's GitHub CI and |
| 89 | +Security Scan. Published-image signing, external penetration testing, live |
| 90 | +lake-to-serving materialization, restore/replay, and soak/rollback remain |
| 91 | +separate gates. |
0 commit comments