Skip to content

chore: re-check the 1.0 gates against main and list what blocks them #351

Open

Description

@shivamlalakiya

Goal

Know exactly what stands between main and the 1.0 API freeze described under ## [1.0.0] - TBD in CHANGELOG.md.

Acceptance criteria

  • Run each of the five gates listed in that section's Notes against current main, and post the command and its output for each here.
  • List every public symbol (from each subpackage's __all__) whose tier in docs/reference/index.md is missing, unclear, or Tier 1 while mid-deprecation.
  • List any DeprecationWarning still emitted by a Tier 1 symbol, with the version it was introduced in.
  • Open one follow-up issue per real blocker, linked from here.

Scope

A report and follow-up issues. No API changes in this issue.

Where to start

  • CHANGELOG.md [1.0.0] section
  • docs/reference/index.md
  • tests/test_public_api_contract.py, tests/test_deprecations.py

Dependencies

Status (2026-11-04)

The gate report is in the comments (2026-11-03, against 03c3c43): four gates pass, gate 2 fails on wording only, and the follow-up is #357. Once #357 rewords the gate, this issue's acceptance criteria are met.

Phase order is a release plan, not a rule against picking up independent work early. Comment on this issue before you start so two people don't build the same thing.

Activity

  1. added
    documentationImprovements or additions to documentation
    roadmapPlanned phase work; see the phase milestones
    on Nov 3, 2026
  2. Jahnavi-HJ commented on Nov 3, 2026

    @Jahnavi-HJ

    Hi! I'd like to work on this audit issue.

  3. Jahnavi-HJ commented on Nov 3, 2026

    @Jahnavi-HJ

    I’ll inspect the release-gate notes, API reference, deprecation tests, and linked issue decisions first; then I’ll run the exact gate commands and assemble the report with their output summaries.

    Search for ## \[1\.0\.0\] - TBD|Notes|gate|Gate

    Read
    Completed with input: {
    "path": "C:\Users\Jahnavi H J\PhilanthroPy\docs\reference\index.md"
    }

    "Get issue details" failed
    Completed with input: {
    "owner": "Jahnavi-HJ",
    "repo": "PhilanthroPy",
    "issue_number": 351,
    "method": "get"
    }
    Tool execution failed: MCP server 'github-mcp-server': failed to get issue: GET https://api.github.com/repos/Jahnavi-HJ/PhilanthroPy/issues/351: 404 Not Found []

    "Get issue details" failed
    Completed with input: {
    "owner": "Jahnavi-HJ",
    "repo": "PhilanthroPy",
    "issue_number": 110,
    "method": "get"
    }
    Tool execution failed: MCP server 'github-mcp-server': failed to get issue: GET https://api.github.com/repos/Jahnavi-HJ/PhilanthroPy/issues/110: 404 Not Found []

    Search for DeprecationWarning|deprecated|deprecat

    Search for \[1\.0\.0\] - TBD

    Read
    Completed with input: {
    "path": "C:\Users\Jahnavi H J\PhilanthroPy\tests\test_deprecations.py"
    }

    Read
    Completed with input: {
    "path": "C:\Users\Jahnavi H J\PhilanthroPy\tests\test_public_api_contract.py"
    }

    Search for GratefulPatientFeaturizer|EncounterTransformer|110|PHI-free|index-encounter

    Ran terminal command: git status --short --branch; git branch --show-current; git remote -v

    Get issue details
    Completed with input: {
    "owner": "PhilanthroPy-Project",
    "repo": "PhilanthroPy",
    "issue_number": 351,
    "method": "get"
    }

    Get issue details
    Completed with input: {
    "owner": "PhilanthroPy-Project",
    "repo": "PhilanthroPy",
    "issue_number": 110,
    "method": "get"
    }

    Search for 1\.0 gate|release gate|gate command|deprecated_alias|metadata\.version|py\.ty...

    Search for ^\| `|Tier 1|Tier 2|Tier 3|Unclear|unclear|deprecat

    Find files matching philanthropy/**/__init__.py

    Search for deprecated_alias

    Read , lines 1 to 210
    Completed with input: {
    "path": "C:\Users\Jahnavi H J\PhilanthroPy\docs\reference\index.md",
    "view_range": [
    1,
    210
    ]
    }

    Read , lines 1 to 120
    Completed with input: {
    "path": "C:\Users\Jahnavi H J\PhilanthroPy\tests\test_public_api_contract.py",
    "view_range": [
    1,
    120
    ]
    }

    Read , lines 350 to 430
    Completed with input: {
    "path": "C:\Users\Jahnavi H J\PhilanthroPy\tests\test_public_api_contract.py",
    "view_range": [
    350,
    430
    ]
    }

    Read , lines 1 to 220
    Completed with input: {
    "path": "C:\Users\Jahnavi H J\PhilanthroPy\RELEASING.md",
    "view_range": [
    1,
    220
    ]
    }

    Get issue details
    Completed with input: {
    "owner": "PhilanthroPy-Project",
    "repo": "PhilanthroPy",
    "issue_number": 351,
    "method": "get_comments",
    "perPage": 20
    }

    Get issue details
    Completed with input: {
    "owner": "PhilanthroPy-Project",
    "repo": "PhilanthroPy",
    "issue_number": 110,
    "method": "get_comments",
    "perPage": 20
    }

    Ran terminal command: git branch -a --no-color; git rev-parse HEAD; git rev-parse origin/main; git log -1 --format="%h %ad %s" --date=iso-strict origin/main

    Read , lines 78 to 210
    Completed with input: {
    "path": "C:\Users\Jahnavi H J\PhilanthroPy\docs\reference\index.md",
    "view_range": [
    78,
    210
    ]
    }

    Read , lines 430 to 510
    Completed with input: {
    "path": "C:\Users\Jahnavi H J\PhilanthroPy\tests\test_public_api_contract.py",
    "view_range": [
    430,
    510
    ]
    }

    Read
    Completed with input: {
    "path": "C:\Users\Jahnavi H J\PhilanthroPy\philanthropy\preprocessing\init.py"
    }

    Read
    Completed with input: {
    "path": "C:\Users\Jahnavi H J\PhilanthroPy\philanthropy\init.py"
    }

    Search for def test_stability_tier|_TIER_HEADINGS|tier table|mid-deprecation|__version__...

    Search for 0\.7\.0|__version__|py\.typed|wheel

    The checkout is exactly the current origin/main commit. Issue #110 is still open; its latest comment proposes documenting the limitation now and deferring per-gift keying, but does not record a settled decision. I’m now checking the gates as executable checks, including the version/tag and wheel metadata conditions.

    Ran terminal command: git tag --list v0.7.0; git diff --stat v0.7.0..origin/main -- tests/test_public_api_contract.py; git diff --unified=3 v0.7.0..origin/main -- tests/test_public_api_contract.py

    Ran terminal command: $r = Invoke-RestMethod -Uri 'https://pypi.org/pypi/philanthropy/0.7.0/json'; "PyPI release: $($r.info.name) $($r.info.version); published files: $($r.urls.Count)"

    Ran terminal command: git status --short; Get-Content pyproject.toml | Select-String -Pattern '^version\s*=|^[tool.setuptools|packages|package-data' -Context 0,1; Get-ChildItem philanthropy -Filter py.typed -Recurse | Select-Object -ExpandProperty FullName

    Configuring a Python Environment
    Completed with input: {
    "resourcePath": "C:\Users\Jahnavi H J\PhilanthroPy"
    }

    Creating a Virtual Environment
    Completed with input: {
    "resourcePath": "C:\Users\Jahnavi H J\PhilanthroPy"
    }

    Search for ^\+\s+"[A-Za-z][A-Za-z0-9_]*":|^\+.*_EXEMPT|^\+.*exemption|^\+.*gate

    Ran terminal command: & 'C:\Users\Jahnavi H J\AppData\Local\Python\pythoncore-3.14-64\python.exe' -m pytest tests/test_public_api_contract.py -q
    Tool execution failed with exit code 1

    Ran terminal command: & 'C:\Users\Jahnavi H J\AppData\Local\Python\pythoncore-3.14-64\python.exe' -m pytest tests/test_deprecations.py -q
    Tool execution failed with exit code 1

    Ran terminal command: $matches = rg -n 'deprecated_alias' philanthropy; if ($LASTEXITCODE -eq 1) { 'PASS: no deprecated_alias occurrences in philanthropy/'; exit 0 } elseif ($LASTEXITCODE -eq 0) { $matches; exit 1 } else { exit $LASTEXITCODE }

    Ran terminal command: Get-ChildItem -Force | Select-Object Name,Mode; Get-Command pytest -All -ErrorAction SilentlyContinue | Select-Object Source,CommandType; Get-Command python, py -All -ErrorAction SilentlyContinue | Select-Object Name,Source

    Search for SolicitationWindowTransformer|deprecated alias|removed in 1\.0\.0|0\.9\.0

    Ran terminal command: git log --format="%h %ad %s" --date=short v0.7.0..origin/main -S '"EncounterTransformer": (' -- tests/test_public_api_contract.py; git log --format="%h %ad %s" --date=short v0.7.0..origin/main -S '"MatchingGiftFeaturizer": (' -- tests/test_public_api_contract.py; git log --format="%h %ad %s" --date=short v0.7.0..origin/main -S '"GiftIntervalCalibrator": (' -- tests/test_public_api_contract.py

    Discovering tests...
    Tool execution failed: No VS Code tests matched the requested files. The request has not been validated.

    Configuring a Python Environment
    Completed with input: {
    "resourcePath": "C:\Users\Jahnavi H J\PhilanthroPy",
    "pythonPath": "C:\Users\Jahnavi H J\PhilanthroPy\.venv\Scripts\python.exe"
    }

    Ran terminal command: & 'C:\Users\Jahnavi H J\PhilanthroPy.venv\Scripts\python.exe' -m pytest tests/test_public_api_contract.py -q

    Ran terminal command: & 'C:\Users\Jahnavi H J\PhilanthroPy.venv\Scripts\python.exe' -m pytest tests/test_deprecations.py -q

    Ran terminal command: & 'C:\Users\Jahnavi H J\PhilanthroPy.venv\Scripts\python.exe' -c "import importlib.metadata as m, philanthropy; installed=m.version('philanthropy'); print(f'version={philanthropy.version}; metadata={installed}'); assert philanthropy.version == installed"; if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }; $out = Join-Path $env:TEMP 'philanthropy-1-0-gate-wheel'; & 'C:\Users\Jahnavi H J\PhilanthroPy.venv\Scripts\python.exe' -m build --wheel --no-isolation --outdir $out; if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }; $wheel = Get-ChildItem $out -Filter '*.whl' | Select-Object -First 1; if (-not $wheel) { Write-Error 'No wheel was produced'; exit 1 }; & 'C:\Users\Jahnavi H J\PhilanthroPy.venv\Scripts\python.exe' -c "import sys,zipfile; p=sys.argv[1]; z=zipfile.ZipFile(p); names=z.namelist(); found=any(n.endswith('philanthropy/py.typed') for n in names); print('wheel='+p); print('philanthropy/py.typed='+str(found)); assert found" $wheel.FullName; exit $LASTEXITCODE
    Tool execution failed with exit code 1

    Ran terminal command: git diff --unified=0 v0.7.0..origin/main -- tests/test_public_api_contract.py | Select-String -Pattern '^+.*"(GiftIntervalCalibrator|EncounterTransformer|MatchingGiftFeaturizer)"'; if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }

    Ran terminal command: $out = Join-Path $env:TEMP 'philanthropy-1-0-gate-wheel'; & 'C:\Users\Jahnavi H J\PhilanthroPy.venv\Scripts\python.exe' -m pip wheel --no-deps --no-build-isolation --wheel-dir $out .; if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }; $wheel = Get-ChildItem $out -Filter '*.whl' | Select-Object -First 1; if (-not $wheel) { Write-Error 'No wheel was produced'; exit 1 }; & 'C:\Users\Jahnavi H J\PhilanthroPy.venv\Scripts\python.exe' -c "import sys,zipfile; p=sys.argv[1]; z=zipfile.ZipFile(p); found=any(n.endswith('philanthropy/py.typed') for n in z.namelist()); print('wheel='+p); print('philanthropy/py.typed='+str(found)); assert found" $wheel.FullName; exit $LASTEXITCODE
    Tool execution failed with exit code 2

    Read , lines 1575 to 1660
    Completed with input: {
    "path": "C:\Users\Jahnavi H J\PhilanthroPy\CHANGELOG.md",
    "view_range": [
    1575,
    1660
    ]
    }

    Ran terminal command: git status --short --branch; git diff --stat; git tag --contains origin/main v0.7.0

    Installing setuptools>=77 in .venv (3.14.5)
    Completed with input: {
    "packageList": [
    "setuptools>=77"
    ],
    "resourcePath": "C:\Users\Jahnavi H J\PhilanthroPy"
    }

    Ran terminal command: $out = Join-Path $env:TEMP 'philanthropy-1-0-gate-wheel'; & 'C:\Users\Jahnavi H J\PhilanthroPy.venv\Scripts\python.exe' -m pip wheel --no-deps --no-build-isolation --wheel-dir $out .; if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }; $wheel = Get-ChildItem $out -Filter '*.whl' | Select-Object -First 1; if (-not $wheel) { Write-Error 'No wheel was produced'; exit 1 }; & 'C:\Users\Jahnavi H J\PhilanthroPy.venv\Scripts\python.exe' -c "import sys,zipfile; p=sys.argv[1]; z=zipfile.ZipFile(p); found=any(n.endswith('philanthropy/py.typed') for n in z.namelist()); print('wheel='+p); print('philanthropy/py.typed='+str(found)); assert found" $wheel.FullName; $result=$LASTEXITCODE; Remove-Item -LiteralPath $out -Recurse -Force; exit $result

    Search for ^## \[0\.[0-9]+\.[0-9]+\]|SolicitationWindowTransformer.*deprecated|deprecate...

    Ran terminal command: git diff --unified=0 v0.7.0..origin/main -- tests/test_public_api_contract.py | Select-String -Pattern '^+\s+"[A-Za-z][A-Za-z0-9_]*": ('; if ($LASTEXITCODE -gt 1) { exit $LASTEXITCODE }; 'Added exemption entries listed above; current count: 3'

    Ran terminal command: $r = Invoke-RestMethod -Uri 'https://pypi.org/pypi/philanthropy/0.7.0/json'; "Command result: HTTP success; package=$($r.info.name); version=$($r.info.version); files=$($r.urls.Count)"

    The API contract suite passes, but the history comparison finds three new exemptions since v0.7.0, so that compound gate is not satisfied. The only live package deprecation is SolicitationWindowTransformer, which the index assigns Tier 2; I’m running the tier-table-only selector once for a distinct gate result and confirming the build left the checkout clean.

    Ran terminal command: & 'C:\Users\Jahnavi H J\PhilanthroPy.venv\Scripts\python.exe' -m pytest tests/test_public_api_contract.py -q -k 'reference_index_declares_all_three_tiers or stability_tier_table_covers_every_public_symbol or tier_table_names_no_symbol_that_is_no_longer_public'

    Ran terminal command: git status --short --branch; git rev-parse --short origin/main; git rev-parse --short HEAD

    5 Gates Execution Results

    Audited origin/main at 03c3c43 (same commit as the checkout).

    Gate Result Command and output summary
    1. 0.7.0 published PASS Command: $r = Invoke-RestMethod -Uri 'https://pypi.org/pypi/philanthropy/0.7.0/json'; "PyPI release: $($r.info.name) $($r.info.version); published files: $($r.urls.Count)"
    Output: PyPI release: philanthropy 0.7.0; published files: 2
    2. Public API contract green; no exemption added since 0.7.0 FAIL & 'C:\Users\Jahnavi H J\PhilanthroPy\.venv\Scripts\python.exe' -m pytest tests/test_public_api_contract.py -q
    Output: 116 passed, 11 skipped, 7 warnings in 2.30s — the test is green. However, comparison with v0.7.0 found three added exemptions: GiftIntervalCalibrator, EncounterTransformer, and MatchingGiftFeaturizer. The “no exemption added” condition therefore fails.
    3. No deprecated_alias in philanthropy/ PASS Command: $matches = rg -n 'deprecated_alias' philanthropy; if ($LASTEXITCODE -eq 1) { 'PASS: no deprecated_alias occurrences in philanthropy/'; exit 0 } elseif ($LASTEXITCODE -eq 0) { $matches; exit 1 } else { exit $LASTEXITCODE }
    Output: PASS: no deprecated_alias occurrences in philanthropy/
    4. Version metadata matches; wheel contains py.typed PASS Version command output: __version__=0.9.0; metadata=0.9.0
    Built with & 'C:\Users\Jahnavi H J\PhilanthroPy\.venv\Scripts\python.exe' -m pip wheel --no-deps --no-build-isolation --wheel-dir $out .
    Output: wheel philanthropy-0.9.0-py3-none-any.whl built; inspection reported philanthropy/py.typed=True. The first build attempt found missing build tooling; after installing setuptools>=77 in the existing venv, the wheel check passed.
    5. Every public symbol has a tier; no Tier 1 symbol is mid-deprecation PASS & 'C:\Users\Jahnavi H J\PhilanthroPy\.venv\Scripts\python.exe' -m pytest tests/test_public_api_contract.py -q -k 'reference_index_declares_all_three_tiers or stability_tier_table_covers_every_public_symbol or tier_table_names_no_symbol_that_is_no_longer_public'
    Output: 12 passed, 115 deselected, 2 warnings in 0.39s. The separate deprecation audit found no Tier 1 symbol emitting a deprecation warning.

    Public API Symbol & Tier Audit

    Compared the subpackage __all__ exports with the tier tables in docs/reference/index.md using the tier-table tests in tests/test_public_api_contract.py.

    • Missing tier: none found.
    • Unclear tier: none found.
    • Tier 1 while mid-deprecation: none found.
    • SolicitationWindowTransformer is mid-deprecation but is designated Tier 2, not Tier 1.

    Deprecation Warnings Audit

    tests/test_deprecations.py passed: 4 passed. It registers one live package deprecation:

    • philanthropy.preprocessing.SolicitationWindowTransformer warns on attribute access; it was introduced as deprecated in 0.7.0, is scheduled for removal in 1.0.0, and recommends DischargeToSolicitationWindowTransformer. Its Tier 2 status means it is not a Tier 1 deprecation blocker.

    The public API test run also reported two asyncio deprecation warnings from the nbmake pytest plugin; these are environment/plugin warnings, not warnings from Tier 1 package symbols.

    Recommended Blockers / Follow-up Issues to Open

    1. Reconcile the exemption gate. The contract test passes, but the stated no-new-exemptions condition fails due to the three additions above. Open a follow-up to review their rationale and decide whether to remove them or explicitly revise/ratify the gate.
    2. Settle design decision #110. It remains open. Its latest comment proposes documenting latest-discharge keying as a limitation and deferring per-gift keying, but no decision or documentation change is recorded. Resolve the decision and link the outcome from #351; avoid opening a duplicate issue for the same decision.

    Summary: Four of the five listed gates pass; the no-new-exemptions condition fails. Issue #110 also remains an unresolved 1.0 dependency.

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

    documentationImprovements or additions to documentationgood first issueGood for newcomersroadmapPlanned phase work; see the phase milestones

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions