Skip to content
This repository was archived by the owner on Jul 17, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
# Keep release and dependency policy visibly owned by the maintainer.
/.github/workflows/** @Ezio2000
/.github/dependabot.yml @Ezio2000
/python/**/pyproject.toml @Ezio2000
/python/uv.lock @Ezio2000
/pyproject.toml @Ezio2000
/packages/**/pyproject.toml @Ezio2000
/uv.lock @Ezio2000
/scripts/** @Ezio2000
2 changes: 1 addition & 1 deletion .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ version: 2

updates:
- package-ecosystem: uv
directory: /python
directory: /
schedule:
interval: weekly
day: tuesday
Expand Down
48 changes: 24 additions & 24 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,24 +30,24 @@ jobs:
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
with:
enable-cache: true
cache-dependency-glob: python/uv.lock
cache-dependency-glob: uv.lock

- name: Install locked dependencies
run: uv --project python sync --locked
run: uv sync --locked

- name: Synchronize pinned specification
run: uv --project python run python scripts/sync_spec.py
run: uv run python scripts/sync_spec.py

- name: Smoke test conformance entry point
run: uv --project python run conformance --help
run: uv run conformance --help

- name: Verify coordinated release metadata
run: uv --project python run python scripts/verify_release.py
run: uv run python scripts/verify_release.py

- name: Check public export documentation
shell: bash
run: |
uv --project python run python - <<'PY'
uv run python - <<'PY'
import importlib
import inspect
import typing
Expand Down Expand Up @@ -78,47 +78,47 @@ jobs:
PY

- name: Lint
run: uv --project python run ruff check --config python/pyproject.toml .
run: uv run ruff check --config pyproject.toml .

- name: Check formatting
run: uv --project python run ruff format --check --config python/pyproject.toml .
run: uv run ruff format --check --config pyproject.toml .

- name: Type-check
run: uv --project python run pyright --project python
run: uv run pyright --project .

- name: Test with branch coverage
env:
COVERAGE_FILE: ${{ runner.temp }}/.coverage
run: >-
uv --project python run pytest
-c python/pyproject.toml
uv run pytest
-c pyproject.toml
-q
-p no:cacheprovider
--cov
--cov-config=python/pyproject.toml
--cov-config=pyproject.toml
--cov-report=term-missing:skip-covered

- name: Repeat timing and ownership regressions
shell: bash
run: |
for attempt in 1 2 3; do
uv --project python run pytest \
-c python/pyproject.toml \
uv run pytest \
-c pyproject.toml \
-q \
-p no:cacheprovider \
python/kernel/tests/test_runtime.py \
python/kernel/tests/test_diagnostics.py
packages/kernel/tests/test_runtime.py \
packages/kernel/tests/test_diagnostics.py
done

- name: Build and verify the three product distributions
shell: bash
run: |
for package in jharness-kernel jharness-toolkit jharness-providers; do
uv --project python build \
uv build \
--package "$package" \
--out-dir "$RUNNER_TEMP/dist"
done
uv --project python run python scripts/verify_wheels.py "$RUNNER_TEMP/dist"
uv run python scripts/verify_wheels.py "$RUNNER_TEMP/dist"

runtime:
name: Python ${{ matrix.python-version }} (${{ matrix.os }})
Expand All @@ -143,22 +143,22 @@ jobs:
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
with:
enable-cache: true
cache-dependency-glob: python/uv.lock
cache-dependency-glob: uv.lock

- name: Install locked dependencies
run: uv --project python sync --locked
run: uv sync --locked

- name: Synchronize pinned specification
run: uv --project python run python scripts/sync_spec.py
run: uv run python scripts/sync_spec.py

- name: Test runtime
run: uv --project python run pytest -c python/pyproject.toml -q -p no:cacheprovider
run: uv run pytest -c pyproject.toml -q -p no:cacheprovider

- name: Run conformance CLI
run: >-
uv --project python run conformance
uv run conformance
.jharness-spec/conformance/cases
--spec-dir .jharness-spec/contracts/v0

- name: Run benchmark
run: uv --project python run python benchmarks/runtime_smoke.py
run: uv run python benchmarks/runtime_smoke.py
30 changes: 15 additions & 15 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,53 +50,53 @@ jobs:
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
with:
enable-cache: true
cache-dependency-glob: python/uv.lock
cache-dependency-glob: uv.lock

- name: Install locked dependencies
if: github.event_name == 'push'
run: uv --project python sync --locked
run: uv sync --locked

- name: Synchronize pinned specification
if: github.event_name == 'push'
run: uv --project python run python scripts/sync_spec.py
run: uv run python scripts/sync_spec.py

- name: Verify tag, coordinated versions, and changelog
if: github.event_name == 'push'
run: uv --project python run python scripts/verify_release.py --tag "$RELEASE_TAG"
run: uv run python scripts/verify_release.py --tag "$RELEASE_TAG"

- name: Run release quality gate
if: github.event_name == 'push'
shell: bash
run: |
uv --project python run ruff check --config python/pyproject.toml .
uv --project python run ruff format --check --config python/pyproject.toml .
uv --project python run pyright --project python
uv --project python run pytest \
-c python/pyproject.toml \
uv run ruff check --config pyproject.toml .
uv run ruff format --check --config pyproject.toml .
uv run pyright --project .
uv run pytest \
-c pyproject.toml \
-q \
-p no:cacheprovider \
--cov \
--cov-config=python/pyproject.toml \
--cov-config=pyproject.toml \
--cov-report=term-missing:skip-covered
uv --project python run conformance \
uv run conformance \
.jharness-spec/conformance/cases \
--spec-dir .jharness-spec/contracts/v0
uv --project python run python benchmarks/runtime_smoke.py
uv run python benchmarks/runtime_smoke.py

- name: Build the three product distributions
if: github.event_name == 'push'
shell: bash
run: |
for package in jharness-kernel jharness-toolkit jharness-providers; do
uv --project python build --package "$package" --out-dir dist
uv build --package "$package" --out-dir dist
done

- name: Verify publishable artifacts
if: github.event_name == 'push'
shell: bash
run: |
uv --project python run python scripts/verify_wheels.py dist
uv --project python run twine check dist/*
uv run python scripts/verify_wheels.py dist
uv run twine check dist/*
sha256sum dist/* > dist/SHA256SUMS

- name: Recover the verified artifact from the failed release
Expand Down
16 changes: 8 additions & 8 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,16 +42,16 @@ complete/stream protocols.
Python must be managed with `uv`; never use `pip`.

```bash
uv --project python sync --locked
uv --project python run python scripts/sync_spec.py
uv --project python run pytest -c python/pyproject.toml -q -p no:cacheprovider
uv --project python run ruff check --config python/pyproject.toml .
uv --project python run ruff format --check --config python/pyproject.toml .
uv --project python run pyright --project python
uv --project python run conformance \
uv sync --locked
uv run python scripts/sync_spec.py
uv run pytest -c pyproject.toml -q -p no:cacheprovider
uv run ruff check --config pyproject.toml .
uv run ruff format --check --config pyproject.toml .
uv run pyright --project .
uv run conformance \
.jharness-spec/conformance/cases \
--spec-dir .jharness-spec/contracts/v0
uv --project python run python benchmarks/runtime_smoke.py
uv run python benchmarks/runtime_smoke.py
```

Do not claim completion until the spec pin, implementation, dependency gates,
Expand Down
11 changes: 10 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,14 @@ versions follow [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

## [0.1.2] - 2026-07-15

### Changed

- Moved the uv workspace to the repository root and grouped all workspace
projects under `packages/`, removing the redundant top-level `python/`
directory.

## [0.1.1] - 2026-07-15

### Changed
Expand All @@ -31,6 +39,7 @@ versions follow [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
- Portable v0 contracts, 66 conformance cases, diagnostics, and trace verification.
- Per-distribution Trusted Publisher environments for credential-free first releases.

[Unreleased]: https://github.com/Ezio2000/jharness-python/compare/v0.1.1...HEAD
[Unreleased]: https://github.com/Ezio2000/jharness-python/compare/v0.1.2...HEAD
[0.1.2]: https://github.com/Ezio2000/jharness-python/compare/v0.1.1...v0.1.2
[0.1.1]: https://github.com/Ezio2000/jharness-python/compare/v0.1.0...v0.1.1
[0.1.0]: https://github.com/Ezio2000/jharness-python/releases/tag/v0.1.0
14 changes: 7 additions & 7 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@ JHarness Python changes must preserve the architecture and package boundaries in
`AGENTS.md`. Python is managed exclusively with `uv`.

```bash
uv --project python sync --locked
uv --project python run python scripts/sync_spec.py
uv --project python run pytest -c python/pyproject.toml -q -p no:cacheprovider
uv --project python run ruff check --config python/pyproject.toml .
uv --project python run ruff format --check --config python/pyproject.toml .
uv --project python run pyright --project python
uv --project python run conformance \
uv sync --locked
uv run python scripts/sync_spec.py
uv run pytest -c pyproject.toml -q -p no:cacheprovider
uv run ruff check --config pyproject.toml .
uv run ruff format --check --config pyproject.toml .
uv run pyright --project .
uv run conformance \
.jharness-spec/conformance/cases \
--spec-dir .jharness-spec/contracts/v0
```
Expand Down
16 changes: 8 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,16 +39,16 @@ verifies its digest before running conformance.
Python is managed exclusively with `uv`; do not use `pip`.

```bash
uv --project python sync --locked
uv --project python run python scripts/sync_spec.py
uv --project python run pytest -c python/pyproject.toml -q -p no:cacheprovider
uv --project python run ruff check --config python/pyproject.toml .
uv --project python run ruff format --check --config python/pyproject.toml .
uv --project python run pyright --project python
uv --project python run conformance \
uv sync --locked
uv run python scripts/sync_spec.py
uv run pytest -c pyproject.toml -q -p no:cacheprovider
uv run ruff check --config pyproject.toml .
uv run ruff format --check --config pyproject.toml .
uv run pyright --project .
uv run conformance \
.jharness-spec/conformance/cases \
--spec-dir .jharness-spec/contracts/v0
uv --project python run python benchmarks/runtime_smoke.py
uv run python benchmarks/runtime_smoke.py
```

## Documentation
Expand Down
2 changes: 1 addition & 1 deletion docs/model-providers.md
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,7 @@ uses in one response; callers should control runtime execution concurrency with
## Testing

Provider adapter behavior is tested in the owning package under
`python/providers/tests`.
`packages/providers/tests`.

Default tests use mocked HTTP transports and cover each Chat Completions feature
independently, including message/content encoding, model options, tool choice,
Expand Down
2 changes: 1 addition & 1 deletion docs/performance.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ content checksum.
Run from the repository root with the uv-selected interpreter:

```bash
uv --project python run python benchmarks/runtime_smoke.py
uv run python benchmarks/runtime_smoke.py
```

The benchmark compares identical asynchronous tools under serial and
Expand Down
11 changes: 6 additions & 5 deletions docs/python-package-boundaries.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
# Python Package Boundaries

Python uses a uv workspace rooted at `python/` with standard `src` layouts.
Commands run from the repository root with `uv --project python`.
Python uses a uv workspace rooted at the repository root with standard `src`
layouts under `packages/`. Commands run directly from the repository root with
`uv`.

## Distributions and Workspace Projects

Expand Down Expand Up @@ -58,9 +59,9 @@ transitive package is never treated as an implicit direct dependency.
## Source Layout

```text
python/
pyproject.toml
uv.lock
pyproject.toml
uv.lock
packages/
kernel/
pyproject.toml
src/jharness/kernel/
Expand Down
20 changes: 10 additions & 10 deletions docs/releasing.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,23 +57,23 @@ short-lived OIDC credential from each package index.
6. Refresh and verify the lock file:

```bash
uv --project python lock
uv --project python sync --locked
uv --project python run python scripts/sync_spec.py
uv lock
uv sync --locked
uv run python scripts/sync_spec.py
```

7. Run the local release gate:

```bash
uv --project python run python scripts/verify_release.py
uv --project python run pytest -c python/pyproject.toml -q -p no:cacheprovider
uv --project python run ruff check --config python/pyproject.toml .
uv --project python run ruff format --check --config python/pyproject.toml .
uv --project python run pyright --project python
uv --project python run conformance \
uv run python scripts/verify_release.py
uv run pytest -c pyproject.toml -q -p no:cacheprovider
uv run ruff check --config pyproject.toml .
uv run ruff format --check --config pyproject.toml .
uv run pyright --project .
uv run conformance \
.jharness-spec/conformance/cases \
--spec-dir .jharness-spec/contracts/v0
uv --project python run python benchmarks/runtime_smoke.py
uv run python benchmarks/runtime_smoke.py
```

The pull request must merge before the release tag is created. Do not build or upload
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ normative runner contract, while this project contains Python implementation
code. This project is never included in product builds.

```bash
uv --project python run conformance \
uv run conformance \
.jharness-spec/conformance/cases \
--spec-dir .jharness-spec/contracts/v0
```
Expand Down
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "jharness-kernel"
version = "0.1.1"
version = "0.1.2"
description = "JHarness model-neutral immutable runtime kernel"
readme = "README.md"
requires-python = ">=3.11"
Expand Down
File renamed without changes.
Loading
Loading