Skip to content
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
14 changes: 7 additions & 7 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,28 +13,28 @@ jobs:
- uses: actions/setup-python@v5
with:
python-version: '${{ matrix.python }}'
- run: python -m pip install -e '.[dev]' -e ./packages/pytest-narrative-contracts
- run: python -m pip install -e '.[dev]' -e ./packages/pytest-mateprobe
- run: pytest
- run: ruff check . && ruff format --check . && mypy
- run: python benchmarks/run.py --variants 1 --output /tmp/narrative-benchmark
- run: python benchmarks/expanded_mutations.py --output /tmp/expanded-mutations
- name: Replay captured model outputs offline
run: |
python benchmarks/natural.py replay --input benchmarks/natural-results --output /tmp/natural-replay
python scripts/compare_replay.py benchmarks/natural-results/evaluation/reports.json /tmp/natural-replay/reports.json --old-version 0.1.0a2 --new-version 0.1.0a3
python scripts/compare_replay.py benchmarks/natural-results/evaluation/reports.json /tmp/natural-replay/reports.json --old-version 0.1.0a2 --new-version 0.1.0a4
cmp benchmarks/natural-results/evaluation/summary.json /tmp/natural-replay/summary.json
- name: Replay remote outputs and frozen mutation audit
run: |
python benchmarks/natural.py replay --input benchmarks/remote-results --output /tmp/remote-replay
python scripts/compare_replay.py benchmarks/remote-results/evaluation/reports.json /tmp/remote-replay/reports.json --old-version 0.1.0a2 --new-version 0.1.0a3
python scripts/compare_replay.py benchmarks/remote-results/evaluation/reports.json /tmp/remote-replay/reports.json --old-version 0.1.0a2 --new-version 0.1.0a4
cmp benchmarks/remote-results/evaluation/summary.json /tmp/remote-replay/summary.json
python benchmarks/real_mutations.py evaluate --prepared benchmarks/real-mutation-results/prepared --output /tmp/real-mutations
python benchmarks/replay_renamed_mutations.py --output /tmp/real-mutations
cmp benchmarks/real-mutation-results/evaluation/summary.json /tmp/real-mutations/summary.json
python scripts/compare_replay.py benchmarks/real-mutation-results/evaluation/cases.json /tmp/real-mutations/cases.json --old-version 0.1.0a2 --new-version 0.1.0a3 --report-path result.report
python scripts/compare_replay.py benchmarks/real-mutation-results/evaluation/cases.json /tmp/real-mutations/cases.json --old-version 0.1.0a2 --new-version 0.1.0a4 --report-path result.report
python examples/five_minute_demo.py
- name: Audit existing validators offline
run: python examples/audit_existing_validator.py --output /tmp/validator-audit
- run: python -m build && python -m build packages/pytest-narrative-contracts
- run: python -m build && python -m build packages/pytest-mateprobe
- name: Source mutation regression checks
if: matrix.python == '3.12'
run: python benchmarks/mutate_guards.py --output /tmp/source-mutations.json
Expand Down Expand Up @@ -72,7 +72,7 @@ jobs:
run: |
python -m pip install build twine
python -m build --outdir /tmp/core-dist
python -m build packages/pytest-narrative-contracts --outdir /tmp/plugin-dist
python -m build packages/pytest-mateprobe --outdir /tmp/plugin-dist
python -m twine check --strict /tmp/core-dist/* /tmp/plugin-dist/*
python -m pip install /tmp/core-dist/*.whl /tmp/plugin-dist/*.whl -r requirements-integrations.txt
- name: Exercise installed APIs, docs and pytest plugin
Expand Down
33 changes: 24 additions & 9 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,29 +14,44 @@ concurrency:
cancel-in-progress: true

jobs:
published-examples:
installed-examples:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install the published alpha, not this checkout
run: >-
python -m pip install --index-url https://pypi.org/simple
narrative-contracts==0.1.0a3 pytest-narrative-contracts==0.1.0a3
-r requirements-integrations.txt
- name: Build and install MateProbe wheels outside the source tree
run: |
python -m pip install build
python -m build --wheel --outdir /tmp/mateprobe-wheels
python -m build --wheel packages/pytest-mateprobe --outdir /tmp/mateprobe-wheels
python -m pip install /tmp/mateprobe-wheels/*.whl -r requirements-integrations.txt
- run: python scripts/check_alpha_install.py --output /tmp/published-docs-evidence
- run: python scripts/check_launch_package.py --output /tmp/launch-evidence
- run: python benchmarks/replay_agent_readiness.py --output /tmp/a3-agent-readiness
- uses: actions/upload-artifact@v4
if: always()
with:
name: published-docs-evidence
path: |
/tmp/published-docs-evidence
/tmp/launch-evidence
/tmp/a3-agent-readiness

historical-a3-trial:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install the historical a3 trial dependencies
run: python -m pip install narrative-contracts==0.1.0a3 pytest-narrative-contracts==0.1.0a3
- run: python benchmarks/replay_agent_readiness.py --output /tmp/a3-agent-readiness
- uses: actions/upload-artifact@v4
if: always()
with:
name: historical-a3-agent-readiness
path: /tmp/a3-agent-readiness

historical-a2-trial:
runs-on: ubuntu-latest
Expand Down Expand Up @@ -72,7 +87,7 @@ jobs:

deploy:
if: github.ref == 'refs/heads/main' && github.event_name != 'pull_request'
needs: [build, published-examples, historical-a2-trial]
needs: [build, installed-examples, historical-a2-trial, historical-a3-trial]
runs-on: ubuntu-latest
permissions:
pages: write
Expand Down
25 changes: 10 additions & 15 deletions .github/workflows/publish-pypi.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,9 @@ on:
version:
description: 'Released artifact version'
type: choice
default: 0.1.0a3
default: 0.1.0a4
options:
- 0.1.0a3
- 0.1.0a2
- 0.1.0a4
package:
description: 'Package selection for publishing or recovery'
type: choice
Expand All @@ -29,7 +28,7 @@ concurrency:
cancel-in-progress: false
jobs:
verify:
if: github.repository == 'Mate4b/narrative-contracts' && github.ref == 'refs/heads/main'
if: github.repository == 'Mate4b/mateprobe' && github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
Expand All @@ -41,23 +40,19 @@ jobs:
GH_TOKEN: ${{ github.token }}
RELEASE_VERSION: ${{ inputs.version }}
run: |
gh release download "v${RELEASE_VERSION}" --repo Mate4b/narrative-contracts \
gh release download "v${RELEASE_VERSION}" --repo Mate4b/mateprobe \
--pattern '*.whl' --pattern '*.tar.gz' --dir downloaded
if [ "$RELEASE_VERSION" = "0.1.0a3" ]; then
python scripts/stage_pypi_a3.py --source downloaded --output pypi-dist
else
python scripts/stage_pypi_a2.py --source downloaded --output pypi-dist
fi
python scripts/stage_pypi_a4.py --source downloaded --output pypi-dist
- name: Check metadata and wheel imports
env:
RELEASE_VERSION: ${{ inputs.version }}
run: |
python -m pip install twine pytest pypi-dist/*.whl
python -m twine check --strict pypi-dist/*
python -I -c 'from importlib.metadata import version; import narrative_contracts, os; assert version("narrative-contracts") == version("pytest-narrative-contracts") == narrative_contracts.__version__ == os.environ["RELEASE_VERSION"]'
python -I -c 'from importlib.metadata import version; import mateprobe, os; assert version("mateprobe") == version("pytest-mateprobe") == mateprobe.__version__ == os.environ["RELEASE_VERSION"]'
python examples/five_minute_demo.py
- name: Exercise a3 installed APIs and integrations
if: inputs.version == '0.1.0a3'
- name: Exercise a4 installed APIs and integrations
if: inputs.version == '0.1.0a4'
run: |
python -m pip install -r requirements-integrations.txt
python scripts/check_alpha_install.py --output /tmp/alpha-install
Expand All @@ -74,10 +69,10 @@ jobs:
fail-fast: false
max-parallel: 1
matrix:
prefix: ${{ fromJSON(inputs.package == 'core' && '["narrative_contracts"]' || inputs.package == 'plugin' && '["pytest_narrative_contracts"]' || '["narrative_contracts","pytest_narrative_contracts"]') }}
prefix: ${{ fromJSON(inputs.package == 'core' && '["mateprobe"]' || inputs.package == 'plugin' && '["pytest_mateprobe"]' || '["mateprobe","pytest_mateprobe"]') }}
environment:
name: pypi
url: https://pypi.org/project/narrative-contracts/
url: https://pypi.org/project/mateprobe/
permissions:
id-token: write
steps:
Expand Down
12 changes: 7 additions & 5 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Working on Narrative Contracts
# Working on MateProbe by Mate4B

## Install and verify

Expand All @@ -7,7 +7,7 @@ Use Python 3.11+. From the repository root:
```sh
python -m venv .venv
. .venv/bin/activate
python -m pip install -e '.[dev]' -e ./packages/pytest-narrative-contracts
python -m pip install -e '.[dev]' -e ./packages/pytest-mateprobe
pytest
ruff check .
ruff format --check .
Expand All @@ -16,18 +16,20 @@ mypy

For documentation builds, install `requirements-docs.txt` and run
`python scripts/build_docs.py`. For published-package examples, use a **separate**
environment with `narrative-contracts==0.1.0a3`, `pytest-narrative-contracts==0.1.0a3`,
environment with `mateprobe==0.1.0a4`, `pytest-mateprobe==0.1.0a4`,
and `pydantic==2.13.5`, then run `python scripts/check_published_docs.py`;
an editable checkout cannot verify published compatibility. See
[the agent integration guide](docs/agent-guide.md) for consumer instructions.

## Version boundary

The current release is `0.1.0a3`, including independent audits and state bindings.
The current release is `0.1.0a4`, including independent audits and state bindings.
Verify built distributions in an isolated environment with
`python scripts/check_alpha_install.py --output /tmp/alpha-check` (install the
optional integration requirements first). Keep frozen a2 research artifacts and
the agent-adoption replay pinned to a2; do not rewrite historical evidence.
the agent-adoption replay pinned to a2 and agent-readiness replay pinned to a3;
do not rewrite historical evidence. Use `benchmarks/replay_renamed_mutations.py`
for the frozen real-output mutation replay against MateProbe.
Keep the agent guide, `llms.txt`, and API reference consistent with installable artifacts.

## Public repository boundary
Expand Down
11 changes: 11 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,16 @@
# Changelog

## 0.1.0a4 — 2026-09-29

- Renamed the project to **MateProbe by Mate4B**. The MIT license is unchanged.
- New distributions: `mateprobe` and `pytest-mateprobe`; Python imports are
`mateprobe` and `pytest_mateprobe`; CLI is `mateprobe`.
- The pytest fixture is now `mateprobe`, with `--mateprobe-report` for JSON output.
- Contract and audit behavior, report schema versions, and frozen research evidence
are unchanged. Runtime report metadata identifies version `0.1.0a4`.
- See [the migration guide](docs/migration-mateprobe.md). Historical releases retain
their original names and bytes.

## 0.1.0a3 — 2026-09-29

- Audit existing validators through paired cases, finding attribution, controls, and explicit obligation inventories.
Expand Down
1 change: 1 addition & 0 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
MIT License

Copyright (c) 2026 Narrative Contracts contributors
Copyright (c) 2026 Mate4B and MateProbe contributors

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down
Loading
Loading