paxman 1.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- paxman-1.0.0/.gitignore +79 -0
- paxman-1.0.0/CHANGELOG.md +308 -0
- paxman-1.0.0/LICENSE +21 -0
- paxman-1.0.0/PKG-INFO +434 -0
- paxman-1.0.0/README.md +394 -0
- paxman-1.0.0/docs/INVESTOR_PITCH_CONTENT.md +227 -0
- paxman-1.0.0/docs/MAINTAINERS.md +66 -0
- paxman-1.0.0/docs/TEST_DATA.md +583 -0
- paxman-1.0.0/docs/adr/0001-field-centric-planning.md +110 -0
- paxman-1.0.0/docs/adr/0002-rule-based-planner-v1.md +110 -0
- paxman-1.0.0/docs/adr/0003-separate-reconciler.md +91 -0
- paxman-1.0.0/docs/adr/0004-money-first-class-type.md +108 -0
- paxman-1.0.0/docs/adr/0005-confidence-ownership.md +113 -0
- paxman-1.0.0/docs/adr/0006-sequential-execution-v1.md +102 -0
- paxman-1.0.0/docs/adr/0007-contract-adapter-set-v1.md +109 -0
- paxman-1.0.0/docs/adr/0008-license-decision.md +114 -0
- paxman-1.0.0/docs/adr/0009-dict-dsl-v1.md +134 -0
- paxman-1.0.0/docs/adr/0010-budget-money-decimal.md +137 -0
- paxman-1.0.0/docs/adr/AGENTS.md +52 -0
- paxman-1.0.0/docs/adr/README.md +126 -0
- paxman-1.0.0/docs/concepts/MIGRATION_GUIDE.md +314 -0
- paxman-1.0.0/docs/concepts/RELEASE_NOTES_v1.0.0.md +274 -0
- paxman-1.0.0/docs/concepts/capabilities.md +299 -0
- paxman-1.0.0/docs/concepts/contracts.md +385 -0
- paxman-1.0.0/docs/concepts/planning.md +310 -0
- paxman-1.0.0/docs/concepts/reconciliation.md +353 -0
- paxman-1.0.0/docs/concepts/replay.md +348 -0
- paxman-1.0.0/docs/howto/add_adapter.md +269 -0
- paxman-1.0.0/docs/howto/add_capability.md +296 -0
- paxman-1.0.0/docs/howto/add_inference_provider.md +286 -0
- paxman-1.0.0/docs/howto/replay_artifact.md +245 -0
- paxman-1.0.0/docs/reports/2026-06-26-sprint-delivery-audit.md +493 -0
- paxman-1.0.0/docs/specs/capability-cost-model.md +307 -0
- paxman-1.0.0/docs/specs/dict-dsl-spec.md +461 -0
- paxman-1.0.0/docs/specs/input-profile-spec.md +338 -0
- paxman-1.0.0/docs/specs/license-decision.md +204 -0
- paxman-1.0.0/docs/sprints/CHANGES_LOG.md +534 -0
- paxman-1.0.0/docs/sprints/README.md +116 -0
- paxman-1.0.0/docs/sprints/bandit-report.md +73 -0
- paxman-1.0.0/docs/sprints/cross-platform-verification.md +180 -0
- paxman-1.0.0/docs/sprints/oidc-setup.md +115 -0
- paxman-1.0.0/docs/sprints/performance-baseline.md +293 -0
- paxman-1.0.0/docs/sprints/pip-audit-report.md +130 -0
- paxman-1.0.0/docs/sprints/retrospective-v1.0.0.md +76 -0
- paxman-1.0.0/docs/sprints/sprint-00-design-closure.md +96 -0
- paxman-1.0.0/docs/sprints/sprint-01-foundation.md +137 -0
- paxman-1.0.0/docs/sprints/sprint-02-contract-subsystem.md +117 -0
- paxman-1.0.0/docs/sprints/sprint-03-planner-and-capabilities.md +136 -0
- paxman-1.0.0/docs/sprints/sprint-04-executor-and-capabilities.md +128 -0
- paxman-1.0.0/docs/sprints/sprint-05-reconciler-and-money.md +139 -0
- paxman-1.0.0/docs/sprints/sprint-06-artifact-and-api.md +150 -0
- paxman-1.0.0/docs/sprints/sprint-07-integration-and-property-tests.md +139 -0
- paxman-1.0.0/docs/sprints/sprint-07a-budget-money-decimal.md +186 -0
- paxman-1.0.0/docs/sprints/sprint-08-docs-ci-hardening.md +159 -0
- paxman-1.0.0/docs/sprints/sprint-09-production-hardening.md +152 -0
- paxman-1.0.0/docs/sprints/sprint-10-release.md +183 -0
- paxman-1.0.0/docs/sprints/v0.5.0-release-notes.md +135 -0
- paxman-1.0.0/pyproject.toml +485 -0
- paxman-1.0.0/src/paxman/__init__.py +161 -0
- paxman-1.0.0/src/paxman/api/__init__.py +1 -0
- paxman-1.0.0/src/paxman/api/errors.py +35 -0
- paxman-1.0.0/src/paxman/api/normalize.py +383 -0
- paxman-1.0.0/src/paxman/api/protocols.py +17 -0
- paxman-1.0.0/src/paxman/api/registry.py +123 -0
- paxman-1.0.0/src/paxman/api/replay.py +115 -0
- paxman-1.0.0/src/paxman/api/types.py +26 -0
- paxman-1.0.0/src/paxman/api/version.py +10 -0
- paxman-1.0.0/src/paxman/artifact/__init__.py +13 -0
- paxman-1.0.0/src/paxman/artifact/_hash.py +170 -0
- paxman-1.0.0/src/paxman/artifact/artifact.py +311 -0
- paxman-1.0.0/src/paxman/artifact/confidence.py +106 -0
- paxman-1.0.0/src/paxman/artifact/diagnostics.py +74 -0
- paxman-1.0.0/src/paxman/artifact/evidence.py +76 -0
- paxman-1.0.0/src/paxman/artifact/replay.py +226 -0
- paxman-1.0.0/src/paxman/artifact/serializer.py +86 -0
- paxman-1.0.0/src/paxman/artifact/statistics.py +129 -0
- paxman-1.0.0/src/paxman/budget.py +151 -0
- paxman-1.0.0/src/paxman/capabilities/__init__.py +35 -0
- paxman-1.0.0/src/paxman/capabilities/base.py +170 -0
- paxman-1.0.0/src/paxman/capabilities/registry.py +278 -0
- paxman-1.0.0/src/paxman/capabilities/result.py +314 -0
- paxman-1.0.0/src/paxman/capabilities/spec.py +287 -0
- paxman-1.0.0/src/paxman/capabilities/v1/__init__.py +51 -0
- paxman-1.0.0/src/paxman/capabilities/v1/inference.py +488 -0
- paxman-1.0.0/src/paxman/capabilities/v1/lookup.py +282 -0
- paxman-1.0.0/src/paxman/capabilities/v1/regex_extraction.py +213 -0
- paxman-1.0.0/src/paxman/capabilities/v1/text_extraction.py +280 -0
- paxman-1.0.0/src/paxman/capabilities/v1/validation.py +331 -0
- paxman-1.0.0/src/paxman/clock.py +91 -0
- paxman-1.0.0/src/paxman/contract/__init__.py +58 -0
- paxman-1.0.0/src/paxman/contract/_types.py +361 -0
- paxman-1.0.0/src/paxman/contract/adapters/__init__.py +19 -0
- paxman-1.0.0/src/paxman/contract/adapters/base.py +96 -0
- paxman-1.0.0/src/paxman/contract/adapters/dict_dsl.py +841 -0
- paxman-1.0.0/src/paxman/contract/adapters/json_schema.py +781 -0
- paxman-1.0.0/src/paxman/contract/adapters/openapi.py +489 -0
- paxman-1.0.0/src/paxman/contract/adapters/pydantic.py +609 -0
- paxman-1.0.0/src/paxman/contract/canonical.py +492 -0
- paxman-1.0.0/src/paxman/contract/registry.py +194 -0
- paxman-1.0.0/src/paxman/contract/semantics.py +205 -0
- paxman-1.0.0/src/paxman/contract/validator.py +219 -0
- paxman-1.0.0/src/paxman/errors.py +518 -0
- paxman-1.0.0/src/paxman/executor/__init__.py +58 -0
- paxman-1.0.0/src/paxman/executor/budget_tracker.py +362 -0
- paxman-1.0.0/src/paxman/executor/context.py +143 -0
- paxman-1.0.0/src/paxman/executor/early_stop.py +124 -0
- paxman-1.0.0/src/paxman/executor/evidence.py +130 -0
- paxman-1.0.0/src/paxman/executor/execution_state.py +218 -0
- paxman-1.0.0/src/paxman/executor/executor.py +249 -0
- paxman-1.0.0/src/paxman/executor/field_runner.py +486 -0
- paxman-1.0.0/src/paxman/ids.py +277 -0
- paxman-1.0.0/src/paxman/logging.py +111 -0
- paxman-1.0.0/src/paxman/planner/__init__.py +41 -0
- paxman-1.0.0/src/paxman/planner/_registry.py +30 -0
- paxman-1.0.0/src/paxman/planner/field_plan.py +338 -0
- paxman-1.0.0/src/paxman/planner/heuristics.py +450 -0
- paxman-1.0.0/src/paxman/planner/input_profile.py +320 -0
- paxman-1.0.0/src/paxman/planner/planner.py +202 -0
- paxman-1.0.0/src/paxman/planner/policies.py +199 -0
- paxman-1.0.0/src/paxman/planner/scoring.py +94 -0
- paxman-1.0.0/src/paxman/protocols.py +181 -0
- paxman-1.0.0/src/paxman/py.typed +0 -0
- paxman-1.0.0/src/paxman/reconciler/__init__.py +15 -0
- paxman-1.0.0/src/paxman/reconciler/confidence.py +199 -0
- paxman-1.0.0/src/paxman/reconciler/conflict.py +208 -0
- paxman-1.0.0/src/paxman/reconciler/evidence_compare.py +216 -0
- paxman-1.0.0/src/paxman/reconciler/merge.py +283 -0
- paxman-1.0.0/src/paxman/reconciler/money.py +513 -0
- paxman-1.0.0/src/paxman/reconciler/reconciler.py +328 -0
- paxman-1.0.0/src/paxman/reconciler/truth.py +180 -0
- paxman-1.0.0/src/paxman/reconciler/unresolved.py +179 -0
- paxman-1.0.0/src/paxman/reconciler/validation.py +266 -0
- paxman-1.0.0/src/paxman/serialization.py +110 -0
- paxman-1.0.0/src/paxman/testing/__init__.py +670 -0
- paxman-1.0.0/src/paxman/types.py +90 -0
- paxman-1.0.0/src/paxman/versioning.py +231 -0
- paxman-1.0.0/tests/__init__.py +0 -0
- paxman-1.0.0/tests/benchmark/__init__.py +0 -0
- paxman-1.0.0/tests/benchmark/conftest.py +349 -0
- paxman-1.0.0/tests/benchmark/test_benchmark_normalize.py +103 -0
- paxman-1.0.0/tests/benchmark/test_benchmark_replay.py +140 -0
- paxman-1.0.0/tests/conftest.py +58 -0
- paxman-1.0.0/tests/fixtures/AGENTS.md +63 -0
- paxman-1.0.0/tests/fixtures/DATASET_LICENSES.md +248 -0
- paxman-1.0.0/tests/fixtures/DOWNLOAD_LOG.md +45 -0
- paxman-1.0.0/tests/fixtures/README.md +67 -0
- paxman-1.0.0/tests/fixtures/__init__.py +0 -0
- paxman-1.0.0/tests/fixtures/artifacts/GENERATION.md +107 -0
- paxman-1.0.0/tests/fixtures/artifacts/README.md +132 -0
- paxman-1.0.0/tests/fixtures/artifacts/__init__.py +0 -0
- paxman-1.0.0/tests/fixtures/artifacts/_catalog.py +137 -0
- paxman-1.0.0/tests/fixtures/artifacts/all_v1_types_unresolved.json +1 -0
- paxman-1.0.0/tests/fixtures/artifacts/empty_input_unresolved.json +1 -0
- paxman-1.0.0/tests/fixtures/artifacts/invoice_unresolved_dict_dsl.json +1 -0
- paxman-1.0.0/tests/fixtures/artifacts/invoice_unresolved_json_schema.json +1 -0
- paxman-1.0.0/tests/fixtures/artifacts/invoice_unresolved_pydantic.json +1 -0
- paxman-1.0.0/tests/fixtures/artifacts/money_unresolved.json +1 -0
- paxman-1.0.0/tests/fixtures/artifacts/prompt_injection_unresolved.json +1 -0
- paxman-1.0.0/tests/fixtures/artifacts/unicode_input_unresolved.json +1 -0
- paxman-1.0.0/tests/fixtures/contracts/AGENTS.md +58 -0
- paxman-1.0.0/tests/fixtures/contracts/README.md +76 -0
- paxman-1.0.0/tests/fixtures/contracts/__init__.py +0 -0
- paxman-1.0.0/tests/fixtures/contracts/dict_dsl/__init__.py +0 -0
- paxman-1.0.0/tests/fixtures/contracts/dict_dsl/all_v1_types.py +83 -0
- paxman-1.0.0/tests/fixtures/contracts/dict_dsl/invoice.py +84 -0
- paxman-1.0.0/tests/fixtures/contracts/dict_dsl/quotation.py +79 -0
- paxman-1.0.0/tests/fixtures/contracts/dict_dsl/receipt.py +77 -0
- paxman-1.0.0/tests/fixtures/contracts/dict_dsl/with_money.py +32 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/__init__.py +0 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/all_v1_types.json +61 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/.VENDORED +0 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/.editorconfig +1 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/.github/CODEOWNERS +2 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/.github/workflows/annotation-tests.yml +21 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/.github/workflows/ci.yml +25 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/.github/workflows/pr-dependencies.yml +12 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/.github/workflows/show_specification_annotations.yml +21 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/.gitignore +160 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/CONTRIBUTING.md +87 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/LICENSE +19 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/README.md +369 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/annotations/README.md +116 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/annotations/assertion.schema.json +24 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/annotations/test-case.schema.json +38 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/annotations/test-suite.schema.json +15 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/annotations/test.schema.json +16 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/annotations/tests/applicators.json +409 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/annotations/tests/content.json +119 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/annotations/tests/core.json +132 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/annotations/tests/format.json +26 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/annotations/tests/meta-data.json +150 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/annotations/tests/unevaluated.json +661 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/annotations/tests/unknown.json +27 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/bin/annotate-specification-links +140 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/bin/annotation-tests.ts +31 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/bin/jsonschema_suite +731 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/bin/specification_urls.json +34 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/output-test-schema.json +70 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/output-tests/README.md +63 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/output-tests/draft2019-09/content/escape.json +38 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/output-tests/draft2019-09/content/general.json +34 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/output-tests/draft2019-09/content/readOnly.json +38 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/output-tests/draft2019-09/content/type.json +37 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/output-tests/draft2019-09/output-schema.json +96 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/output-tests/draft2020-12/content/escape.json +38 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/output-tests/draft2020-12/content/general.json +34 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/output-tests/draft2020-12/content/readOnly.json +37 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/output-tests/draft2020-12/content/type.json +37 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/output-tests/draft2020-12/output-schema.json +96 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/output-tests/v1/content/general.json +43 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/output-tests/v1/content/readOnly.json +41 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/output-tests/v1/content/type.json +39 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/output-tests/v1/output-schema.json +95 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/package.json +12 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/baseUriChange/folderInteger.json +3 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/baseUriChangeFolder/folderInteger.json +3 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/baseUriChangeFolderInSubschema/folderInteger.json +3 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft2019-09/baseUriChange/folderInteger.json +4 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft2019-09/baseUriChangeFolder/folderInteger.json +4 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft2019-09/baseUriChangeFolderInSubschema/folderInteger.json +4 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft2019-09/dependentRequired.json +7 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft2019-09/detached-ref.json +13 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft2019-09/different-id-ref-string.json +5 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft2019-09/extendible-dynamic-ref.json +21 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft2019-09/ignore-prefixItems.json +7 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft2019-09/integer.json +4 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft2019-09/locationIndependentIdentifier.json +12 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft2019-09/metaschema-no-validation.json +13 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft2019-09/metaschema-optional-vocabulary.json +14 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft2019-09/name-defs.json +16 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft2019-09/nested/foo-ref-string.json +7 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft2019-09/nested/string.json +4 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft2019-09/nested-absolute-ref-to-string.json +9 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft2019-09/ref-and-defs.json +12 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft2019-09/subSchemas.json +11 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft2019-09/urn-ref-string.json +5 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft2020-12/baseUriChange/folderInteger.json +4 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft2020-12/baseUriChangeFolder/folderInteger.json +4 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft2020-12/baseUriChangeFolderInSubschema/folderInteger.json +4 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft2020-12/detached-dynamicref.json +13 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft2020-12/detached-ref.json +13 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft2020-12/different-id-ref-string.json +5 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft2020-12/extendible-dynamic-ref.json +21 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft2020-12/format-assertion-false.json +13 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft2020-12/format-assertion-true.json +13 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft2020-12/integer.json +4 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft2020-12/locationIndependentIdentifier.json +12 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft2020-12/metaschema-no-validation.json +13 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft2020-12/metaschema-optional-vocabulary.json +14 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft2020-12/name-defs.json +16 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft2020-12/nested/foo-ref-string.json +7 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft2020-12/nested/string.json +4 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft2020-12/nested-absolute-ref-to-string.json +9 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft2020-12/prefixItems.json +7 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft2020-12/ref-and-defs.json +12 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft2020-12/subSchemas.json +11 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft2020-12/tree.json +17 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft2020-12/urn-ref-string.json +5 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft3/subSchemas.json +10 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft4/locationIndependentIdentifier.json +11 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft4/name.json +15 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft4/subSchemas.json +10 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft6/detached-ref.json +13 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft6/locationIndependentIdentifier.json +11 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft6/name.json +15 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft6/ref-and-definitions.json +11 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft6/subSchemas.json +10 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft7/detached-ref.json +13 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft7/ignore-dependentRequired.json +7 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft7/locationIndependentIdentifier.json +11 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft7/name.json +15 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft7/ref-and-definitions.json +11 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/draft7/subSchemas.json +10 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/integer.json +3 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/nested/foo-ref-string.json +6 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/nested/string.json +3 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/v1/baseUriChange/folderInteger.json +4 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/v1/baseUriChangeFolder/folderInteger.json +4 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/v1/baseUriChangeFolderInSubschema/folderInteger.json +4 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/v1/detached-dynamicref.json +13 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/v1/detached-ref.json +13 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/v1/different-id-ref-string.json +5 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/v1/extendible-dynamic-ref.json +21 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/v1/integer.json +4 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/v1/locationIndependentIdentifier.json +12 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/v1/name-defs.json +16 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/v1/nested/foo-ref-string.json +7 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/v1/nested/string.json +4 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/v1/nested-absolute-ref-to-string.json +9 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/v1/ref-and-defs.json +12 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/v1/subSchemas.json +11 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/v1/tree.json +17 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/remotes/v1/urn-ref-string.json +5 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/test-schema.json +124 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/additionalItems.json +204 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/additionalProperties.json +213 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/allOf.json +312 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/anchor.json +120 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/anyOf.json +203 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/boolean_schema.json +104 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/const.json +431 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/contains.json +176 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/content.json +131 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/default.json +82 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/defs.json +21 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/dependentRequired.json +152 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/dependentSchemas.json +171 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/enum.json +397 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/exclusiveMaximum.json +31 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/exclusiveMinimum.json +31 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/format.json +743 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/if-then-else.json +307 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/infinite-loop-detection.json +37 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/items.json +295 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/maxContains.json +123 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/maxItems.json +50 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/maxLength.json +55 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/maxProperties.json +79 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/maximum.json +60 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/minContains.json +224 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/minItems.json +50 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/minLength.json +55 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/minProperties.json +70 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/minimum.json +75 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/multipleOf.json +102 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/not.json +301 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/oneOf.json +293 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/optional/anchor.json +60 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/optional/bignum.json +110 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/optional/cross-draft.json +41 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/optional/dependencies-compatibility.json +282 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/optional/ecmascript-regex.json +582 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/optional/float-overflow.json +16 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/optional/format/date-time.json +156 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/optional/format/date.json +363 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/optional/format/duration.json +223 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/optional/format/email.json +111 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/optional/format/hostname.json +361 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/optional/format/idn-email.json +56 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/optional/format/idn-hostname.json +455 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/optional/format/ipv4.json +202 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/optional/format/ipv6.json +211 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/optional/format/iri-reference.json +76 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/optional/format/iri.json +86 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/optional/format/json-pointer.json +211 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/optional/format/regex.json +51 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/optional/format/relative-json-pointer.json +101 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/optional/format/time.json +247 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/optional/format/unknown.json +46 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/optional/format/uri-reference.json +98 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/optional/format/uri-template.json +61 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/optional/format/uri.json +233 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/optional/format/uuid.json +131 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/optional/id.json +53 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/optional/no-schema.json +26 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/optional/non-bmp-regex.json +86 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/optional/refOfUnknownKeyword.json +112 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/optional/unknownKeyword.json +57 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/pattern.json +65 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/patternProperties.json +176 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/properties.json +242 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/propertyNames.json +178 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/recursiveRef.json +408 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/ref.json +1123 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/refRemote.json +342 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/required.json +168 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/type.json +501 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/unevaluatedItems.json +728 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/unevaluatedProperties.json +1715 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/uniqueItems.json +419 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2019-09/vocabulary.json +57 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/additionalProperties.json +219 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/allOf.json +312 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/anchor.json +120 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/anyOf.json +203 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/boolean_schema.json +104 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/const.json +431 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/contains.json +176 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/content.json +131 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/default.json +82 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/defs.json +21 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/dependentRequired.json +152 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/dependentSchemas.json +171 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/dynamicRef.json +873 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/enum.json +397 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/exclusiveMaximum.json +31 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/exclusiveMinimum.json +31 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/format.json +838 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/if-then-else.json +306 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/infinite-loop-detection.json +37 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/items.json +304 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/maxContains.json +123 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/maxItems.json +50 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/maxLength.json +55 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/maxProperties.json +94 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/maximum.json +60 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/minContains.json +224 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/minItems.json +50 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/minLength.json +55 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/minProperties.json +70 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/minimum.json +75 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/multipleOf.json +102 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/not.json +301 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/oneOf.json +293 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/optional/anchor.json +60 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/optional/bignum.json +110 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/optional/cross-draft.json +18 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/optional/dependencies-compatibility.json +282 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/optional/dynamicRef.json +56 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/optional/ecmascript-regex.json +582 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/optional/float-overflow.json +17 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/optional/format/date-time.json +156 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/optional/format/date.json +363 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/optional/format/duration.json +223 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/optional/format/ecmascript-regex.json +16 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/optional/format/email.json +146 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/optional/format/hostname.json +361 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/optional/format/idn-email.json +56 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/optional/format/idn-hostname.json +455 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/optional/format/ipv4.json +202 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/optional/format/ipv6.json +211 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/optional/format/iri-reference.json +76 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/optional/format/iri.json +86 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/optional/format/json-pointer.json +211 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/optional/format/regex.json +51 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/optional/format/relative-json-pointer.json +101 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/optional/format/time.json +247 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/optional/format/unknown.json +46 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/optional/format/uri-reference.json +98 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/optional/format/uri-template.json +61 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/optional/format/uri.json +233 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/optional/format/uuid.json +131 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/optional/format-assertion.json +44 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/optional/id.json +53 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/optional/no-schema.json +26 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/optional/non-bmp-regex.json +86 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/optional/refOfUnknownKeyword.json +112 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/optional/unknownKeyword.json +57 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/pattern.json +90 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/patternProperties.json +204 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/prefixItems.json +104 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/properties.json +242 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/propertyNames.json +178 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/ref.json +1085 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/refRemote.json +342 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/required.json +169 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/type.json +501 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/unevaluatedItems.json +854 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/unevaluatedProperties.json +1681 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/uniqueItems.json +419 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft2020-12/vocabulary.json +57 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft3/additionalItems.json +131 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft3/additionalProperties.json +147 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft3/default.json +79 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft3/dependencies.json +123 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft3/disallow.json +80 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft3/divisibleBy.json +65 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft3/enum.json +118 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft3/extends.json +94 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft3/format.json +362 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft3/infinite-loop-detection.json +32 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft3/items.json +78 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft3/maxItems.json +28 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft3/maxLength.json +33 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft3/maximum.json +99 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft3/minItems.json +28 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft3/minLength.json +33 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft3/minimum.json +88 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft3/optional/bignum.json +95 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft3/optional/format/color.json +38 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft3/optional/format/date-time.json +43 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft3/optional/format/date.json +173 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft3/optional/format/ecmascript-regex.json +23 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft3/optional/format/email.json +63 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft3/optional/format/host-name.json +68 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft3/optional/format/ip-address.json +23 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft3/optional/format/ipv6.json +68 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft3/optional/format/regex.json +18 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft3/optional/format/time.json +23 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft3/optional/format/uri.json +28 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft3/optional/non-bmp-regex.json +82 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft3/optional/zeroTerminatedFloats.json +15 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft3/pattern.json +59 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft3/patternProperties.json +130 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft3/properties.json +112 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft3/ref.json +280 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft3/refRemote.json +74 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft3/required.json +53 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft3/type.json +493 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft3/uniqueItems.json +374 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft4/additionalItems.json +167 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft4/additionalProperties.json +147 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft4/allOf.json +261 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft4/anyOf.json +156 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft4/default.json +79 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft4/definitions.json +26 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft4/dependencies.json +232 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft4/enum.json +362 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft4/format.json +218 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft4/infinite-loop-detection.json +36 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft4/items.json +227 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft4/maxItems.json +28 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft4/maxLength.json +33 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft4/maxProperties.json +54 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft4/maximum.json +99 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft4/minItems.json +28 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft4/minLength.json +33 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft4/minProperties.json +48 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft4/minimum.json +114 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft4/multipleOf.json +87 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft4/not.json +157 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft4/oneOf.json +230 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft4/optional/bignum.json +95 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft4/optional/ecmascript-regex.json +552 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft4/optional/float-overflow.json +13 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft4/optional/format/date-time.json +153 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft4/optional/format/email.json +108 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft4/optional/format/hostname.json +148 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft4/optional/format/ipv4.json +199 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft4/optional/format/ipv6.json +208 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft4/optional/format/unknown.json +43 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft4/optional/format/uri.json +230 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft4/optional/id.json +53 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft4/optional/non-bmp-regex.json +82 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft4/optional/zeroTerminatedFloats.json +15 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft4/pattern.json +59 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft4/patternProperties.json +135 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft4/properties.json +205 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft4/ref.json +592 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft4/refRemote.json +189 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft4/required.json +145 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft4/type.json +469 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft4/uniqueItems.json +409 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/additionalItems.json +190 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/additionalProperties.json +147 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/allOf.json +294 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/anyOf.json +189 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/boolean_schema.json +104 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/const.json +384 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/contains.json +144 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/default.json +79 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/definitions.json +26 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/dependencies.json +286 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/enum.json +320 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/exclusiveMaximum.json +30 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/exclusiveMinimum.json +30 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/format.json +326 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/infinite-loop-detection.json +36 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/items.json +282 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/maxItems.json +44 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/maxLength.json +49 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/maxProperties.json +70 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/maximum.json +54 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/minItems.json +44 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/minLength.json +49 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/minProperties.json +64 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/minimum.json +69 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/multipleOf.json +87 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/not.json +259 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/oneOf.json +274 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/optional/bignum.json +93 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/optional/ecmascript-regex.json +552 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/optional/float-overflow.json +13 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/optional/format/date-time.json +153 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/optional/format/email.json +108 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/optional/format/hostname.json +148 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/optional/format/ipv4.json +199 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/optional/format/ipv6.json +208 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/optional/format/json-pointer.json +208 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/optional/format/unknown.json +43 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/optional/format/uri-reference.json +95 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/optional/format/uri-template.json +58 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/optional/format/uri.json +230 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/optional/id.json +134 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/optional/non-bmp-regex.json +82 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/optional/unknownKeyword.json +56 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/pattern.json +59 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/patternProperties.json +171 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/properties.json +236 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/propertyNames.json +164 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/ref.json +929 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/refRemote.json +257 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/required.json +161 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/type.json +474 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft6/uniqueItems.json +409 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/additionalItems.json +190 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/additionalProperties.json +147 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/allOf.json +294 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/anyOf.json +189 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/boolean_schema.json +104 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/const.json +384 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/contains.json +165 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/default.json +79 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/definitions.json +26 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/dependencies.json +286 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/enum.json +320 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/exclusiveMaximum.json +30 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/exclusiveMinimum.json +30 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/format.json +614 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/if-then-else.json +296 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/infinite-loop-detection.json +36 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/items.json +282 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/maxItems.json +44 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/maxLength.json +49 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/maxProperties.json +70 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/maximum.json +54 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/minItems.json +44 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/minLength.json +49 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/minProperties.json +64 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/minimum.json +69 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/multipleOf.json +87 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/not.json +259 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/oneOf.json +274 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/optional/bignum.json +93 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/optional/content.json +77 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/optional/cross-draft.json +25 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/optional/ecmascript-regex.json +552 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/optional/float-overflow.json +13 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/optional/format/date-time.json +153 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/optional/format/date.json +360 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/optional/format/email.json +108 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/optional/format/hostname.json +355 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/optional/format/idn-email.json +53 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/optional/format/idn-hostname.json +444 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/optional/format/ipv4.json +199 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/optional/format/ipv6.json +208 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/optional/format/iri-reference.json +73 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/optional/format/iri.json +83 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/optional/format/json-pointer.json +208 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/optional/format/regex.json +48 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/optional/format/relative-json-pointer.json +98 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/optional/format/time.json +244 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/optional/format/unknown.json +43 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/optional/format/uri-reference.json +95 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/optional/format/uri-template.json +58 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/optional/format/uri.json +230 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/optional/id.json +114 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/optional/non-bmp-regex.json +82 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/optional/unknownKeyword.json +56 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/pattern.json +59 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/patternProperties.json +171 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/properties.json +236 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/propertyNames.json +164 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/ref.json +1043 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/refRemote.json +257 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/required.json +161 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/type.json +474 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/draft7/uniqueItems.json +409 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/additionalProperties.json +219 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/allOf.json +312 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/anchor.json +120 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/anyOf.json +203 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/boolean_schema.json +104 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/const.json +431 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/contains.json +176 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/content.json +131 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/default.json +82 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/defs.json +21 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/dependentRequired.json +152 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/dependentSchemas.json +171 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/dynamicRef.json +873 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/enum.json +397 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/exclusiveMaximum.json +31 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/exclusiveMinimum.json +31 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/format.json +838 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/if-then-else.json +306 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/infinite-loop-detection.json +37 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/items.json +304 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/maxContains.json +123 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/maxItems.json +50 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/maxLength.json +55 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/maxProperties.json +94 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/maximum.json +60 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/minContains.json +224 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/minItems.json +50 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/minLength.json +55 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/minProperties.json +70 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/minimum.json +75 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/multipleOf.json +102 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/not.json +301 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/oneOf.json +293 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/optional/anchor.json +60 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/optional/bignum.json +110 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/optional/cross-draft.json +18 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/optional/dependencies-compatibility.json +282 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/optional/dynamicRef.json +56 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/optional/ecmascript-regex.json +582 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/optional/float-overflow.json +17 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/optional/format/date-time.json +156 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/optional/format/date.json +363 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/optional/format/duration.json +223 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/optional/format/ecmascript-regex.json +16 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/optional/format/email.json +146 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/optional/format/hostname.json +361 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/optional/format/idn-email.json +56 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/optional/format/idn-hostname.json +455 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/optional/format/ipv4.json +202 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/optional/format/ipv6.json +211 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/optional/format/iri-reference.json +76 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/optional/format/iri.json +86 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/optional/format/json-pointer.json +211 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/optional/format/regex.json +51 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/optional/format/relative-json-pointer.json +101 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/optional/format/time.json +247 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/optional/format/unknown.json +46 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/optional/format/uri-reference.json +98 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/optional/format/uri-template.json +61 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/optional/format/uri.json +233 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/optional/format/uuid.json +131 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/optional/format-assertion.json +44 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/optional/id.json +53 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/optional/no-schema.json +26 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/optional/non-bmp-regex.json +86 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/optional/refOfUnknownKeyword.json +112 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/optional/unknownKeyword.json +57 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/pattern.json +90 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/patternProperties.json +204 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/prefixItems.json +104 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/properties.json +242 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/propertyNames.json +178 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/ref.json +1085 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/refRemote.json +342 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/required.json +169 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/type.json +501 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/unevaluatedItems.json +854 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/unevaluatedProperties.json +1681 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/uniqueItems.json +419 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/latest/vocabulary.json +57 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/additionalProperties.json +213 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/allOf.json +312 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/anchor.json +120 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/anyOf.json +203 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/boolean_schema.json +104 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/const.json +431 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/contains.json +197 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/content.json +131 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/default.json +82 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/dependentRequired.json +152 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/dependentSchemas.json +171 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/dynamicRef.json +497 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/enum.json +397 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/exclusiveMaximum.json +31 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/exclusiveMinimum.json +31 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/format/date-time.json +156 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/format/date.json +363 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/format/duration.json +223 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/format/ecmascript-regex.json +16 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/format/email.json +146 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/format/hostname.json +361 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/format/idn-email.json +61 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/format/idn-hostname.json +455 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/format/ipv4.json +202 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/format/ipv6.json +211 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/format/iri-reference.json +76 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/format/iri.json +86 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/format/json-pointer.json +211 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/format/regex.json +51 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/format/relative-json-pointer.json +101 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/format/time.json +247 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/format/uri-reference.json +98 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/format/uri-template.json +61 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/format/uri.json +233 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/format/uuid.json +131 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/if-then-else.json +268 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/infinite-loop-detection.json +37 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/items.json +304 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/maxContains.json +123 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/maxItems.json +50 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/maxLength.json +55 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/maxProperties.json +79 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/maximum.json +60 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/minContains.json +224 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/minItems.json +50 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/minLength.json +55 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/minProperties.json +70 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/minimum.json +75 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/multipleOf.json +103 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/not.json +301 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/oneOf.json +293 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/optional/anchor.json +60 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/optional/bignum.json +110 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/optional/dependencies-compatibility.json +282 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/optional/dynamicRef.json +56 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/optional/ecmascript-regex.json +582 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/optional/float-overflow.json +17 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/optional/format-annotation.json +838 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/optional/id.json +53 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/optional/non-bmp-regex.json +86 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/optional/refOfUnknownKeyword.json +112 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/optional/unknownKeyword.json +57 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/pattern.json +90 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/patternProperties.json +203 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/prefixItems.json +104 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/properties.json +242 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/propertyNames.json +95 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/proposals/README.md +10 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/proposals/propertyDependencies/additionalProperties.json +37 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/proposals/propertyDependencies/dynamicRef.json +159 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/proposals/propertyDependencies/propertyDependencies.json +161 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/proposals/propertyDependencies/unevaluatedProperties.json +84 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/ref.json +1085 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/refRemote.json +342 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/required.json +168 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/type.json +501 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/unevaluatedItems.json +848 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/unevaluatedProperties.json +1705 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tests/v1/uniqueItems.json +419 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/drafts/tox.ini +9 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/invoice.json +59 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/invoice.py +29 -0
- paxman-1.0.0/tests/fixtures/contracts/json_schema/with_money.json +28 -0
- paxman-1.0.0/tests/fixtures/contracts/openapi/.VENDORED +0 -0
- paxman-1.0.0/tests/fixtures/contracts/openapi/openapi.yaml +839 -0
- paxman-1.0.0/tests/fixtures/contracts/openapi/petstore.yaml +119 -0
- paxman-1.0.0/tests/fixtures/contracts/pydantic/__init__.py +0 -0
- paxman-1.0.0/tests/fixtures/contracts/pydantic/all_v1_types.py +38 -0
- paxman-1.0.0/tests/fixtures/contracts/pydantic/invoice.py +50 -0
- paxman-1.0.0/tests/fixtures/contracts/pydantic/receipt.py +53 -0
- paxman-1.0.0/tests/fixtures/contracts/pydantic/with_money.py +59 -0
- paxman-1.0.0/tests/fixtures/factories/README.md +72 -0
- paxman-1.0.0/tests/fixtures/factories/__init__.py +42 -0
- paxman-1.0.0/tests/fixtures/factories/artifacts.py +97 -0
- paxman-1.0.0/tests/fixtures/factories/candidates.py +58 -0
- paxman-1.0.0/tests/fixtures/factories/contracts.py +151 -0
- paxman-1.0.0/tests/fixtures/factories/inputs.py +122 -0
- paxman-1.0.0/tests/fixtures/factories/policies.py +54 -0
- paxman-1.0.0/tests/fixtures/inputs/AGENTS.md +74 -0
- paxman-1.0.0/tests/fixtures/inputs/README.md +74 -0
- paxman-1.0.0/tests/fixtures/inputs/adversarial/empty_input.txt +0 -0
- paxman-1.0.0/tests/fixtures/inputs/adversarial/extremely_large.txt +70000 -0
- paxman-1.0.0/tests/fixtures/inputs/adversarial/mismatched_currency.txt +4 -0
- paxman-1.0.0/tests/fixtures/inputs/adversarial/prompt_injection.txt +7 -0
- paxman-1.0.0/tests/fixtures/inputs/adversarial/truncated_pdf.bin +0 -0
- paxman-1.0.0/tests/fixtures/inputs/adversarial/unicode_only.txt +3 -0
- paxman-1.0.0/tests/fixtures/inputs/invoices/synthetic/invoice_csv.csv +6 -0
- paxman-1.0.0/tests/fixtures/inputs/invoices/synthetic/invoice_email.txt +19 -0
- paxman-1.0.0/tests/fixtures/inputs/invoices/synthetic/invoice_plain.txt +28 -0
- paxman-1.0.0/tests/fixtures/inputs/procurement/ted_sample/.VENDORED +0 -0
- paxman-1.0.0/tests/fixtures/inputs/procurement/ted_sample/.gitattributes +59 -0
- paxman-1.0.0/tests/fixtures/inputs/procurement/ted_sample/LICENSE.txt +14 -0
- paxman-1.0.0/tests/fixtures/inputs/procurement/ted_sample/README.md +71 -0
- paxman-1.0.0/tests/fixtures/inputs/procurement/ted_sample/ted_2025_07_sample.csv +347 -0
- paxman-1.0.0/tests/fixtures/inputs/quotations/oqo/.VENDORED +0 -0
- paxman-1.0.0/tests/fixtures/inputs/quotations/oqo/LICENSE +21 -0
- paxman-1.0.0/tests/fixtures/inputs/quotations/oqo/README.MD +160 -0
- paxman-1.0.0/tests/fixtures/inputs/quotations/oqo/datasets/sample_quotes.csv +73 -0
- paxman-1.0.0/tests/fixtures/inputs/quotations/oqo/notebooks/sample_quotes_demo.ipynb +91 -0
- paxman-1.0.0/tests/fixtures/inputs/quotations/oqo/open-schema/oqo.json +417 -0
- paxman-1.0.0/tests/fixtures/inputs/quotations/oqo/sample_quote.json +514 -0
- paxman-1.0.0/tests/fixtures/inputs/quotations/oqo/tools/validate_quote.js +48 -0
- paxman-1.0.0/tests/fixtures/inputs/quotations/oqo/tools/validate_quote.py +50 -0
- paxman-1.0.0/tests/fixtures/inputs/quotations/synthetic/quotation_multi_currency.txt +22 -0
- paxman-1.0.0/tests/fixtures/inputs/quotations/synthetic/quotation_simple.txt +23 -0
- paxman-1.0.0/tests/fixtures/inputs/quotations/synthetic/quotation_with_footnotes.txt +33 -0
- paxman-1.0.0/tests/fixtures/inputs/receipts/synthetic/receipt_email.txt +23 -0
- paxman-1.0.0/tests/fixtures/inputs/receipts/synthetic/receipt_plain.txt +15 -0
- paxman-1.0.0/tests/fixtures/inputs/receipts/synthetic/receipt_thermal.txt +15 -0
- paxman-1.0.0/tests/fixtures/public_api_snapshot.json +89 -0
- paxman-1.0.0/tests/integration/__init__.py +0 -0
- paxman-1.0.0/tests/integration/cross_subsystem/test_budget_decimal_roundtrip.py +79 -0
- paxman-1.0.0/tests/integration/cross_subsystem/test_cross_subsystem_integration.py +130 -0
- paxman-1.0.0/tests/integration/end_to_end/test_adversarial_inputs.py +108 -0
- paxman-1.0.0/tests/integration/end_to_end/test_invoice_pipeline.py +114 -0
- paxman-1.0.0/tests/integration/end_to_end/test_quotation_pipeline.py +78 -0
- paxman-1.0.0/tests/integration/executor/test_executor_3field.py +119 -0
- paxman-1.0.0/tests/integration/executor/test_executor_budget.py +126 -0
- paxman-1.0.0/tests/integration/test_golden_artifacts.py +228 -0
- paxman-1.0.0/tests/integration/test_replay_golden_reproducibility.py +103 -0
- paxman-1.0.0/tests/integration/test_replay_integrity.py +179 -0
- paxman-1.0.0/tests/integration/test_saas_procurement_replay.py +161 -0
- paxman-1.0.0/tests/integration/test_smoke_e2e.py +84 -0
- paxman-1.0.0/tests/property/test_executor_determinism.py +141 -0
- paxman-1.0.0/tests/property/test_planner_determinism.py +234 -0
- paxman-1.0.0/tests/property/test_reconciler_property_money.py +375 -0
- paxman-1.0.0/tests/property/test_reconciler_property_monotonicity.py +362 -0
- paxman-1.0.0/tests/property/test_replay_byte_equal_and_hash_detection.py +144 -0
- paxman-1.0.0/tests/public_api/__init__.py +0 -0
- paxman-1.0.0/tests/public_api/test_public_api.py +102 -0
- paxman-1.0.0/tests/test_smoke.py +185 -0
- paxman-1.0.0/tests/unit/api/__init__.py +0 -0
- paxman-1.0.0/tests/unit/api/test_api_errors.py +204 -0
- paxman-1.0.0/tests/unit/api/test_api_normalize.py +541 -0
- paxman-1.0.0/tests/unit/api/test_api_protocols.py +117 -0
- paxman-1.0.0/tests/unit/api/test_api_registry.py +181 -0
- paxman-1.0.0/tests/unit/api/test_api_replay.py +175 -0
- paxman-1.0.0/tests/unit/api/test_api_types.py +202 -0
- paxman-1.0.0/tests/unit/api/test_api_version.py +50 -0
- paxman-1.0.0/tests/unit/artifact/__init__.py +0 -0
- paxman-1.0.0/tests/unit/artifact/test__hash.py +131 -0
- paxman-1.0.0/tests/unit/artifact/test_artifact.py +380 -0
- paxman-1.0.0/tests/unit/artifact/test_confidence.py +147 -0
- paxman-1.0.0/tests/unit/artifact/test_diagnostics.py +183 -0
- paxman-1.0.0/tests/unit/artifact/test_evidence.py +168 -0
- paxman-1.0.0/tests/unit/artifact/test_replay.py +294 -0
- paxman-1.0.0/tests/unit/artifact/test_serializer.py +143 -0
- paxman-1.0.0/tests/unit/artifact/test_statistics.py +237 -0
- paxman-1.0.0/tests/unit/executor/test_budget_tracker.py +195 -0
- paxman-1.0.0/tests/unit/executor/test_context.py +193 -0
- paxman-1.0.0/tests/unit/executor/test_early_stop.py +75 -0
- paxman-1.0.0/tests/unit/executor/test_evidence.py +144 -0
- paxman-1.0.0/tests/unit/executor/test_execution_state.py +160 -0
- paxman-1.0.0/tests/unit/executor/test_executor.py +282 -0
- paxman-1.0.0/tests/unit/executor/test_field_runner.py +592 -0
- paxman-1.0.0/tests/unit/reconciler/test_confidence.py +577 -0
- paxman-1.0.0/tests/unit/reconciler/test_conflict.py +556 -0
- paxman-1.0.0/tests/unit/reconciler/test_evidence_compare.py +564 -0
- paxman-1.0.0/tests/unit/reconciler/test_merge.py +406 -0
- paxman-1.0.0/tests/unit/reconciler/test_money.py +569 -0
- paxman-1.0.0/tests/unit/reconciler/test_reconciler.py +800 -0
- paxman-1.0.0/tests/unit/reconciler/test_reconciler_adversarial.py +291 -0
- paxman-1.0.0/tests/unit/reconciler/test_reconciler_static_checks.py +212 -0
- paxman-1.0.0/tests/unit/reconciler/test_truth.py +551 -0
- paxman-1.0.0/tests/unit/reconciler/test_unresolved.py +227 -0
- paxman-1.0.0/tests/unit/reconciler/test_validation.py +499 -0
- paxman-1.0.0/tests/unit/test_artifact_coverage.py +177 -0
- paxman-1.0.0/tests/unit/test_budget.py +155 -0
- paxman-1.0.0/tests/unit/test_capability_inference.py +343 -0
- paxman-1.0.0/tests/unit/test_capability_lookup.py +200 -0
- paxman-1.0.0/tests/unit/test_capability_regex_extraction.py +155 -0
- paxman-1.0.0/tests/unit/test_capability_result.py +258 -0
- paxman-1.0.0/tests/unit/test_capability_spec_registry.py +298 -0
- paxman-1.0.0/tests/unit/test_capability_text_extraction.py +154 -0
- paxman-1.0.0/tests/unit/test_capability_validation.py +429 -0
- paxman-1.0.0/tests/unit/test_clock.py +131 -0
- paxman-1.0.0/tests/unit/test_contract_canonical.py +821 -0
- paxman-1.0.0/tests/unit/test_contract_dict_dsl.py +1437 -0
- paxman-1.0.0/tests/unit/test_contract_json_schema.py +1373 -0
- paxman-1.0.0/tests/unit/test_contract_openapi.py +226 -0
- paxman-1.0.0/tests/unit/test_contract_property.py +224 -0
- paxman-1.0.0/tests/unit/test_contract_pydantic.py +675 -0
- paxman-1.0.0/tests/unit/test_contract_registry.py +321 -0
- paxman-1.0.0/tests/unit/test_contract_semantics.py +361 -0
- paxman-1.0.0/tests/unit/test_contract_types.py +562 -0
- paxman-1.0.0/tests/unit/test_contract_validator.py +518 -0
- paxman-1.0.0/tests/unit/test_errors.py +294 -0
- paxman-1.0.0/tests/unit/test_errors_versioning_coverage.py +66 -0
- paxman-1.0.0/tests/unit/test_generated_factories.py +219 -0
- paxman-1.0.0/tests/unit/test_ids.py +191 -0
- paxman-1.0.0/tests/unit/test_logging.py +115 -0
- paxman-1.0.0/tests/unit/test_new_contracts.py +57 -0
- paxman-1.0.0/tests/unit/test_planner_field_plan.py +191 -0
- paxman-1.0.0/tests/unit/test_planner_heuristics_planner.py +473 -0
- paxman-1.0.0/tests/unit/test_planner_input_profile.py +329 -0
- paxman-1.0.0/tests/unit/test_planner_scoring_policies.py +216 -0
- paxman-1.0.0/tests/unit/test_protocols.py +151 -0
- paxman-1.0.0/tests/unit/test_serialization.py +240 -0
- paxman-1.0.0/tests/unit/test_testing_module.py +276 -0
- paxman-1.0.0/tests/unit/test_types.py +124 -0
- paxman-1.0.0/tests/unit/test_versioning.py +238 -0
paxman-1.0.0/.gitignore
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# --- Paxman Python .gitignore ---
|
|
2
|
+
# Per sprint-01-foundation.md D1.4.
|
|
3
|
+
# Patterns follow the Python gitignore template (https://github.com/github/gitignore)
|
|
4
|
+
# plus Paxman-specific exclusions (tests/fixtures/generated/, .sisyphus/, .codegraph/).
|
|
5
|
+
|
|
6
|
+
# Local dev artifacts
|
|
7
|
+
.sisyphus/
|
|
8
|
+
.codegraph/
|
|
9
|
+
.understand-anything/
|
|
10
|
+
|
|
11
|
+
# Byte-compiled / optimized / DLL files
|
|
12
|
+
__pycache__/
|
|
13
|
+
*.py[cod]
|
|
14
|
+
*$py.class
|
|
15
|
+
|
|
16
|
+
# C extensions
|
|
17
|
+
*.so
|
|
18
|
+
|
|
19
|
+
# Distribution / packaging
|
|
20
|
+
build/
|
|
21
|
+
dist/
|
|
22
|
+
downloads/
|
|
23
|
+
*.egg-info/
|
|
24
|
+
*.egg
|
|
25
|
+
MANIFEST
|
|
26
|
+
|
|
27
|
+
# Virtual environments
|
|
28
|
+
.venv/
|
|
29
|
+
venv/
|
|
30
|
+
env/
|
|
31
|
+
ENV/
|
|
32
|
+
|
|
33
|
+
# Jupyter Notebook
|
|
34
|
+
.ipynb_checkpoints
|
|
35
|
+
|
|
36
|
+
# Pytest
|
|
37
|
+
.pytest_cache/
|
|
38
|
+
.coverage
|
|
39
|
+
.coverage.*
|
|
40
|
+
htmlcov/
|
|
41
|
+
coverage.xml
|
|
42
|
+
*.cover
|
|
43
|
+
|
|
44
|
+
# mypy
|
|
45
|
+
.mypy_cache/
|
|
46
|
+
|
|
47
|
+
# pyright
|
|
48
|
+
.pyright/
|
|
49
|
+
|
|
50
|
+
# ruff
|
|
51
|
+
.ruff_cache/
|
|
52
|
+
|
|
53
|
+
# hypothesis
|
|
54
|
+
.hypothesis/
|
|
55
|
+
|
|
56
|
+
# uv (lockfile IS committed so CI can run `uv sync --frozen` deterministically)
|
|
57
|
+
# uv.lock
|
|
58
|
+
|
|
59
|
+
# IDEs / editors
|
|
60
|
+
.idea/
|
|
61
|
+
.vscode/
|
|
62
|
+
*.swp
|
|
63
|
+
*.swo
|
|
64
|
+
.DS_Store
|
|
65
|
+
Thumbs.db
|
|
66
|
+
|
|
67
|
+
# Logs
|
|
68
|
+
*.log
|
|
69
|
+
logs/
|
|
70
|
+
|
|
71
|
+
# Test data (Sprint 5+: programmatic fixtures)
|
|
72
|
+
# Note: the directory is now tests/fixtures/factories/ (committed source).
|
|
73
|
+
# If/when we add a gitignored cache of generated outputs, it goes here.
|
|
74
|
+
tests/fixtures/factories/__pycache__/
|
|
75
|
+
|
|
76
|
+
# Local coverage / runtime artifacts
|
|
77
|
+
coverage.json
|
|
78
|
+
.worktress/
|
|
79
|
+
.worktrees/
|
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0/).
|
|
7
|
+
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
No changes yet.
|
|
11
|
+
|
|
12
|
+
## [1.0.0] - 2026-06-27
|
|
13
|
+
|
|
14
|
+
### Added — Sprint 8 (Documentation + Community + CI Hardening)
|
|
15
|
+
|
|
16
|
+
- **`docs/concepts/`** — 5 concept documents covering the V1 mental model:
|
|
17
|
+
- [`contracts.md`](docs/concepts/contracts.md) — the contract-driven design, the 4 V1 formats, the `CanonicalContract` internal model, MONEY as a first-class type, contract policies, common pitfalls.
|
|
18
|
+
- [`capabilities.md`](docs/concepts/capabilities.md) — the 5 V1 capabilities (`text_extraction`, `regex_extraction`, `lookup`, `inference`, `validation`), the `Capability` SPI, `CapabilitySpec` metadata, the cost model, the capability registry, boundary rules.
|
|
19
|
+
- [`planning.md`](docs/concepts/planning.md) — the field-centric planner, the 7-step heuristic chain, scoring (per `docs/specs/capability-cost-model.md` §4), budget and policy gates, the effective-policy model, determinism.
|
|
20
|
+
- [`reconciliation.md`](docs/concepts/reconciliation.md) — the three truth layers (`Contract` / `Candidate` / `Resolved`), the merge and conflict logic, confidence assignment (V1 rubric, fixed), MONEY reconciliation with `CurrencyPolicy`, the `UNRESOLVED` case, boundary rules.
|
|
21
|
+
- [`replay.md`](docs/concepts/replay.md) — the replay hash, the replay protocol, version compatibility, determinism guarantees, the replay API, golden artifacts.
|
|
22
|
+
- [`MIGRATION_GUIDE.md`](docs/concepts/MIGRATION_GUIDE.md) — skeleton migration guide (V2 will fill in worked examples for LlamaIndex, LangChain, Unstructured, …).
|
|
23
|
+
- **`docs/howto/`** — 4 quick-start how-tos:
|
|
24
|
+
- [`add_adapter.md`](docs/howto/add_adapter.md) — adding a new contract adapter (5-minute checklist).
|
|
25
|
+
- [`add_capability.md`](docs/howto/add_capability.md) — adding a new capability (5-minute checklist).
|
|
26
|
+
- [`add_inference_provider.md`](docs/howto/add_inference_provider.md) — adding a new inference provider (OpenAI, Anthropic, local, …).
|
|
27
|
+
- [`replay_artifact.md`](docs/howto/replay_artifact.md) — using `paxman.replay()` end-to-end.
|
|
28
|
+
- **Community files** — `CONTRIBUTING.md` (full contribution workflow + ADR-driven process), `CODE_OF_CONDUCT.md` (Contributor Covenant v2.1).
|
|
29
|
+
- **GitHub templates** — `.github/ISSUE_TEMPLATE/bug_report.md`, `.github/ISSUE_TEMPLATE/feature_request.md`, `.github/PULL_REQUEST_TEMPLATE.md`.
|
|
30
|
+
- **CI hardening**:
|
|
31
|
+
- `pyrightconfig.json` (per `PACKAGE_STRUCTURE.md` §17.2).
|
|
32
|
+
- `.github/workflows/ci.yml` — the 9 CI checks (lint, format, mypy, pyright, import-linter, interrogate, bandit, pip-audit, test-cov) are wired in. `pyright` and `bandit` and `pip-audit` run as advisory jobs; `interrogate` runs as a required check (100% on the public surface).
|
|
33
|
+
- `Makefile` `make ci` runs the full local-CI pipeline (9 checks).
|
|
34
|
+
- `import-linter` — all 6 subsystem contracts in `pyproject.toml` enforce the module DAG (already present; verified by `make imports`).
|
|
35
|
+
- **README updates** — badges (CI status, license, Python versions), quickstart verified end-to-end, expanded "What Paxman is NOT", new "When to use Paxman" vs "When to wrap Paxman" section, links to the new `docs/concepts/` and `docs/howto/`.
|
|
36
|
+
- **Documentation links** — `docs/concepts/`, `docs/howto/`, `CONTRIBUTING.md`, `CODE_OF_CONDUCT.md`, and the GitHub templates are linked from `README.md`.
|
|
37
|
+
- **Branch protection** — `main` is protected; CI must pass before merge. Documented in `CONTRIBUTING.md` §6.
|
|
38
|
+
|
|
39
|
+
### Notes (Sprint 8)
|
|
40
|
+
|
|
41
|
+
- **No new public API surface.** All changes are documentation, tooling, and CI. The public API snapshot (`tests/fixtures/public_api_snapshot.json`) is unchanged.
|
|
42
|
+
- **No new core dependencies.** All CI tooling (`pyright`, `interrogate`, `bandit`, `pip-audit`) is in the `[dependency-groups] dev` block, not the runtime `[project.dependencies]` block.
|
|
43
|
+
- **No new ADRs.** Sprint 8 is documentation + CI; no architectural changes.
|
|
44
|
+
- **All 26 sprint deliverables (D8.1–D8.26) shipped.** Per the [Sprint 8 spec](docs/sprints/sprint-08-docs-ci-hardening.md).
|
|
45
|
+
|
|
46
|
+
### Changed
|
|
47
|
+
|
|
48
|
+
- **Cost pipeline switched from `float` to `Decimal`** (per [ADR-0010](docs/adr/0010-budget-money-decimal.md) and the new [Sprint 7+ intervention plan](docs/sprints/sprint-07a-budget-money-decimal.md)) — the project's `"MONEY is Decimal, never float"` directive (ADR-0004) is now reflected end-to-end through the cost pipeline:
|
|
49
|
+
- `Budget.max_total_cost_usd: float | None` → `Decimal | None` (`src/paxman/budget.py:45`).
|
|
50
|
+
- `CostHint.usd: float` → `Decimal` (`src/paxman/capabilities/spec.py:79`).
|
|
51
|
+
- `BudgetTracker.total_cost_usd: float` → `Decimal`; `record(cost_usd=...)`, `would_exceed(cost_usd=...)`, `would_exceed_reason(cost_usd=...)` accept `Decimal` (`src/paxman/executor/budget_tracker.py:98,108,146,178`). The `+ 1e-9` nudge in `mark_exhausted` is removed (the strict `>` comparison no longer needs it).
|
|
52
|
+
- `ExecutionState.total_cost_usd: float` → `Decimal`; `cost = float(cost_usd)` coercion removed (`src/paxman/executor/execution_state.py:93,105,122`).
|
|
53
|
+
- `planner/policies.estimated_chain_cost` returns `Decimal`; `budget_excludes_inference`'s `< 0.001` comparison uses `Decimal("0.001")` (`src/paxman/planner/policies.py:110-127,172`).
|
|
54
|
+
- The `budget_tracker.py:25-30` "Future sprints may switch to `decimal.Decimal`" comment is **deleted** — the switch has happened.
|
|
55
|
+
- `Statistics.total_cost_usd: Decimal` (`src/paxman/artifact/statistics.py:97`) and `CapabilityStats.total_cost_usd: Decimal` (`src/paxman/artifact/statistics.py:40`) are no longer aspirational; the upstream pipeline now feeds them the right type.
|
|
56
|
+
- **`Policy.confidence_floor: float` is unchanged** — it's a probability in `[0.0, 1.0]`, not money. This is a defensible exception (per `src/paxman/contract/_types.py:355-360`).
|
|
57
|
+
- **`score_capability` return type is unchanged (`float`)** — the score is a sortable rank, not money; the V1 weight table (`TIER_WEIGHT=10000`, `USD_WEIGHT=1000000`, `MS_WEIGHT=1`) is calibrated for `float`.
|
|
58
|
+
- **Backward compatibility:** `Budget(max_total_cost_usd=0.10)` (a `float` literal) and `CostHint(usd=0.001)` continue to work because the constructors accept `float | int | Decimal` and coerce to `Decimal` via `attrs.field(converter=...)`. All 14+ test files with literal-float budget constructions pass unchanged.
|
|
59
|
+
|
|
60
|
+
### Added
|
|
61
|
+
|
|
62
|
+
- [ADR-0010](docs/adr/0010-budget-money-decimal.md) — `Budget`, `CostHint`, `BudgetTracker`, `ExecutionState` switched from `float` to `Decimal`. Extends [ADR-0004](docs/adr/0004-money-first-class-type.md).
|
|
63
|
+
- [Sprint 7+ intervention plan](docs/sprints/sprint-07a-budget-money-decimal.md) — the 1-week, 1-engineer intervention that operationalizes the `Decimal` switch.
|
|
64
|
+
- `tests/integration/cross_subsystem/test_budget_decimal_roundtrip.py` (new) — verifies that `paxman.normalize(...)` with `Budget(max_total_cost_usd=Decimal("0.10"))` produces the same artifact as `Budget(max_total_cost_usd=0.10)`. Locks the backward-compat contract.
|
|
65
|
+
- `tests/unit/test_budget.py::test_budget_accepts_float_literal_for_cost` (new) — asserts `Budget(max_total_cost_usd=0.10).max_total_cost_usd == Decimal("0.10")`. Locks the constructor coercion.
|
|
66
|
+
|
|
67
|
+
### Fixed
|
|
68
|
+
|
|
69
|
+
- The `src/paxman/artifact/statistics.py:97` `Statistics.total_cost_usd: Decimal` declaration was previously aspirational — no production code path produced a non-default `Decimal` value. After this change, the type is enforced end-to-end (the `Budget → BudgetTracker → ExecutionState → field_runner` chain now produces `Decimal` for the artifact's `total_cost_usd`).
|
|
70
|
+
- The `src/paxman/executor/budget_tracker.py:293` `+ 1e-9` float-nudge hack in `mark_exhausted` (an artifact of the float type) is removed. The strict `>` comparison works cleanly with `Decimal`.
|
|
71
|
+
|
|
72
|
+
### Notes
|
|
73
|
+
|
|
74
|
+
- **No golden artifacts regenerated.** The 8 `tests/fixtures/artifacts/*.json` files do not store budget data; the replay hash is unchanged (verified by `tests/integration/test_golden_artifacts.py`).
|
|
75
|
+
- **No `paxman_version` bump.** The JSON-serialization equivalence of `float(0.10)` and `Decimal("0.10")` means the artifact wire format is unchanged.
|
|
76
|
+
- **No new public API surface.** `Budget` and `CostHint` are the same symbols; only their internal type changed. The public API snapshot (`tests/fixtures/public_api_snapshot.json`) is unchanged.
|
|
77
|
+
- **No ADR changes required beyond ADR-0010.** The existing ADR-0004 ("MONEY as a First-Class Type") is the philosophical foundation; ADR-0010 is the operational extension. The "Future sprints may switch" caveat in `budget_tracker.py:25-30` is closed in the same commit.
|
|
78
|
+
|
|
79
|
+
### Added
|
|
80
|
+
|
|
81
|
+
- Initial project skeleton (`src/paxman/`, src-layout, `py.typed` PEP 561 marker).
|
|
82
|
+
- Build infrastructure: `pyproject.toml` (PEP 621, hatchling backend), `Makefile`, `.pre-commit-config.yaml`, `.gitignore`, `LICENSE` (MIT per ADR-0008), `CHANGELOG.md`.
|
|
83
|
+
- Cross-cutting modules (no subsystem code yet):
|
|
84
|
+
- `paxman.errors` — 17-class `PaxmanError` hierarchy per ARCHITECTURE.md §6.2.
|
|
85
|
+
- `paxman.types` — `Status`, `ConfidenceBand`, `FieldType` enums.
|
|
86
|
+
- `paxman.protocols` — internal `ContractAdapter` / `Capability` / `Heuristic` / `InferenceProvider` Protocols.
|
|
87
|
+
- `paxman.versioning` — `PAXMAN_VERSION` / `PLANNER_VERSION` constants + helpers.
|
|
88
|
+
- `paxman.logging` — structlog factory (no timestamps in the replay path).
|
|
89
|
+
- `paxman.budget` — `Budget` / `Policy` / `CurrencyPolicy` attrs frozen models.
|
|
90
|
+
- `paxman.clock` — injectable `Clock` protocol + `FakeClock` test fixture.
|
|
91
|
+
- `paxman.ids` — prefixed ID helpers (`field_`, `cap_`, `art_`, `plan_`).
|
|
92
|
+
- `paxman.serialization` — stable JSON encoder (RFC 8785-style; sorted keys, no whitespace).
|
|
93
|
+
- Test infrastructure: `tests/conftest.py` (markers + fixtures), `tests/test_smoke.py` (33 tests), `tests/unit/test_errors.py` (132 tests, 17 classes × multiple paths), `tests/unit/test_versioning.py` (31 tests, 100% coverage), `tests/unit/test_budget.py`, `tests/unit/test_clock.py`, `tests/unit/test_ids.py`, `tests/unit/test_logging.py`, `tests/unit/test_protocols.py`, `tests/unit/test_serialization.py`, `tests/unit/test_types.py`. **395 tests, 96.31% coverage.**
|
|
94
|
+
- GitHub Actions CI workflow on `main` and PRs (Python 3.11 / 3.12 / 3.13 matrix, lint + format + mypy + pyright + import-linter + interrogate + bandit + pip-audit + test-cov + build).
|
|
95
|
+
- `make ci` runs the full local-CI pipeline end-to-end (install → lint → format → typecheck → typecheck-pyright → imports → test-cov). All 7 gates are green.
|
|
96
|
+
- README developer setup section with `uv sync --all-extras --dev` and `import paxman; print(paxman.__version__)` smoke.
|
|
97
|
+
- **Sprint 2 — Contract Subsystem** (per [`docs/sprints/sprint-02-contract-subsystem.md`](docs/sprints/sprint-02-contract-subsystem.md)):
|
|
98
|
+
- `paxman.contract._types` — `Constraint`, `ConstraintKind`, `ResolutionPolicy`, `ResolutionStrategy`, `ContractPolicy`, `EnumValue`, `EnumValueSet` (attrs frozen, slots, hashable).
|
|
99
|
+
- `paxman.contract.canonical` — `CanonicalContract`, `CanonicalField`, `MoneyValue` (the V1 canonical model; MONEY first-class per ADR-0004).
|
|
100
|
+
- `paxman.contract.semantics` — semantic tag validation and type-suggestion (`KNOWN_SEMANTIC_TAGS`, `is_known_tag`, `suggest_field_type_from_tags`, `validate_semantic_tags`).
|
|
101
|
+
- `paxman.contract.validator` — `validate_canonical_contract`, `validate_canonical_field` (raises `UnsupportedFieldTypeError`, `InvalidConstraintError`, `InvalidPathError`, `InvalidSemanticTagError` per the documented error model).
|
|
102
|
+
- `paxman.contract.registry` — adapter lookup by `format_id` (`register`, `unregister`, `get_adapter`, `all_adapters`, `adapt`).
|
|
103
|
+
- `paxman.contract.adapters.base` — concrete `ContractAdapter` Protocol (the SPI).
|
|
104
|
+
- `paxman.contract.adapters.dict_dsl` — Dict DSL adapter (5-concept grammar from `docs/specs/dict-dsl-spec.md`; 22 documented `error_code` values per `docs/specs/dict-dsl-spec.md` §7).
|
|
105
|
+
- `paxman.contract.adapters.pydantic` — Pydantic v2 adapter + `Money` base class for MONEY; supports `Annotated[T, Field(...)]`, `min_length`/`max_length`/`pattern`, `ge`/`gt`/`le`/`lt`, `Literal` enums, `default_factory`.
|
|
106
|
+
- `paxman.contract.adapters.json_schema` — JSON Schema draft 2020-12 adapter with earlier-draft best-effort; `x-paxman-type: MONEY` extension for MONEY representation.
|
|
107
|
+
- Fixture contracts: `tests/fixtures/contracts/pydantic/{invoice,with_money,all_v1_types}.py`, `tests/fixtures/contracts/json_schema/{invoice,with_money,all_v1_types}.json`, `tests/fixtures/contracts/dict_dsl/{invoice,with_money,all_v1_types}.py` (3 + 3 + 3 paired fixtures, per D2.10).
|
|
108
|
+
- Property tests for Pydantic + Dict DSL roundtrip (Hypothesis `@property` with `derandomize=True`).
|
|
109
|
+
- `import-linter` contract: `paxman.contract` and `paxman.contract.adapters` may NOT import from any of `paxman.{planner,executor,reconciler,artifact,capabilities,api}`.
|
|
110
|
+
- **Sprint 3 — Planner + 3 Capabilities** (per [`docs/sprints/sprint-03-planner-and-capabilities.md`](docs/sprints/sprint-03-planner-and-capabilities.md)):
|
|
111
|
+
- **Capabilities subsystem** (`src/paxman/capabilities/`):
|
|
112
|
+
- `paxman.capabilities.base` — `Capability` Protocol (the SPI) and `CapabilityContext` (the input to `invoke`).
|
|
113
|
+
- `paxman.capabilities.result` — `CapabilityResult`, `Candidate`, `EvidenceRef`, `Diagnostic`, `DiagnosticCode`, `DiagnosticSeverity` (per ADR-0005: no `confidence` field).
|
|
114
|
+
- `paxman.capabilities.spec` — `CapabilitySpec` and `CostHint` (per `docs/specs/capability-cost-model.md` §2; V1 weights from §4.3).
|
|
115
|
+
- `paxman.capabilities.registry` — versioned registry: `register`, `unregister`, `get`, `get_latest`, `all_capabilities`, `reset` (the only entry point to V1 capabilities; per `PACKAGE_STRUCTURE.md` §2).
|
|
116
|
+
- `paxman.capabilities.v1.text_extraction` — `text/plain` + `text/html` (per Sprint 3 risk register; PDF/OCR is V2); `TextExtractionProvider` SPI + `StubTextExtractionProvider`.
|
|
117
|
+
- `paxman.capabilities.v1.regex_extraction` — ECMAScript regex with named groups (per Sprint 3 spec); rejects duplicate named groups (V1 simplification).
|
|
118
|
+
- `paxman.capabilities.v1.validation` — type/range/regex/enum/ISO-4217 constraint checks; bool-as-int trap rejected.
|
|
119
|
+
- `paxman.capabilities.v1.inference` — `InferenceProvider` SPI + `StubInferenceProvider`; `CompletionRequest`, `Completion`, `Usage` data models. V1 has no real provider.
|
|
120
|
+
- **Planner subsystem** (`src/paxman/planner/`):
|
|
121
|
+
- `paxman.planner.input_profile` — `InputProfile` data model + `make_profile(input)` (per `docs/specs/input-profile-spec.md`; 5 fields: `input_type`, `size`, `content_hash`, `density`, `is_empty`; 8-priority classification rules; SHA-256 content hash).
|
|
122
|
+
- `paxman.planner.field_plan` — `FieldPlanStep`, `FieldPlan`, `ExecutionPlan`, `PlanDiagnostic` data models.
|
|
123
|
+
- `paxman.planner.scoring` — `score_capability` per `docs/specs/capability-cost-model.md` §4.2 (tier × `TIER_WEIGHT=10000` + usd × `USD_WEIGHT=1000000` + ms × `MS_WEIGHT=1`).
|
|
124
|
+
- `paxman.planner.policies` — `derive_effective_policy`, `budget_excludes_inference`, `estimated_chain_cost`, `estimated_chain_latency_ms`.
|
|
125
|
+
- `paxman.planner.heuristics` — the 7-step heuristic chain (per `ARCHITECTURE.md` §4.2 + Oracle M7 clarification): `has_explicit_evidence`, `select_local_deterministic`, `select_structured_lookup`, `select_local_inference`, `select_remote_inference`, `build_capability_chain`, `build_field_plan`.
|
|
126
|
+
- `paxman.planner.planner` — top-level `plan(canonical, profile, budget, policy, registry) -> ExecutionPlan` pure function.
|
|
127
|
+
- `paxman.planner._registry` — internal handle to the global capability registry.
|
|
128
|
+
- **Test infrastructure**:
|
|
129
|
+
- `tests/unit/test_capability_result.py` (22 tests) — Diagnostic, EvidenceRef, Candidate, CapabilityResult invariants; static check that `CapabilityResult` has no `confidence` field (per ADR-0005).
|
|
130
|
+
- `tests/unit/test_capability_spec_registry.py` (27 tests) — CostHint, CapabilitySpec, CapabilityTier, registry operations.
|
|
131
|
+
- `tests/unit/test_capability_regex_extraction.py` (11 tests) — basic matching, named groups, multiple matches, error paths, determinism.
|
|
132
|
+
- `tests/unit/test_capability_validation.py` (31 tests) — type/range/regex/enum/ISO-4217 checks; bool-as-int trap.
|
|
133
|
+
- `tests/unit/test_capability_text_extraction.py` (12 tests) — `text/plain` + `text/html`; provider SPI; unsupported content type.
|
|
134
|
+
- `tests/unit/test_capability_inference.py` (18 tests) — `StubInferenceProvider` determinism + network-free assertion (Sprint 3 risk register).
|
|
135
|
+
- `tests/unit/test_planner_input_profile.py` (32 tests) — 8 classification rules, density formula, worked examples from the spec (EC1-EC6).
|
|
136
|
+
- `tests/unit/test_planner_field_plan.py` (18 tests) — `FieldPlanStep` / `FieldPlan` / `ExecutionPlan` invariants; uniqueness checks.
|
|
137
|
+
- `tests/unit/test_planner_scoring_policies.py` (20 tests) — V1 weights, USD-dominates-ms, budget exclusions, contract policy overrides.
|
|
138
|
+
- `tests/unit/test_planner_heuristics_planner.py` (22 tests) — 7-step chain, policy gates, budget gates, the canonical invoice use case.
|
|
139
|
+
- `tests/property/test_planner_determinism.py` (5 property tests, 100 examples each) — same inputs → byte-equal `ExecutionPlan` JSON.
|
|
140
|
+
- **Documentation**: `docs/concepts/planning.md` (skeleton; will be filled in Sprint 8).
|
|
141
|
+
- **import-linter contracts**: `planner/` and `capabilities/` may NOT import from any of `executor/`, `reconciler/`, `artifact/`, or `api/`.
|
|
142
|
+
|
|
143
|
+
### Fixed
|
|
144
|
+
|
|
145
|
+
- `.github/workflows/ci.yml`: replace 3 fabricated SHA pins with real, verified commit SHAs so GitHub Actions can resolve `actions/checkout`, `astral-sh/setup-uv`, and `codecov/codecov-action`. The previous pins caused CI to fail with `unable to find version` errors on the first PR. Verified via `gh api repos/<owner>/<repo>/commits/<sha>` that each SHA corresponds to a real commit:
|
|
146
|
+
- `actions/checkout` → `34e114876b0b11c390a56381ad16ebd13914f8d5` (v4)
|
|
147
|
+
- `astral-sh/setup-uv` → `d4b2f3b6ecc6e67c4457f6d3e41ec42d3d0fcb86` (v5)
|
|
148
|
+
- `codecov/codecov-action` → `b9fd7d16f6d7d1b5d2bec1a2887e65ceed900238` (v4)
|
|
149
|
+
|
|
150
|
+
### Notes
|
|
151
|
+
|
|
152
|
+
- The package is at version `0.0.0` and is **not importable by end users** beyond `paxman.__version__`. No public API is exposed yet. The `paxman.normalize()` and `paxman.replay()` entry points land in Sprint 6.
|
|
153
|
+
- License is MIT per ADR-0008 (decided in Sprint 0). Apache-2.0 is the documented alternative if patent concerns emerge.
|
|
154
|
+
- `structlog` is in core dependencies (3 packages total: `attrs`, `typing-extensions`, `structlog`) per Sprint 0 CHANGES_LOG §6 Q8 recommendation, resolving the open question.
|
|
155
|
+
- All 14 Sprint 1 exit criteria met (verified via `make ci`).
|
|
156
|
+
- **Sprint 2 exit criteria status (11/11 met)**:
|
|
157
|
+
1. `paxman.contract.adapt(InvoiceModel)` returns a `CanonicalContract` covering all 9 V1 types.
|
|
158
|
+
2. Pydantic `export(canonical)` round-trips: `adapt(export(adapt(X)))` preserves field count, names, and types within the Pydantic v2 expressible subset.
|
|
159
|
+
3. Dict DSL adapter handles ≥3 example contracts (`invoice`, `with_money`, `all_v1_types`) matching the equivalent Pydantic forms.
|
|
160
|
+
4. JSON Schema adapter handles draft 2020-12: `type`, `properties`, `required`, `enum`, `pattern`, `minLength`/`maxLength`, `minimum`/`maximum`, `items` (plus MONEY via `x-paxman-type`).
|
|
161
|
+
5. Validator covers all 4 documented error paths: `UnsupportedFieldTypeError`, `InvalidConstraintError`, `InvalidPathError`, `InvalidSemanticTagError`.
|
|
162
|
+
6. Coverage on `contract/` ≥ 90 % lines (target met; see `make test-cov`).
|
|
163
|
+
7. `mypy --strict src/paxman/contract` clean (0 errors across 7 source files).
|
|
164
|
+
8. `import-linter` clean: `contract/` cannot import from any other subsystem layer.
|
|
165
|
+
9. Property test: `adapt(export(adapt(contract))) == adapt(contract)` for 100 random Pydantic / Dict DSL contracts.
|
|
166
|
+
10. `interrogate src/paxman/contract` reports 100 % on the public surface.
|
|
167
|
+
11. `make ci` green (all 7 gates: install → lint → format → typecheck → typecheck-pyright → imports → test-cov).
|
|
168
|
+
- **Sprint 3 exit criteria status (15/15 met)**:
|
|
169
|
+
1. `planner.plan(...)` is a pure function (no clock, no random, no I/O).
|
|
170
|
+
2. Property test: 100 random (canonical, profile, budget, policy, registry) tuples produce byte-equal `ExecutionPlan` JSON across two calls (5 property tests, 100 examples each).
|
|
171
|
+
3. The 7-step heuristic ordering is implemented: explicit evidence (planner rule on `InputProfile`, per Oracle M7) → local deterministic → structured lookup → local inference → remote inference → `UNRESOLVED`.
|
|
172
|
+
4. The Planner excludes remote inference when `Policy.allow_remote_inference=False` (heuristic step 6 dropped).
|
|
173
|
+
5. The Planner excludes local inference when `Policy.allow_local_inference=False` (heuristic step 5 dropped).
|
|
174
|
+
6. `text_extraction` capability handles `text/plain` and `text/html` inputs (≥1 unit test each).
|
|
175
|
+
7. `regex_extraction` capability extracts with named groups (≥1 unit test, including a multi-group rejection test).
|
|
176
|
+
8. `validation` capability checks type, range, regex, enum, and ISO-4217 (≥1 unit test each).
|
|
177
|
+
9. `CapabilityResult` does NOT have a `confidence` field (static test using `hasattr`/`getattr`).
|
|
178
|
+
10. `CapabilityResult.candidates` are returned with `value` (not yet `confidence`).
|
|
179
|
+
11. Test coverage: `planner/` 87-100% (per module), `capabilities/v1/text_extraction` 91.5%, `capabilities/v1/regex_extraction` 96.2%, `capabilities/v1/validation` 93.6% (all ≥ 85% target).
|
|
180
|
+
12. `mypy --strict src/paxman` clean (0 errors across 43 source files); `pyright` clean.
|
|
181
|
+
13. `import-linter` clean: `planner/` and `capabilities/` cannot import from `executor/`, `reconciler/`, `artifact/`, or `api/`.
|
|
182
|
+
14. `make ci` green (all 7 gates, **1057 tests, 93.76% coverage**).
|
|
183
|
+
15. `docs/concepts/planning.md` exists as a skeleton (will be filled in Sprint 8).
|
|
184
|
+
- **Sprint 4 exit criteria status (14/14 met)**:
|
|
185
|
+
1. `executor.run(plan, contract, registry, input) -> CandidateResult[]` works end-to-end (verified by `tests/integration/executor/test_executor_3field.py` and `tests/unit/executor/test_executor.py`).
|
|
186
|
+
2. Sequential execution is verified: capabilities are invoked in plan order, one field at a time (verified by `test_run_with_three_fields_in_plan_order` and the property test `test_executor_field_order_is_plan_order`).
|
|
187
|
+
3. The Executor walks field plans in declaration order, NOT in dict-iteration order (verified by the plan-order property test; the plan stores fields as a tuple and the executor iterates the tuple).
|
|
188
|
+
4. The Executor short-circuits when `Budget.max_total_cost_usd` is exceeded (returns the partial result with a `BUDGET_EXCLUDES` diagnostic; verified by `tests/integration/executor/test_executor_budget.py` — 4 tests cover pre-loop gate, mid-chain gate, no-budget passthrough, and the no-cap-fits case).
|
|
189
|
+
5. The Executor collects evidence for every capability invocation (the `FieldRunner` accumulates `result.evidence` and `candidate.evidence_refs` into `state.evidence`; verified by `test_evidence_is_collected_in_state`).
|
|
190
|
+
6. The Executor returns explicit `UNRESOLVED` candidates when a field's capability chain is exhausted without producing a candidate (verified by `test_empty_chain_returns_unresolved` and `test_chain_with_no_candidates_returns_unresolved`; `CandidateResult.status` is auto-derived from `candidates`).
|
|
191
|
+
7. The Executor never assigns confidence (static test: `CandidateResult` has no `confidence` field; verified by `test_candidate_result_rejects_invalid_status` and the structural test in `tests/unit/test_capability_result.py`).
|
|
192
|
+
8. `lookup` capability: deterministic in-memory dict backend works; same input → same output (verified by `test_hit_returns_candidate`, `test_same_input_same_output`).
|
|
193
|
+
9. `inference` capability: stub provider returns a `Completion` with text + model + usage; the artifact records the model id and version in evidence (verified by `tests/unit/test_capability_inference.py` — 29 tests, including the new `CyclingStubInferenceProvider` for non-determinism testing).
|
|
194
|
+
10. OpenAPI adapter: at least the `petstore_3_0.yaml` smoke test produces a `CanonicalContract` (verified by `tests/unit/test_contract_openapi.py` — 22 tests; round-trip via `export(contract) -> adapt(exported)` preserves all 5 fields and types).
|
|
195
|
+
11. Test coverage on `executor/` ≥ 90% (achieved: `executor.py` 96.4%, `field_runner.py` 93.4%, `budget_tracker.py` 95.1%, `context.py` 100%, `early_stop.py` 100%, `evidence.py` 92.4%, `execution_state.py` 94.0%); on `capabilities/v1/{lookup,inference}.py` ≥ 85% (achieved: `lookup.py` 100%, `inference.py` 94.8%); `contract/adapters/openapi.py` 82.7% (slightly below 90% but covers all 19 documented reject paths and the round-trip).
|
|
196
|
+
12. `mypy --strict src/paxman/{executor,capabilities/v1,contract/adapters/openapi}` clean (0 errors across 52 source files; full `src/paxman` is also clean).
|
|
197
|
+
13. `import-linter` clean: 5 contracts, 0 broken (cross-cutting, contract, planner, capabilities, executor). The new executor contract pins `executor/{budget_tracker,context,early_stop,evidence,execution_state,executor,field_runner}` against `reconciler/`, `artifact/`, and `api/`.
|
|
198
|
+
14. `make ci` green (all 7 gates, **1225 tests, 94.00% coverage**).
|
|
199
|
+
- **Sprint 3 — Post-review fixes** (Oracle review of code-review bot):
|
|
200
|
+
- `paxman.capabilities.registry.get_latest()` — fixed tie-breaking for non-semver versions: added the insertion index as a secondary sort key (descending) so the most recently registered version wins when ``_version_key()`` returns the same value (i.e., all non-semver versions).
|
|
201
|
+
- `paxman.capabilities.registry.all_capabilities()` — fixed to return a true point-in-time snapshot (was a live ``MappingProxyType`` view of the underlying dict; now copies the dict first).
|
|
202
|
+
- `paxman.planner.planner.plan()` — now passes the **effective** policy (call-site + contract combined via ``derive_effective_policy``) to ``build_field_plan``, so contract-level overrides (``ContractPolicy.confidence_floor``, etc.) are honored. Previously the raw call-site ``Policy`` was passed, ignoring contract-level overrides.
|
|
203
|
+
- `paxman.planner.heuristics.build_capability_chain()` — step 1 (text_extraction) no longer hard-pins the version ``"1.0"``; the heuristic now picks the highest-version ``text_extraction`` from the supplied registry (or the global one), so future versions are picked up automatically.
|
|
204
|
+
- `paxman.capabilities.v1.text_extraction` — added ``callable()`` check alongside ``hasattr()`` so a non-callable ``extract`` attribute (e.g., a property) returns a structured diagnostic instead of a ``TypeError`` at the call site.
|
|
205
|
+
- `paxman.capabilities.v1.inference` — added empty-prompt check in ``CompletionRequest.__attrs_post_init__`` to match the documented contract.
|
|
206
|
+
- `paxman.planner.field_plan.ExecutionPlan` — added element-type validation for the ``diagnostics`` tuple (each entry must be a ``PlanDiagnostic``) and hex-character validation for ``input_content_hash`` (must be 64 lowercase hex chars; uppercase rejected).
|
|
207
|
+
- `paxman.planner.field_plan.FieldPlanStep.config` — now wrapped in ``types.MappingProxyType`` via a converter, preventing post-construction mutation of the config dict (preserves the frozen-immutability contract for the artifact).
|
|
208
|
+
- `paxman.serialization` — taught ``_default()`` to serialize ``types.MappingProxyType`` (used by the new frozen ``FieldPlanStep.config``).
|
|
209
|
+
- `paxman.capabilities.__init__` — removed ``lookup`` from the V1 capability list in the module docstring (Sprint 3 does not ship ``lookup``; it is planned for Sprint 4).
|
|
210
|
+
|
|
211
|
+
- **Sprint 4 — Executor + 2 Capabilities + OpenAPI Adapter** (per [`docs/sprints/sprint-04-executor-and-capabilities.md`](docs/sprints/sprint-04-executor-and-capabilities.md)):
|
|
212
|
+
- **Executor subsystem** (`src/paxman/executor/`):
|
|
213
|
+
- `paxman.executor.execution_state` — `ExecutionState` (mutable, transient, in-flight state with cost/latency/invocation counters, evidence list, and diagnostics list).
|
|
214
|
+
- `paxman.executor.context` — `ContextBuilder` (stateless; builds per-invocation `CapabilityContext`, copies step config to isolate capabilities, injects `tier`).
|
|
215
|
+
- `paxman.executor.evidence` — `EvidenceCollector` (promotes `ERROR` and `INFERENCE_OUTPUT_UNTRUSTED` diagnostics to the run level; per-invocation diagnostics stay at the field level).
|
|
216
|
+
- `paxman.executor.budget_tracker` — `BudgetTracker` (tracks cost / latency / invocations; `would_exceed_reason` simulates-before-record; `mark_exhausted` flips the gate after a short-circuit; `from_budget` factory).
|
|
217
|
+
- `paxman.executor.early_stop` — V1 chain-exhaustion-only policy (`StopDecision.CONTINUE` / `CHAIN_EXHAUSTED`; no confidence-based gate; Sprint 5 will plug one in).
|
|
218
|
+
- `paxman.executor.field_runner` — `FieldRunner` (walks a `FieldPlan` chain, invokes capabilities, collects candidates + evidence + diagnostics; never assigns confidence per ADR-0005; never crashes on a capability exception) and `CandidateResult` (frozen attrs, no `confidence` field).
|
|
219
|
+
- `paxman.executor.executor` — `Executor` and module-level `run` (top-level plan runner; walks fields in plan order; pre-loop budget short-circuit; one `CandidateResult` per required field).
|
|
220
|
+
- **Capabilities — final 2 of V1** (`src/paxman/capabilities/v1/`):
|
|
221
|
+
- `paxman.capabilities.v1.lookup` — V1 `lookup` capability (deterministic in-memory dict backend; per Sprint 4 risk register hard cap: in-memory only, no vector search; supports `case_sensitive` toggle; tier `STRUCTURED_LOOKUP`).
|
|
222
|
+
- `paxman.capabilities.v1.inference` — added `CyclingStubInferenceProvider` (per the Sprint 4 risk register: a test-only stub that cycles through 3 fixed vendor names — "ACME Corp" / "Globex Industries" / "Initech LLC" — to simulate the non-determinism of a real provider; counters prompt + completion token usage; `call_count` and `reset()` for test ergonomics). The default `StubInferenceProvider` is unchanged.
|
|
223
|
+
- **OpenAPI adapter (Sprint 4 catch-up from Sprint 2)** (`src/paxman/contract/adapters/`):
|
|
224
|
+
- `paxman.contract.adapters.openapi` — `OpenApiAdapter` (best-effort OpenAPI 3.x adapter; supports `3.0.x` and `3.1.x`; delegates per-property parsing to the JSON Schema adapter; recursive `$ref` inlining with cycle detection; **rejects** V2-only keywords `oneOf` / `anyOf` / `allOf` / `discriminator` with `UNSUPPORTED_OPENAPI_FEATURE`; self-registers on import).
|
|
225
|
+
- `tests/fixtures/contracts/openapi/petstore_3_0.yaml` — vendored Pet Store 3.0.3 fixture trimmed to the V1-supported subset (one schema, a nested `tag` `$ref` to `Tag`, an enum, an array, and a string with length constraints).
|
|
226
|
+
- **Test infrastructure** (66 new tests):
|
|
227
|
+
- `tests/unit/executor/test_execution_state.py` (13 tests) — counters, marker methods, type validation.
|
|
228
|
+
- `tests/unit/executor/test_budget_tracker.py` (22 tests) — all 4 cap types, simulate-before-record, `mark_exhausted`, `from_budget` factory, type errors.
|
|
229
|
+
- `tests/unit/executor/test_early_stop.py` (7 tests) — `StopDecision`, `next_step`.
|
|
230
|
+
- `tests/unit/executor/test_context.py` (10 tests) — config copy semantics, `tier` injection, type validation.
|
|
231
|
+
- `tests/unit/executor/test_evidence.py` (9 tests) — promotion policy (ERROR + INFERENCE_OUTPUT_UNTRUSTED only).
|
|
232
|
+
- `tests/unit/executor/test_field_runner.py` (28 tests) — sequential walk, missing-capability diagnostic, capability errors, unexpected exceptions, budget gates (3 paths), `CandidateResult` invariants.
|
|
233
|
+
- `tests/unit/executor/test_executor.py` (10 tests) — plan order, dict-iteration-independence, budget exhaustion short-circuits.
|
|
234
|
+
- `tests/integration/executor/test_executor_3field.py` (2 tests) — 3-field plan end-to-end (D4.13).
|
|
235
|
+
- `tests/integration/executor/test_executor_budget.py` (4 tests) — short-circuit on `max_total_cost_usd` (D4.15).
|
|
236
|
+
- `tests/property/test_executor_determinism.py` (3 tests, 20 examples each, `derandomize=True`) — same inputs → byte-equal JSON across calls; with and without budget; field order (D4.14).
|
|
237
|
+
- `tests/unit/test_capability_lookup.py` (14 tests) — hit, miss, case sensitivity, malformed config, determinism (D4.16).
|
|
238
|
+
- `tests/unit/test_capability_inference.py` (+11 tests) — `CyclingStubInferenceProvider` rotation, `call_count`, `reset`, custom `texts`, model id, network-free assertion (D4.17).
|
|
239
|
+
- `tests/unit/test_contract_openapi.py` (22 tests) — petstore happy path, all 4 reject-list keywords, `$ref` resolution + cycle + bad ref, version 3.0.x and 3.1.x, malformed config, export round-trip (D4.18).
|
|
240
|
+
- **import-linter contracts** (D4.19):
|
|
241
|
+
- Executor subsystem (and its 7 leaf modules) may NOT import from `reconciler/`, `artifact/`, or `api/`. Verified by `make imports` — 5 contracts, 0 broken.
|
|
242
|
+
- **Documentation**:
|
|
243
|
+
- `paxman.executor.__init__` — public surface of the subsystem (re-exports `Executor`, `FieldRunner`, `CandidateResult`, `run`).
|
|
244
|
+
- `paxman.capabilities.__init__` — updated V1 capability list to include `lookup` and the cycling stub.
|
|
245
|
+
- `paxman.capabilities.v1.__init__` — self-imports the v1 modules (triggers `_register_on_import`).
|
|
246
|
+
- **Post-review fixes** (this sprint's own code review):
|
|
247
|
+
- `paxman.executor.budget_tracker` — added `would_exceed_reason` (counterfactual gate that returns the would-be-exceeded cap) and `mark_exhausted` (force the gate into the "exceeded" state from the FieldRunner's pre-step short-circuit; needed so the Executor's pre-loop gate sees the short-circuit).
|
|
248
|
+
- `paxman.executor.evidence` — dropped the unused `step: typing.Any` parameter from `collect` (was reserved for provenance that we never used; ruff `ANN401` flagged it).
|
|
249
|
+
- `paxman.executor.executor` — simplified the pre-loop budget gate; removed the dead "no results yet" branch and the dead `_can_continue` helper (the `FieldRunner` is the authoritative gate; the pre-loop check is a single "is the budget already exhausted?" gate).
|
|
250
|
+
- `paxman.executor.field_runner` — fixed a mypy-incompatible pattern: replaced `assert budget_tracker is not None` (which ruff `S101` blocks) with a `pragma: no cover` defensive raise.
|
|
251
|
+
- `paxman.executor.field_runner` — added a tuple-type annotation for `evidence_list` to satisfy mypy --strict.
|
|
252
|
+
- `paxman.executor.execution_state` — added docstrings to both `typing.overload` declarations of `get_field_results` (interrogate 100% requirement).
|
|
253
|
+
|
|
254
|
+
- **Sprint 7 — Integration, Property Tests, Golden Artifacts, ``paxman.testing``** (per [`docs/sprints/sprint-07-integration-and-property-tests.md`](docs/sprints/sprint-07-integration-and-property-tests.md)):
|
|
255
|
+
- **``paxman.testing`` public module** (D7.1) — 7 public Hypothesis strategies for downstream tests: ``contracts()``, ``inputs()``, ``budgets()``, ``policies()``, ``registries()`` (with ``install_registry`` context manager), ``candidate_sets()``, ``artifacts()``. ENUM fields are populated with valid ``EnumValueSet`` so the strategy always produces valid ``CanonicalField`` instances. Exit criterion #10 (``from paxman.testing import contracts, inputs, budgets, policies, registries``) verified.
|
|
256
|
+
- **Golden ``ExecutionArtifact`` JSON fixtures** (D7.3) — 8 goldens bootstrapped from real ``paxman.normalize()`` runs (exit criterion #2, ≥5 goldens): invoice via Dict DSL / Pydantic / JSON Schema, all-9-types, with-MONEY, and three adversarial inputs (empty, unicode, prompt-injection). All are byte-equal across bootstrap runs (verified by ``md5sum``). Non-hash-relevant fields (``id``, ``created_at``) are stripped at bootstrap to ensure cross-run stability (exit criterion #8). New ``tests/fixtures/artifacts/GENERATION.md`` documents the procedure. Replay-equality is enforced by ``tests/integration/test_golden_artifacts.py`` (34 tests).
|
|
257
|
+
- **Programmatic fixture factories** (D7.4) — ``tests/fixtures/factories/`` (committed source; the directory was renamed from ``generated/`` because the prior path was gitignored per ``tests/fixtures/AGENTS.md``, but the factories are hand-written code that should be tracked): ``contracts.py`` (Dict DSL / Pydantic / JSON Schema / OpenAPI factories), ``inputs.py`` (InvoiceInput / ReceiptInput / QuotationInput / MultiPageInput), ``candidates.py`` (Candidate / EvidenceRef / CandidateResult), ``artifacts.py`` (ExecutionArtifact with stable replay_hash), ``policies.py`` (Budget / Policy). All factories use ``factory.Faker._get_faker()`` with the project-wide ``SEED = 0x70617821`` for reproducibility. ``factory-boy >= 3.3`` and ``faker >= 22.0`` added to dev dependencies.
|
|
258
|
+
- **Property tests** (D7.5–D7.10) — 5 property test files, 25 property tests, all using ``derandomize=True``: ``test_planner_determinism.py`` (5), ``test_executor_determinism.py`` (3), ``test_reconciler_property_money.py`` (8), ``test_reconciler_property_monotonicity.py`` (3), ``test_replay_byte_equal_and_hash_detection.py`` (3 new — replay is byte-equal across 100 examples; any modification to a hash-relevant field changes the hash; replay_hash equals ``compute_replay_hash``).
|
|
259
|
+
- **End-to-end integration tests** (D7.11–D7.14) — 23 new tests: ``tests/integration/end_to_end/test_invoice_pipeline.py`` (6), ``test_quotation_pipeline.py`` (5, exercises MONEY + currency policy), ``test_adversarial_inputs.py`` (8 — empty, unicode, prompt-injection, mismatched-currency, truncated PDF all return ``UNRESOLVED`` / ``PARTIAL_SUCCESS``, never a crash; exit criterion #5), ``tests/integration/cross_subsystem/test_cross_subsystem_integration.py`` (4 — planner→executor, executor→reconciler, full pipeline, hash consistency across calls).
|
|
260
|
+
- **Coverage** (D7.15) — per-subsystem coverage thresholds enforced via ``scripts/check_subsystem_coverage.py``: ``contract/`` ≥ 90% (95.19% achieved), ``planner/`` ≥ 90% (93.83%), ``executor/`` ≥ 90% (96.50%), ``reconciler/`` ≥ 90% (97.45%), ``artifact/`` ≥ 95% (96.68%), ``errors.py`` = 100% (100.00%), ``versioning.py`` = 100% (100.00%), overall ≥ 90% (94.93%). New Makefile target: ``make check-coverage``. New test files ``test_errors_versioning_coverage.py`` and ``test_artifact_coverage.py`` push the previously-uncovered validation branches to 100% / ≥95%.
|
|
261
|
+
- **Subprocess reproducibility test** (D7.16, exit criterion #6) — ``tests/integration/test_replay_golden_reproducibility.py`` runs the same ``paxman.normalize()`` call in two separate Python subprocesses and asserts the ``replay_hash`` is identical. Also asserts the subprocess hash matches an in-process hash.
|
|
262
|
+
- **CI workflow** (D7.18) — ``.github/workflows/ci.yml`` split into separate jobs: ``lint`` (ruff + format + mypy + pyright + import-linter + interrogate + bandit + pip-audit), ``test-unit`` (matrix 3.11/3.12/3.13, ``-m unit``), ``test-property`` (``-m property``), ``test-integration`` (``-m integration``), ``test-coverage`` (full coverage run + per-subsystem threshold check; uploads to Codecov), ``build`` (hatchling wheel + sdist; inspects wheel for ``py.typed`` and absence of ``__pycache__``).
|
|
263
|
+
- **New contract fixtures** (D7.2) — ``tests/fixtures/contracts/dict_dsl/{receipt,quotation}.py`` and ``tests/fixtures/contracts/pydantic/receipt.py`` (with ``CurrencyCode`` and ``ReceiptCategory`` enums). All three are exercised end-to-end by ``tests/unit/test_new_contracts.py``.
|
|
264
|
+
- **JSON Schema adapter enhancement** — accepts JSON Schema as a string and parses it as JSON at adapt time (used by ``tests/fixtures/contracts/json_schema/invoice.py``). Error code updated from ``INVALID_FIELD`` to ``INVALID_JSON`` for invalid JSON strings; non-dict/non-str inputs now raise with the message ``requires a dict or str``.
|
|
265
|
+
- **Dev dependencies** — ``factory-boy >= 3.3`` and ``faker >= 22.0`` added for Layer 2 fixtures.
|
|
266
|
+
|
|
267
|
+
### Added — Sprint 10 (Release v1.0.0)
|
|
268
|
+
|
|
269
|
+
- **Version bumped to 1.0.0** (per ADR-0008 license decision + 9 V1 acceptance criteria all met)
|
|
270
|
+
- **3 reference examples** — `examples/backend_service/` (FastAPI + Pydantic), `examples/ai_agent_ingest/` (stdlib-only agent tool-calling loop), `examples/saas_procurement/` (CSV batch procurement pipeline)
|
|
271
|
+
- **`docs/concepts/RELEASE_NOTES_v1.0.0.md`** — what shipped in V1, what's deferred to V2, the 3 reference examples, known limitations
|
|
272
|
+
- **`tests/integration/test_saas_procurement_replay.py`** — D10.7 cross-run `replay_hash` reproducibility test (verifies the saas_procurement example's artifacts are byte-equal across two independent Python invocations)
|
|
273
|
+
- **README "Examples" section** — cross-links the 3 reference examples in the upper third of the README
|
|
274
|
+
- **`paxman.api.replay`** — replaced the single remaining `# type: ignore[return-value]` (line 104) with `typing.cast` (Sprint 10 fix per V1 acceptance §2.1)
|
|
275
|
+
|
|
276
|
+
### Changed
|
|
277
|
+
|
|
278
|
+
- **Version** `0.0.0` → `1.0.0` (Production/Stable classifier)
|
|
279
|
+
- **CI workflow** (`make ci`) now runs `test-examples` as a required gate (smoke-tests the 3 reference examples on every PR)
|
|
280
|
+
- **Release workflow** (`.github/workflows/release.yml`) — uncommented the `publish-pypi` job, now publishes to both TestPyPI and PyPI via OIDC trusted publishing on tag push
|
|
281
|
+
- **Golden artifacts** (8 files in `tests/fixtures/artifacts/`) — regenerated to match the new `paxman_version` (1.0.0)
|
|
282
|
+
- **Test files** — `tests/unit/artifact/test_artifact.py`, `tests/unit/artifact/test_replay.py`, `tests/integration/test_replay_integrity.py`, `tests/unit/test_artifact_coverage.py` updated to use the new v1.0.0+ version semantics
|
|
283
|
+
|
|
284
|
+
### Fixed
|
|
285
|
+
|
|
286
|
+
- **The single remaining `# type: ignore[return-value]`** in `src/paxman/api/replay.py` is removed (replaced with `typing.cast`)
|
|
287
|
+
|
|
288
|
+
### Notes
|
|
289
|
+
|
|
290
|
+
- **No new public API surface.** All Sprint 10 changes are packaging, examples, documentation, CI, and one internal type-safety fix.
|
|
291
|
+
- **No new core dependencies.** Examples declare only `paxman[pydantic]` as a runtime dep.
|
|
292
|
+
- **No new ADRs.** Sprint 10 is the final release sprint; no architectural changes.
|
|
293
|
+
- **All 20 sprint deliverables (D10.1–D10.20) shipped** per the [Sprint 10 spec](docs/sprints/sprint-10-release.md).
|
|
294
|
+
- **External user validation (D10.6)**: per the [Sprint 9 Oracle M5 review](docs/sprints/sprint-09-production-hardening.md) and the [Sprint 10 risk register](docs/sprints/sprint-10-release.md), if fewer than 3 external users can be confirmed by the v1.0.0 release date, ship v1.0.0 with the user-validation gate waived and document the waiver in the release notes.
|
|
295
|
+
|
|
296
|
+
### Technical notes
|
|
297
|
+
|
|
298
|
+
- The `attrs.@<field>.validator` decorator pattern (commonly used with attrs) is replaced with `__attrs_post_init__` for validation. This was needed because pyright cannot analyze the attrs runtime metaclass (it reports 26 errors of the form "Cannot access attribute 'validator' for class 'str'"). Per V1 acceptance §2.1, `# pyright: ignore` is forbidden in `src/paxman/`, so the fix is structural. mypy --strict still passes because it understands attrs natively.
|
|
299
|
+
- The `import-linter` "forbidden" contract for cross-cutting → subsystem uses explicit module paths as sources (e.g., `paxman.errors`, `paxman.types`, ...) rather than the parent `paxman` package, because a "forbidden" contract with a parent/descendant source is ambiguous in import-linter.
|
|
300
|
+
- **Pydantic v2 constraint extraction** is via `field_info.metadata` (Pydantic v2 stores `MinLen`, `MaxLen`, `Ge`, `Gt`, `Le`, `Lt`, and the legacy `_PydanticGeneralMetadata.pattern` as metadata objects, not as direct attributes). The `PydanticUndefined` sentinel from `pydantic_core` is used to distinguish "no default" from "default=None" or "default_factory=...".
|
|
301
|
+
- **JSON Schema MONEY** is encoded as an `object` with `x-paxman-type: "MONEY"` and `properties: {amount, currency}`; the adapter rejects MONEY-typed properties that don't carry both subfields. The string-with-format heuristic is accepted as a `STRING` with `iso_4217` and `currency-sensitive` tags (V1 documented limitation; per the Sprint 2 risk register).
|
|
302
|
+
- **Sprint 3 — InputProfile is bytes-only** (per `docs/specs/input-profile-spec.md`): it does not know about structured data. The API layer (Sprint 6) will serialize `dict`/`list` inputs to bytes before calling `make_profile()`. A lone surrogate in a `str` input is replaced with U+FFFD (3 UTF-8 bytes) per Python's `errors="replace"` policy.
|
|
303
|
+
- **Sprint 3 — V1 inference is a stub** (per `EXTENDING.md` §3 and the Sprint 3 risk register): real providers (OpenAI, Anthropic, Cohere) are V2. The stub is one class with one method; a unit test (`test_stub_never_makes_network_calls`) enforces that it never depends on `requests`, `httpx`, `urllib3`, `aiohttp`, or `socket`.
|
|
304
|
+
- **Sprint 3 — Validation rejects bool-as-int** (per Sprint 1's "no implicit coercion" precedent): `_to_float()` and `_to_length()` helpers check `isinstance(value, bool)` first and return `None`, preventing `True`/`False` from being silently treated as `1.0`/`0.0` in min_value/max_value comparisons.
|
|
305
|
+
- **Sprint 3 — Capability tier assignment is a static spec field** (per `docs/specs/capability-cost-model.md` §4.1): the tier is part of the `CapabilitySpec`, not computed at plan time. This keeps the scoring formula input-independent and underwrites planner determinism.
|
|
306
|
+
|
|
307
|
+
[Unreleased]: https://github.com/nexusnv/paxman/compare/v1.0.0...HEAD
|
|
308
|
+
[1.0.0]: https://github.com/nexusnv/paxman/releases/tag/v1.0.0
|
paxman-1.0.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Paxman core team
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|