Skip to content

chore(meta): add PyPI discovery metadata and regulatory keyword coverage - #106

Merged
lab700xdev merged 2 commits into
mainfrom
slice-122-seo-metadata
Sep 8, 2026
Merged

lab700xdev merged 2 commits into
mainfrom
slice-122-seo-metadata

Conversation

@lab700xdev

Copy link
Copy Markdown
Contributor

Closes the CLI half of Lab700xOrg/aisbom-ops#122 (SEO/discovery metadata pass).

Why

The package shipped with no keywords, no classifiers and no license field, so the PyPI page carried zero search facets and no license signal — despite the Apache-2.0 LICENSE sitting in the repo. The README also had no coverage of the regulatory terms buyers actually search for (EU AI Act 0 hits, Annex XI 0, Cyber Resilience Act 0, MLSecOps 0).

What changed

  • pyproject.tomllicense = "Apache-2.0", 22 keywords, 15 classifiers.
  • pyproject.toml — rewrote the PyPI summary, which read "An AI Supply Chain security tool that that detects…", and aligned it with the GitHub repo description.
  • README.md — PyPI downloads badge; a "The regulatory risk" bullet covering EU AI Act Article 53 / Annex XI, the EU Cyber Resilience Act and FDA §524B.
  • tests/test_packaging_metadata.py — new guards. None of this metadata is runtime behaviour, which is exactly why it needs a test: it is invisible in a normal review and silently deleteable in a routine pyproject.toml edit.

The regulatory copy is evidence-framed, never a verdict — it closes with "it doesn't assess or certify compliance, and that assessment stays with you as the provider." It claims no Article 53 feature; aisbom comply is not built.

Verification

  • poetry run pytest1148 passed, coverage 92.80% (gate 85%).
  • poetry build + read the real wheel METADATALicense: Apache-2.0, the full Keywords: line and every classifier present. Poetry additionally auto-added Programming Language :: Python :: 3.14 and License-File: LICENSE. This proves PyPI rendering without publishing.
  • poetry check → warnings only, all pre-existing [tool.poetry]-vs-[project] deprecations that affect the existing keys too.
  • No file under aisbom/ is touched by this diff, so there is no scan behaviour to regress.

Deliberately not done

  • No release. Metadata only reaches the PyPI page on publish; it rides with whatever ships next.
  • No [project] migration. Poetry warns that moving classifiers there disables its automatic enrichment, so we would lose the auto Python/license classifiers. Left as a follow-up.

The package shipped with no keywords, no classifiers and no license field,
so the PyPI page carried zero search facets and no license signal despite
the Apache-2.0 LICENSE on disk. Add all three, plus a guard test, since
none of this is runtime behaviour and all of it is silently deleteable in
a routine pyproject edit.

- pyproject: license Apache-2.0, 22 keywords, 15 classifiers
- pyproject: rewrite the summary, which read "a tool that that detects"
- README: PyPI downloads badge, and a regulatory-risk bullet covering
  EU AI Act Article 53 / Annex XI, the EU Cyber Resilience Act and
  FDA 524B, framed as evidence rather than as a compliance verdict
- tests: assert the keywords, classifiers, license and README terms hold

No runtime code is touched. Refs #122.
`_write_malicious_pt` called `writestr` with a plain entry name, which
stamps each entry with the current local time at the DOS format's 2-second
granularity. `test_default_scan_preserves_every_1_6_component_field`
regenerates the artifact before each of its two scans and then asserts the
component hashes match, so it failed whenever the first scan happened to
cross a 2-second boundary — a coin flip, latent since the test was written,
and unrelated to whatever change is on the branch when it fires.

Pin the entry timestamps and add a regression test asserting the fixture is
reproducible. Verified by writing the fixture twice 2.1s apart: identical
SHA-256 with the fix, different without it.
@lab700xdev
lab700xdev merged commit 29ffe46 into main Sep 8, 2026
2 checks passed
@lab700xdev
lab700xdev deleted the slice-122-seo-metadata branch September 8, 2026 02:04
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.

1 participant