Skip to content

Triage the first dependabot batch (#34–#41): merge six, fix two, hold the dev-tools group #45

Description

@gregoryfoster

The first dependabot batch since #33 landed the config: eight open PRs (#34#41).
Each was reviewed against CI status, the diff, and the upstream changelog. This
issue records the verdicts and tracks the work through to a green main.

Verdicts

Merge as-is — CI green, risk understood

PR Bump Why it is safe
#39 pydantic 2.13.3 → 2.13.4 Patch.
#40 mistune 3.2.1 → 3.3.4 Highest value in the batch. 3.3.0 fixes four CWE-400 quadratic-DoS parses (parse_link_text, bracket parsing, ref-link scans, formatting markers); 3.3.3 swaps link filtering from a HARMFUL_PROTOCOLS denylist to a SAFE_PROTOCOLS allowlist. src/core/notifications/html_render.py renders consumer-supplied markdown, so this is effectively a security bump. Behaviour to watch: exotic link schemes in existing templates are now dropped.
#34 actions/checkout v4 → v7 Clears the Node 20 deprecation. v7's breaking change blocks fork checkout under pull_request_target/workflow_run; neither is used here.
#35 astral-sh/setup-uv v5 → v7 Node 24, plus removal of the deprecated server-url input, which is not used.
#38 python-ulid 3.1.0 → 4.0.1 (service) 4.0 removes ValueProvider/ULID.provider; nothing here touches either — src/core/models/base.py calls ULID()/ULID.from_str, src/api/schemas/types.py reads base32.ENCODE. The new default StrictMonotonicPolicy helps index locality, and no code treats a ULID as unguessable (API key secrets are SHA-256 hashes).
#41 python-ulid <4<5 (SDK) The SDK's only use is str(ULID()) in clients/python/src/notifier_client/idempotency.py, compatible with both majors. See the spec note below.

Merge, then verify the running service

#37 — uvicorn 0.46.0 → 0.52.4. Six 0.x minors at once, on the process
serving 9000 and 9001. Each reviewed: 0.48's SSL-cipher default and 0.49's
proxy-header handling are irrelevant (plain HTTP on the tailnet, no
--proxy-headers in scripts/serve.sh or scripts/dev_server.sh); 0.50
deprecates the legacy websockets implementation, unused; 0.51 drops colorama
from the standard extra, and no extra is declared; 0.52's zttp parser is
opt-in behind --http zttp. 0.50 also adds a dedicated startup-failure exit
code that stops the supervisor, which helps Restart=on-failure. Cap <0.53
satisfies the 0.x rule from #30.

After merging: sudo systemctl restart notifier notifier-dev, then curl both
/health on the tailnet address.

Hold — the bump alone cannot go green

#36 — dev-tools group, 8 updates across 2 directories. test and
migrations pass (pytest 9 and pytest-asyncio 1.4 are fine); lint and
staleness fail for reasons the version bump cannot fix on its own:

  • lint (exit 2). ruff 0.16 formats Python code blocks inside Markdown
    by default — 4 files would be reformatted. It also aborts with
    io: No such file or directory on skills/brainstorming/visual-companion.md,
    a symlink into skills-vendor/ that dangles because the lint job checks
    out without submodules. Fix: add skills/ to [tool.ruff] extend-exclude
    (today only skills-vendor/ and alembic/versions/), then
    uv run ruff format . and commit. The 413-rules-by-default change is
    inert here — select is explicit.
  • staleness. openapi-python-client 0.29 emits
    datetime.datetime.fromisoformat(...) where 0.28 emitted
    dateutil.parser.isoparse(...), across four generated models. Fix: run
    clients/python/scripts/regen.sh and commit. Then check whether
    python-dateutil is still reachable from the generated output; if not,
    drop it from clients/python/pyproject.toml rather than leave the
    "required by openapi-python-client output" comment lying.
  • Spec nit. pytest>=8.0,<10 spans a major with only 9.1.1 locked.
    Tighten the floor to >=9.1.1,<10.

Push those commits onto dependabot/uv/dev-tools-fad3384c4f rather than closing
and redoing by hand — dependabot stops rebasing once a human pushes.

Loose ends

Merge order

#39 → #40 → #38 → #37 (root table, increasing risk), then #34 + #35
(workflows, independent), then #41 (SDK table, independent), then #36 once
the three fixes above are on its branch.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    dependenciesPull requests that update a dependency file

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions