• v0.39.1 40cfe948b2

    joeyr released this 2026-08-24 08:56:00 -05:00 | 91 commits to main since this release

    The sweep that removed the credential left the person behind it. 0.39.0 took a real
    Canvas feed URL out of tests/test_feeds.py and genericised the institution in its host.
    Four lines below that fix sat the same university's athletics host, and elsewhere in the
    suite sat the account holder's name and one of their calendar names — none of them a
    credential, all of them read off a real account or the person holding it.

    Security

    • No fixture names the account holder. A full real name stood as the
      comma-in-a-display-name example in mcp_gateway/mail/parts.py, a real calendar name was
      the colon fixture in tests/test_config.py and tests/test_eventid.py, and a first name
      was an OAuth email claim. Each replacement keeps the shape the test is actually about and
      drops the person: the display name still contains a comma, and the calendar name still
      contains the colon that forces CALENDARS to be quoted.

    • No fixture names the institution. The athletics host of the university that
      <school>.instructure.com had just stopped naming was still in tests/test_feeds.py,
      proving that a path segment with no extension redacts to the bare host. A reserved domain
      proves it identically.

    Added

    • tests/test_no_pii.py refuses an unrecognised real host in tests/. The Canvas rule
      added in 0.39.0 is pinned to a vendor, and a vendor-pinned rule is blind to a host at an
      unrelated domain however plainly it names the same institution — which is how one
      survived the commit that removed the other. A fixture may name a vendor endpoint the
      tenants integrate against or this project's own infrastructure, and nothing else; an
      organisation someone belongs to is neither.

      Scoped to tests/, not the repo. Prose has every reason to name real hosts — a
      registry, a spec, a changelog entry about an outage — and a rule that fought the
      documentation would be widened until it matched nothing. A fixture is invented input, so
      a real host in one arrived by being pasted from somewhere real.

      A port is stripped before the host is judged and an unparseable authority is skipped:
      the deployment tests carry :8443 and :8787, and test_icloudmail_unsubscribe feeds
      https://[oops to the gate on purpose. Proved in both directions — the rule was run
      against the host it exists to catch, and reports it and nothing else.

    Note

    • This release changes no runtime code. mcp_gateway/ is untouched apart from one
      docstring and the version constant, so the deployed behaviour is identical to 0.39.0.
    Downloads