Skip to content

chore: complete the trove classifiers before the first release - #81

Merged
jothimani-rajendran merged 1 commit into
mainfrom
meta/classifiers-pre-release
Aug 30, 2026
Merged

jothimani-rajendran merged 1 commit into
mainfrom
meta/classifiers-pre-release

Conversation

@jothimani-rajendran

Copy link
Copy Markdown
Collaborator

What this changes

Adds six accurate trove classifiers to pyproject.toml so the first PyPI release carries
correct, filterable metadata. Nothing about the code changes — this is packaging metadata only.

Why now, and not later: PyPI metadata is immutable per version. Once v0.1.0 is tagged and
published, 0.1.0's classifiers are frozen forever; the only fix is a new version. This is the
last moment it is free.

Added:

Classifier Basis
Environment :: Console the package ships a console-invoked runtime (run, adapter dispatch, bundled hook entry points)
Operating System :: OS Independent stdlib-only, no platform-conditional code or deps
Programming Language :: Python :: 3.93.13 requires-python = ">=3.9" was already declared but only the bare :: 3 classifier was present, so PyPI's Python-version filter did not match this package at all
Topic :: Software Development :: Libraries :: Python Modules the conventional narrowing under the Libraries topic already claimed

Unchanged deliberately: Development Status :: 3 - Alpha stays. Per-version honesty — the
project is pre-1.0 and the compatibility promise starts at 1.0.

On the per-version rows: CI exercises 3.9, 3.11 and 3.13 (the ends and the middle). 3.10 and
3.12 are claimed as interpolation between CI-verified endpoints on a stdlib-only codebase, not as
separately witnessed runs. That is stated in a comment in the file so the next reader does not
have to reconstruct it.

Claim check

Not applicable — no adapter, matrix row, or capability claim is touched. No capability claim is
widened; this PR only makes packaging metadata match constraints the project already declares.

Checks

  • pytest -q — not re-run; the diff is six lines of packaging metadata with no import-time or
    runtime effect. Verified instead at the artifact level, which is what this change actually
    affects (below).
  • ruff check . / ruff format --check . — untouched paths; no Python source in the diff
  • Runtime path is still stdlib-only (no dependency change; dependencies = [] unchanged)
  • Commit is signed off

Artifact-level verification, run against this branch:

  • python -m build --wheel succeeds; built agentseam-0.1.0-py3-none-any.whl
  • the wheel's METADATA carries all 13 classifiers and Requires-Python: >=3.9
  • every classifier validates against the trove-classifiers registry (0 invalid)
  • twine check on the built wheel: PASSED

Notes for the reviewer

This is go-live-blocking in the weak sense: it is not blocking the tag, but it must land before
the tag, or the fix costs a version bump. Ordering, per contract decision #10: flip the repo
public → confirm a workflow runs green → merge this → tag v0.1.0.

CI on this PR is expected red for the known private-repo Actions ceiling, not for anything in the
diff. Per decision #10, merge it manually on the local validation above rather than working around
the ceiling.


Generated by Claude Code

PyPI metadata is immutable per version, so these are worth getting right
before v0.1.0 rather than in a follow-up release.

- Python minor versions: requires-python already claims >=3.9 but the
  classifiers said only 'Python :: 3', so PyPI's version facet -- how
  people filter -- showed nothing. Lists 3.9 through 3.13, matching
  requires-python; CI exercises the ends and the middle (3.9, 3.11, 3.13).
- Operating System :: OS Independent -- accurate: the runtime is
  stdlib-only with no platform-specific dependency.
- Environment :: Console -- the package ships an 'agentseam' console
  entry point.
- Topic :: Software Development :: Libraries :: Python Modules -- the
  conventional companion to the Libraries topic already declared.

No claim here exceeds what the package delivers: Development Status stays
3 - Alpha for a first release, and no Typing :: Typed is claimed since the
package ships no py.typed marker.

Signed-off-by: Claude <noreply@anthropic.com>

Copy link
Copy Markdown
Collaborator Author

CI is red on all 11 checks, and none of it is this PR's

Failing on 80aefcf: lint, stdlib-only, no-private-data, examples, dco,
test (ubuntu-latest, 3.9), test (3.11), test (3.13), actionlint, semgrep, zizmor.

This is the Actions-minutes ceiling recorded as contract decision #10, not a defect in the diff.
Four independent pieces of evidence:

  1. The base branch is red too. CI run #190 on main at c8bd4c4 — the commit this branch
    is one commit ahead of — failed in 5 seconds (02:27:19Z → 02:27:24Z). So did runs #186
    and #184. The last green run on this repo was #181 at 2026-08-29 20:54:17Z, which took
    38 seconds; everything from 20:59:55Z onward dies in about five.
  2. No runner was ever allocated. The dco job reports runner_id: 0 and an empty
    runner_name, created and completed two seconds apart.
  3. Job logs 404. There is no log to read, because no job body ran.
  4. dco cannot fail on this commit. 80aefcf carries Signed-off-by:. A check that only
    greps commit trailers, failing in two seconds with no runner, is reporting infrastructure.

No re-run, deliberately. Decision #10 is explicit that nobody re-runs or works around this;
three attempts were already spent diagnosing it on #78. Re-running now would spend a fourth on a
condition we have already characterized.

The fix already exists and is the next step in the go-live sequence: flip this repo public.
Public repos get unmetered Actions, and go-live flips it public anyway — that is exactly why the
sequence was reordered to put the public flip before the tag. Nothing in this PR needs to
change for CI to pass; the runner just needs to exist.

Meanwhile the change is validated locally, at the level a packaging diff actually affects:
python -m build --wheel succeeds, the wheel's METADATA carries all 13 classifiers, every one
validates against the trove-classifiers registry, and twine check PASSES.

Per decision #10 this is one for manual merge — and it should merge before the v0.1.0 tag,
since PyPI freezes a version's metadata permanently.


Generated by Claude Code

@jothimani-rajendran
jothimani-rajendran marked this pull request as ready for review August 30, 2026 03:02
@jothimani-rajendran
jothimani-rajendran merged commit 6b93a36 into main Aug 30, 2026
1 of 12 checks passed
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