PTSIP 0.3.8a2__tar.gz → 0.3.8a4__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.
- ptsip-0.3.8a4/MANIFEST.in +5 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/PKG-INFO +80 -21
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/README.md +79 -20
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/pyproject.toml +21 -1
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/registry/project-profile-contracts.yaml +7 -2
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/setup.py +35 -22
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/PTSIP.egg-info/PKG-INFO +80 -21
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/PTSIP.egg-info/SOURCES.txt +188 -64
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/bindings/current.yaml +4 -4
- ptsip-0.3.8a4/src/agent_contracts/candidate.py +383 -0
- ptsip-0.3.8a4/src/agent_contracts/canonicalization/ptsip-canonical-json-v1.json +81 -0
- ptsip-0.3.8a4/src/agent_contracts/conformance/current.json +987 -0
- ptsip-0.3.8a4/src/agent_contracts/contracts/current.json +3978 -0
- ptsip-0.3.8a4/src/agent_contracts/digests/policy-v1.json +7746 -0
- ptsip-0.3.8a4/src/agent_contracts/digests/projection-v1.json +7698 -0
- ptsip-0.3.8a4/src/agent_contracts/index.json +427 -0
- ptsip-0.3.8a4/src/agent_contracts/machine_resolver.py +81 -0
- ptsip-0.3.8a4/src/agent_contracts/promotion/current.json +50 -0
- ptsip-0.3.8a4/src/agent_contracts/promotion/index.json +13 -0
- ptsip-0.3.8a4/src/agent_contracts/promotion/specification-contract.json +49 -0
- ptsip-0.3.8a4/src/agent_contracts/schemas/candidate-group.schema.json +107 -0
- ptsip-0.3.8a4/src/agent_contracts/schemas/candidate-index.schema.json +246 -0
- ptsip-0.3.8a4/src/agent_contracts/schemas/candidate-vectors.schema.json +49 -0
- ptsip-0.3.8a4/src/agent_contracts/schemas/contracts/promotion.schema.json +81 -0
- ptsip-0.3.8a4/src/policy/ARCH/SFP-ARCH-0001.yaml +121 -0
- ptsip-0.3.8a4/src/policy/ARCH/SFP-ARCH-0002.yaml +48 -0
- ptsip-0.3.8a4/src/policy/ARCH/SFP-ARCH-0003.yaml +41 -0
- ptsip-0.3.8a4/src/policy/ASSURE/SFP-ASSURE-0001.yaml +51 -0
- ptsip-0.3.8a4/src/policy/ASSURE/SFP-ASSURE-0002.yaml +47 -0
- ptsip-0.3.8a4/src/policy/ASSURE/SFP-ASSURE-0003.yaml +48 -0
- ptsip-0.3.8a4/src/policy/CHANGE/SFP-CHANGE-0001.yaml +269 -0
- ptsip-0.3.8a4/src/policy/CNTR/SFP-CNTR-0001.yaml +265 -0
- ptsip-0.3.8a4/src/policy/CNTR/SFP-CNTR-0002.yaml +46 -0
- ptsip-0.3.8a4/src/policy/CNTR/SFP-CNTR-0003.yaml +56 -0
- ptsip-0.3.8a4/src/policy/CNTR/SFP-CNTR-0004.yaml +48 -0
- ptsip-0.3.8a4/src/policy/CTRL/SFP-CTRL-0001.yaml +110 -0
- ptsip-0.3.8a4/src/policy/GOV/SFP-GOV-0001.yaml +63 -0
- ptsip-0.3.8a4/src/policy/INFO/SFP-INFO-0001.yaml +294 -0
- ptsip-0.3.8a4/src/policy/INFO/SFP-INFO-0002.yaml +44 -0
- ptsip-0.3.8a4/src/policy/INFO/SFP-INFO-0003.yaml +43 -0
- ptsip-0.3.8a4/src/policy/INTENT/SFP-INTENT-0001.yaml +41 -0
- ptsip-0.3.8a4/src/policy/NORM/SFP-NORM-0001.yaml +50 -0
- ptsip-0.3.8a4/src/policy/NORM/SFP-NORM-0002.yaml +40 -0
- ptsip-0.3.8a4/src/policy/OPS/SFP-OPS-0001.yaml +44 -0
- ptsip-0.3.8a4/src/policy/REAL/SFP-REAL-0001.yaml +54 -0
- ptsip-0.3.8a4/src/policy/RECORD/SFP-RECORD-0001.yaml +42 -0
- ptsip-0.3.8a4/src/policy/RECORD/SFP-RECORD-0002.yaml +42 -0
- ptsip-0.3.8a4/src/policy/RISK/SFP-RISK-0001.yaml +35 -0
- ptsip-0.3.8a4/src/policy/SUPPLY/SFP-SUPPLY-0001.yaml +45 -0
- ptsip-0.3.8a4/src/policy/index.yaml +200 -0
- {ptsip-0.3.8a2/docs/Support_policy/policy → ptsip-0.3.8a4/src/policy/legacy}/SFP-0006.yaml +1 -1
- ptsip-0.3.8a4/src/policy/legacy/SFP-0022.yaml +53 -0
- ptsip-0.3.8a4/src/policy/legacy/SFP-0023.yaml +20 -0
- ptsip-0.3.8a4/src/policy/legacy/SFP-0024.yaml +118 -0
- {ptsip-0.3.8a2/docs/Support_policy → ptsip-0.3.8a4/src}/policy/registries/ptsip-support-authority-role-registry.yaml +158 -0
- ptsip-0.3.8a4/src/policy/registries/ptsip-support-authority-schema-registry.yaml +259 -0
- ptsip-0.3.8a4/src/policy/registries/ptsip-support-authority-subject-registry.yaml +75 -0
- ptsip-0.3.8a4/src/policy/registries/root-family-migration.json +3097 -0
- ptsip-0.3.8a4/src/policy/registries/root-family-projection-module-admission.json +23 -0
- ptsip-0.3.8a4/src/policy/registries/root-family-projection.module.json +201 -0
- {ptsip-0.3.8a2/docs/Support_policy → ptsip-0.3.8a4/src}/policy/schemas/ptsip-support-authority-eligibility-result.schema.json +1 -1
- {ptsip-0.3.8a2/docs/Support_policy → ptsip-0.3.8a4/src}/policy/schemas/ptsip-support-authority-role.schema.json +4 -1
- {ptsip-0.3.8a2/docs/Support_policy → ptsip-0.3.8a4/src}/policy/schemas/ptsip-support-authority-semantics.schema.json +320 -0
- {ptsip-0.3.8a2/docs/Support_policy → ptsip-0.3.8a4/src}/policy/schemas/ptsip-support-feature-policy-index.schema.json +15 -4
- {ptsip-0.3.8a2/docs/Support_policy → ptsip-0.3.8a4/src}/policy/schemas/ptsip-support-feature-policy.schema.json +4 -4
- ptsip-0.3.8a4/src/policy/schemas/ptsip-support-project-authority-record.schema.json +136 -0
- ptsip-0.3.8a4/src/policy/schemas/ptsip-support-root-family-policy.schema.json +206 -0
- {ptsip-0.3.8a2/docs/Support_policy → ptsip-0.3.8a4/src}/policy/schemas/ptsip-support-subject-binding.schema.json +1 -1
- ptsip-0.3.8a4/src/policy/schemas/root-family-migration.schema.json +240 -0
- ptsip-0.3.8a4/src/policy/schemas/root-family-projection-module.schema.json +276 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/operations/migrate-profile.yaml +6 -3
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/operations/validate.yaml +1 -1
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/clarification/resolution/profile_projection.py +5 -5
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/cli.py +66 -1
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/constants.py +1 -1
- ptsip-0.3.8a4/src/ptsip/context_plane.py +687 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/governance/authority.py +349 -7
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/governance/support_assets.py +2 -2
- ptsip-0.3.8a4/src/ptsip/migration/__init__.py +156 -0
- ptsip-0.3.8a4/src/ptsip/migration/analysis/__init__.py +20 -0
- ptsip-0.3.8a4/src/ptsip/migration/analysis/analyzer.py +160 -0
- ptsip-0.3.8a4/src/ptsip/migration/analysis/direct/__init__.py +5 -0
- ptsip-0.3.8a4/src/ptsip/migration/analysis/direct/convergence.py +133 -0
- ptsip-0.3.8a4/src/ptsip/migration/analysis/direct/result.py +91 -0
- ptsip-0.3.8a4/src/ptsip/migration/analysis/direct/source_projection.py +42 -0
- ptsip-0.3.8a4/src/ptsip/migration/analysis/direct/target_projection.py +71 -0
- ptsip-0.3.8a4/src/ptsip/migration/analysis/findings/__init__.py +0 -0
- ptsip-0.3.8a4/src/ptsip/migration/analysis/findings/architecture.py +29 -0
- ptsip-0.3.8a4/src/ptsip/migration/analysis/findings/lifecycle.py +28 -0
- ptsip-0.3.8a4/src/ptsip/migration/analysis/findings/work_requirements.py +103 -0
- ptsip-0.3.8a4/src/ptsip/migration/analysis/issue.py +12 -0
- ptsip-0.3.8a4/src/ptsip/migration/analysis/result.py +69 -0
- ptsip-0.3.8a4/src/ptsip/migration/analysis/source/__init__.py +0 -0
- ptsip-0.3.8a4/src/ptsip/migration/analysis/source/binding_validation.py +43 -0
- ptsip-0.3.8a4/src/ptsip/migration/analysis/source/evidence_correlation.py +40 -0
- ptsip-0.3.8a4/src/ptsip/migration/analysis/source/projection.py +252 -0
- ptsip-0.3.8a4/src/ptsip/migration/analysis/source/repository_resolution.py +96 -0
- ptsip-0.3.8a4/src/ptsip/migration/analysis/target/__init__.py +0 -0
- ptsip-0.3.8a4/src/ptsip/migration/analysis/target/compatibility.py +142 -0
- ptsip-0.3.8a4/src/ptsip/migration/analysis/target/relationship_findings.py +20 -0
- ptsip-0.3.8a4/src/ptsip/migration/analysis/target/semantics.py +159 -0
- ptsip-0.3.8a4/src/ptsip/migration/execution/__init__.py +5 -0
- ptsip-0.3.8a4/src/ptsip/migration/execution/authorization/__init__.py +4 -0
- ptsip-0.3.8a4/src/ptsip/migration/execution/authorization/binding.py +160 -0
- ptsip-0.3.8a4/src/ptsip/migration/execution/authorization/preconditions.py +71 -0
- ptsip-0.3.8a4/src/ptsip/migration/execution/authorization/proof.py +80 -0
- ptsip-0.3.8a4/src/ptsip/migration/execution/direct/__init__.py +9 -0
- ptsip-0.3.8a4/src/ptsip/migration/execution/direct/identity_plan.py +133 -0
- {ptsip-0.3.8a2/src/ptsip/migration → ptsip-0.3.8a4/src/ptsip/migration/execution/direct}/identity_rewrite.py +10 -142
- ptsip-0.3.8a2/src/ptsip/migration/direct_execution.py → ptsip-0.3.8a4/src/ptsip/migration/execution/direct/promotion.py +14 -125
- ptsip-0.3.8a4/src/ptsip/migration/execution/direct/verification.py +118 -0
- ptsip-0.3.8a4/src/ptsip/migration/execution/error.py +2 -0
- ptsip-0.3.8a4/src/ptsip/migration/execution/guard/__init__.py +3 -0
- ptsip-0.3.8a4/src/ptsip/migration/execution/guard/mutation.py +104 -0
- ptsip-0.3.8a4/src/ptsip/migration/execution/guard/repository_snapshot.py +47 -0
- ptsip-0.3.8a4/src/ptsip/migration/execution/ledger/__init__.py +3 -0
- ptsip-0.3.8a2/src/ptsip/migration/execution_ledger.py → ptsip-0.3.8a4/src/ptsip/migration/execution/ledger/record.py +3 -110
- ptsip-0.3.8a4/src/ptsip/migration/execution/ledger/store.py +113 -0
- ptsip-0.3.8a4/src/ptsip/migration/execution/mutation/__init__.py +5 -0
- ptsip-0.3.8a4/src/ptsip/migration/execution/mutation/asynchronous.py +41 -0
- ptsip-0.3.8a2/src/ptsip/migration/execution_apply.py → ptsip-0.3.8a4/src/ptsip/migration/execution/mutation/delta.py +11 -176
- ptsip-0.3.8a4/src/ptsip/migration/execution/mutation/finalization.py +90 -0
- ptsip-0.3.8a4/src/ptsip/migration/execution/mutation/source.py +57 -0
- ptsip-0.3.8a4/src/ptsip/migration/execution/promotion/__init__.py +4 -0
- ptsip-0.3.8a4/src/ptsip/migration/execution/promotion/mutation.py +55 -0
- ptsip-0.3.8a4/src/ptsip/migration/execution/promotion/preparation.py +79 -0
- ptsip-0.3.8a4/src/ptsip/migration/execution/promotion/verification.py +87 -0
- ptsip-0.3.8a4/src/ptsip/migration/execution/recovery.py +93 -0
- ptsip-0.3.8a4/src/ptsip/migration/execution/state/__init__.py +3 -0
- ptsip-0.3.8a4/src/ptsip/migration/execution/state/phase.py +17 -0
- ptsip-0.3.8a4/src/ptsip/migration/execution/state/promotion.py +25 -0
- ptsip-0.3.8a4/src/ptsip/migration/execution/state/recovery.py +31 -0
- ptsip-0.3.8a4/src/ptsip/migration/execution/state/source_steps.py +78 -0
- ptsip-0.3.8a4/src/ptsip/migration/planning/__init__.py +12 -0
- ptsip-0.3.8a4/src/ptsip/migration/planning/convergence/__init__.py +0 -0
- ptsip-0.3.8a4/src/ptsip/migration/planning/convergence/builder.py +324 -0
- ptsip-0.3.8a4/src/ptsip/migration/planning/convergence/final_state.py +132 -0
- ptsip-0.3.8a4/src/ptsip/migration/planning/convergence/reconciliation.py +175 -0
- ptsip-0.3.8a4/src/ptsip/migration/planning/direct/__init__.py +3 -0
- ptsip-0.3.8a2/src/ptsip/migration/direct_planner.py → ptsip-0.3.8a4/src/ptsip/migration/planning/direct/builder.py +9 -37
- ptsip-0.3.8a4/src/ptsip/migration/planning/direct/reference.py +26 -0
- ptsip-0.3.8a4/src/ptsip/migration/planning/proposal_derivation.py +137 -0
- ptsip-0.3.8a4/src/ptsip/migration/planning/result.py +106 -0
- ptsip-0.3.8a4/src/ptsip/migration/proposal/__init__.py +9 -0
- ptsip-0.3.8a2/src/ptsip/migration/proposal.py → ptsip-0.3.8a4/src/ptsip/migration/proposal/bundle.py +4 -172
- ptsip-0.3.8a4/src/ptsip/migration/proposal/semantic_identity.py +40 -0
- ptsip-0.3.8a4/src/ptsip/migration/proposal/source_set.py +50 -0
- ptsip-0.3.8a4/src/ptsip/migration/proposal/target_delta.py +88 -0
- ptsip-0.3.8a4/src/ptsip/profiles/__init__.py +1 -0
- ptsip-0.3.8a2/src/ptsip/local_profile_catalog.py → ptsip-0.3.8a4/src/ptsip/profiles/catalog.py +1 -1
- ptsip-0.3.8a2/src/ptsip/profile_compatibility.py → ptsip-0.3.8a4/src/ptsip/profiles/compatibility.py +1 -1
- ptsip-0.3.8a2/src/ptsip/profile_identity.py → ptsip-0.3.8a4/src/ptsip/profiles/identity.py +1 -1
- {ptsip-0.3.8a2 → ptsip-0.3.8a4/src/ptsip}/profiles/index.yaml +1 -1
- ptsip-0.3.8a2/src/ptsip/profile_metadata.py → ptsip-0.3.8a4/src/ptsip/profiles/metadata.py +2 -2
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/repository/profile_convergence.py +2 -2
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/repository/profile_path.py +1 -1
- ptsip-0.3.8a4/src/ptsip/repository/schemas/engine-state.schema.json +1 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/spec_identity.py +1 -1
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/specdata/project-profile-contracts.yaml +7 -2
- ptsip-0.3.8a4/src/ptsip/validation/handoff.py +75 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/validation/profile.py +2 -2
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/vpms/__init__.py +14 -8
- ptsip-0.3.8a4/src/vpms/contract_runtime.py +124 -0
- ptsip-0.3.8a4/src/vpms/contracts/execution-composition.json +1 -0
- ptsip-0.3.8a4/src/vpms/contracts/identity-registry.json +69 -0
- ptsip-0.3.8a4/src/vpms/contracts/index.json +1 -0
- ptsip-0.3.8a4/src/vpms/contracts/invariants.json +27 -0
- ptsip-0.3.8a4/src/vpms/contracts/protocol.json +1 -0
- ptsip-0.3.8a4/src/vpms/contracts/schemas/catalog.schema.json +80 -0
- ptsip-0.3.8a4/src/vpms/contracts/schemas/product-contract.schema.json +572 -0
- ptsip-0.3.8a4/src/vpms/contracts/schemas/selection-request.schema.json +47 -0
- ptsip-0.3.8a4/src/vpms/contracts/schemas/selection-result.schema.json +79 -0
- ptsip-0.3.8a4/src/vpms/contracts/schemas/selection-rule.schema.json +31 -0
- ptsip-0.3.8a4/src/vpms/contracts/selection.json +1 -0
- ptsip-0.3.8a4/src/vpms/domain/snapshot.py +118 -0
- ptsip-0.3.8a4/src/vpms/execution/composition.py +58 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/vpms/execution/runner.py +1 -34
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/vpms/integration/ptsip_bridge.py +22 -19
- ptsip-0.3.8a4/src/vpms/selection/__init__.py +4 -0
- ptsip-0.3.8a4/src/vpms/selection/resolver.py +130 -0
- ptsip-0.3.8a2/MANIFEST.in +0 -5
- ptsip-0.3.8a2/docs/Support_policy/policy/index.yaml +0 -66
- ptsip-0.3.8a2/docs/Support_policy/policy/registries/ptsip-support-authority-schema-registry.yaml +0 -119
- ptsip-0.3.8a2/docs/Support_policy/policy/registries/ptsip-support-authority-subject-registry.yaml +0 -47
- ptsip-0.3.8a2/docs/Support_policy/policy/schemas/ptsip-support-project-authority-record.schema.json +0 -85
- ptsip-0.3.8a2/src/ptsip/migration/__init__.py +0 -240
- ptsip-0.3.8a2/src/ptsip/migration/analyzer.py +0 -702
- ptsip-0.3.8a2/src/ptsip/migration/direct_convergence.py +0 -324
- ptsip-0.3.8a2/src/ptsip/migration/execution_binding.py +0 -417
- ptsip-0.3.8a2/src/ptsip/migration/execution_model.py +0 -280
- ptsip-0.3.8a2/src/ptsip/migration/execution_promotion.py +0 -195
- ptsip-0.3.8a2/src/ptsip/migration/model.py +0 -420
- ptsip-0.3.8a2/src/ptsip/migration/planner.py +0 -857
- ptsip-0.3.8a2/src/vpms/domain/selector.py +0 -41
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/License-Authority/COMMERCIAL-USE.md +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/License-Authority/LICENSE-GUIDE.md +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/License-Authority/LICENSE-HISTORY.md +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/License-Authority/LICENSE.md +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/License-Authority/NOTICE.md +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/License-Authority/license-authority.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/setup.cfg +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/PTSIP.egg-info/dependency_links.txt +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/PTSIP.egg-info/entry_points.txt +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/PTSIP.egg-info/requires.txt +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/PTSIP.egg-info/top_level.txt +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/__init__.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/actions/analyze-source-profile.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/actions/apply-adoption.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/actions/apply-profile-transition.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/actions/build-adoption-plan.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/actions/build-transition-plan.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/actions/capture-repository-snapshot.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/actions/collect-conformance-evidence.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/actions/compare-profile-authority.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/actions/emit-conformance-result.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/actions/evaluate-conformance-rules.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/actions/map-profile-target.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/actions/project-authority-winner.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/actions/read-relevant-authority.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/actions/resolve-adoption-facts.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/actions/resolve-profile-schema.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/actions/resolve-reconciliation-state.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/actions/validate-profile-structure.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/actions/validate-responsibility-map-semantics.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/conditions/adopt-apply-requested.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/conditions/adopt-authority-fresh.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/conditions/adopt-facts-resolved.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/conditions/adopt-profile-fresh.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/conditions/adopt-repository-fresh.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/conditions/adopt-snapshot-identified.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/conditions/adopt-write-authorized.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/conditions/authority-authority-fresh.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/conditions/authority-coordination-available.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/conditions/authority-profile-fresh.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/conditions/authority-projection-required.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/conditions/authority-semantic-conflict-absent.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/conditions/authority-write-authorized.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/conditions/conform-profile-ready.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/conditions/conform-snapshot-identified.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/conditions/migrate-apply-requested.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/conditions/migrate-source-fresh.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/conditions/migrate-source-profile-identified.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/conditions/migrate-target-contract-resolved.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/conditions/migrate-target-fresh.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/conditions/migrate-write-authorized.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/conditions/validate-contract-resolved.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/conditions/validate-profile-selected.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/gates/adoption-write.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/gates/authority-projection-write.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/gates/profile-transition-write.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/index.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/operations/adopt.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/operations/conform.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/operations/migrate-profile.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/operations/reconcile-authority.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/operations/validate.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/resolver.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/schemas/contracts/action.schema.json +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/schemas/contracts/binding.schema.json +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/schemas/contracts/condition.schema.json +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/schemas/contracts/index.schema.json +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/schemas/contracts/io.schema.json +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/schemas/contracts/mutation-gate.schema.json +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/schemas/contracts/operation.schema.json +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/schemas/contracts/spec.schema.json +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/schemas/contracts/vocabulary.schema.json +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/schemas/io/adopt-request.schema.json +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/schemas/io/adopt-result.schema.json +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/schemas/io/adopt-state.schema.json +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/schemas/io/authority-request.schema.json +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/schemas/io/authority-result.schema.json +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/schemas/io/authority-state.schema.json +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/schemas/io/conform-request.schema.json +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/schemas/io/conform-result.schema.json +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/schemas/io/conform-state.schema.json +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/schemas/io/migrate-request.schema.json +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/schemas/io/migrate-result.schema.json +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/schemas/io/migrate-state.schema.json +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/schemas/io/validate-request.schema.json +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/schemas/io/validate-result.schema.json +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/schemas/io/validate-state.schema.json +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/spec/adoption-procedure.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/spec/adoption.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/spec/agent-behavior.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/spec/authority.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/spec/classification.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/spec/conformance-detail.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/spec/conformance.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/spec/core.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/spec/governance.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/spec/profile-transition-detail.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/spec/profile-transition.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/spec/repository-boundaries.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/spec/responsibility-map-detail.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/spec/responsibility-map.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/spec/specification-governance.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/validator.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/vocabulary/authority.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/vocabulary/diagnostics.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/vocabulary/lifecycle.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/vocabulary/outcomes.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/agent_contracts/vocabulary/terminology.yaml +0 -0
- {ptsip-0.3.8a2/docs/Support_policy/policy → ptsip-0.3.8a4/src/policy/legacy}/SFP-0001.yaml +0 -0
- {ptsip-0.3.8a2/docs/Support_policy/policy → ptsip-0.3.8a4/src/policy/legacy}/SFP-0002.yaml +0 -0
- {ptsip-0.3.8a2/docs/Support_policy/policy → ptsip-0.3.8a4/src/policy/legacy}/SFP-0003.yaml +0 -0
- {ptsip-0.3.8a2/docs/Support_policy/policy → ptsip-0.3.8a4/src/policy/legacy}/SFP-0004.yaml +0 -0
- {ptsip-0.3.8a2/docs/Support_policy/policy → ptsip-0.3.8a4/src/policy/legacy}/SFP-0005.yaml +0 -0
- {ptsip-0.3.8a2/docs/Support_policy/policy → ptsip-0.3.8a4/src/policy/legacy}/SFP-0007.yaml +0 -0
- {ptsip-0.3.8a2/docs/Support_policy/policy → ptsip-0.3.8a4/src/policy/legacy}/SFP-0008.yaml +0 -0
- {ptsip-0.3.8a2/docs/Support_policy/policy → ptsip-0.3.8a4/src/policy/legacy}/SFP-0009.yaml +0 -0
- {ptsip-0.3.8a2/docs/Support_policy/policy → ptsip-0.3.8a4/src/policy/legacy}/SFP-0010.yaml +0 -0
- {ptsip-0.3.8a2/docs/Support_policy/policy → ptsip-0.3.8a4/src/policy/legacy}/SFP-0011.yaml +0 -0
- {ptsip-0.3.8a2/docs/Support_policy/policy → ptsip-0.3.8a4/src/policy/legacy}/SFP-0012.yaml +0 -0
- {ptsip-0.3.8a2/docs/Support_policy/policy → ptsip-0.3.8a4/src/policy/legacy}/SFP-0013.yaml +0 -0
- {ptsip-0.3.8a2/docs/Support_policy/policy → ptsip-0.3.8a4/src/policy/legacy}/SFP-0014.yaml +0 -0
- {ptsip-0.3.8a2/docs/Support_policy/policy → ptsip-0.3.8a4/src/policy/legacy}/SFP-0015.yaml +0 -0
- {ptsip-0.3.8a2/docs/Support_policy/policy → ptsip-0.3.8a4/src/policy/legacy}/SFP-0016.yaml +0 -0
- {ptsip-0.3.8a2/docs/Support_policy/policy → ptsip-0.3.8a4/src/policy/legacy}/SFP-0017.yaml +0 -0
- {ptsip-0.3.8a2/docs/Support_policy/policy → ptsip-0.3.8a4/src/policy/legacy}/SFP-0018.yaml +0 -0
- {ptsip-0.3.8a2/docs/Support_policy/policy → ptsip-0.3.8a4/src/policy/legacy}/SFP-0019.yaml +0 -0
- {ptsip-0.3.8a2/docs/Support_policy/policy → ptsip-0.3.8a4/src/policy/legacy}/SFP-0020.yaml +0 -0
- {ptsip-0.3.8a2/docs/Support_policy/policy → ptsip-0.3.8a4/src/policy/legacy}/SFP-0021.yaml +0 -0
- {ptsip-0.3.8a2/docs/Support_policy → ptsip-0.3.8a4/src}/policy/registries/ptsip-support-authorization-registry.yaml +0 -0
- {ptsip-0.3.8a2/docs/Support_policy → ptsip-0.3.8a4/src}/policy/schemas/ptsip-support-governance-registry.schema.json +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/__init__.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/__main__.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/adoption.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/__init__.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/bindings/current.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/index.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/operations/adopt.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/operations/conform.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/operations/reconcile-authority.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/runtime.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/schemas/binding.schema.json +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/schemas/index.schema.json +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/schemas/operation.schema.json +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/schemas/spec.schema.json +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/schemas/vocabulary.schema.json +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/spec/adoption.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/spec/authority.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/spec/classification.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/spec/conformance.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/spec/core.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/spec/governance.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/spec/profile-transition.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/spec/responsibility-map.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/validator.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/vocabulary/authority.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/vocabulary/diagnostics.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/vocabulary/lifecycle.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/vocabulary/outcomes.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/app/__init__.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/app/client.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/app/github_authority.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/app/github_client.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/app/github_reconciliation.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/app/local_client.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/app/server.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/app/service.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/app/store.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/artifact_evidence.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/build_resolution.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/clarification/__init__.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/clarification/generator.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/clarification/generator_core.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/clarification/i18n.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/clarification/model.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/clarification/render.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/clarification/resolution/__init__.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/clarification/resolution/model.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/clarification/resolution/parser.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/clarification/resolution/resolver.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/clarification/transports/__init__.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/clarification/transports/github_issue.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/conformance.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/conformance_audit.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/conformance_engine.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/dependency_analysis.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/dependency_cache.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/dependency_reconciliation.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/dependency_review.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/dependency_validation.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/doctor.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/evidence/__init__.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/evidence/adapters.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/evidence/contract.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/evidence/normalization.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/governance/__init__.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/governance/authorization.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/governance/model.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/governance/subject_matching.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/inspection/__init__.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/inspection/candidate_evidence.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/inspection/components.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/inspection/dependencies.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/inspection/dependencies_030.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/inspection/dotnet.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/inspection/go.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/inspection/inventory.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/inspection/javascript.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/inspection/lexing.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/inspection/python_resolution.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/inspection/source_adapters.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/lifecycle_evidence.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/model.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/pilot/__init__.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/pilot/runner.py +0 -0
- /ptsip-0.3.8a2/src/ptsip/project_profile_contracts.py → /ptsip-0.3.8a4/src/ptsip/profiles/contracts.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4/src/ptsip}/profiles/example.ptsip.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4/src/ptsip}/profiles/history/pp.1.01/example.ptsip.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4/src/ptsip}/profiles/history/pp.1.01/hybrid-python-package.ptsip.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4/src/ptsip}/profiles/history/pp.1.01/template-python-package.ptsip.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4/src/ptsip}/profiles/history/pp.1.02/example.ptsip.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4/src/ptsip}/profiles/history/pp.1.02/hybrid-python-package.ptsip.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4/src/ptsip}/profiles/history/pp.1.02/template-python-package.ptsip.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4/src/ptsip}/profiles/hybrid-python-package.ptsip.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4/src/ptsip}/profiles/template-python-package.ptsip.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/proposed_component.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/remediation/__init__.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/remediation/domain/__init__.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/remediation/domain/model.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/remediation/escalation/__init__.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/remediation/escalation/contract.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/remediation/escalation/engine.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/remediation/rules/__init__.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/remediation/rules/contract.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/remediation/solution/candidate.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/remediation/solution/elimination.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/repository/__init__.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/repository/discover.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/repository/namespace.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/repository/profile_transition.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/repository/remote.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/repository/schemas/repository-index.schema.json +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/repository/snapshot.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/review_evidence.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/source_compat/__init__.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/source_compat/integrity.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/source_compat/model.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/source_compat/reader.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/specdata/ptsip-agent-classification.schema.json +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/specdata/ptsip-artifact-evidence.schema.json +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/specdata/ptsip-diagnostic.schema.json +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/specdata/ptsip-normalized-evidence.schema.json +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/specdata/ptsip-profile-pp-1.01.schema.json +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/specdata/ptsip-profile-pp-1.02.schema.json +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/specdata/ptsip-profile.schema.json +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/specdata/ptsip-registry.yaml +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/specdata/ptsip-source-profile-0.3.4.schema.json +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/specdata/ptsip-source-profile-0.3.6.schema.json +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/specification_binding.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/storage/__init__.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/storage/local_state.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/topology.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/validation/__init__.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/validation/components.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/validation/rules.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/validation/specification.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/validation/templates.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/ptsip/validation_capture.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/vpms/domain/__init__.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/vpms/domain/model.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/vpms/domain/registry.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/vpms/execution/__init__.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/vpms/execution/adapters/__init__.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/vpms/execution/adapters/command.py +0 -0
- {ptsip-0.3.8a2 → ptsip-0.3.8a4}/src/vpms/integration/__init__.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: PTSIP
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.8a4
|
|
4
4
|
Summary: Reference tooling for primary lifecycle ownership and responsibility isolation
|
|
5
5
|
Author: Kinirin
|
|
6
6
|
Maintainer: Kinirin
|
|
@@ -37,13 +37,13 @@ Requires-Dist: setuptools>=77.0.3; extra == "dev"
|
|
|
37
37
|
Dynamic: license-file
|
|
38
38
|
|
|
39
39
|
<p align="right">
|
|
40
|
-
English | <a href="README.ko.md">한국어</a>
|
|
40
|
+
English | <a href="docs/translated/README.ko.md">한국어</a>
|
|
41
41
|
</p>
|
|
42
42
|
|
|
43
43
|
# PTSIP — Primary Lifecycle Ownership and Responsibility Isolation Policy
|
|
44
44
|
|
|
45
|
-
**Status:** Tool `0.3.
|
|
46
|
-
**Tool/package version:** `0.3.
|
|
45
|
+
**Status:** Tool `0.3.8a4` Go-native developer automation and release-verification consolidation prerelease — publication pending<br>
|
|
46
|
+
**Tool/package version:** `0.3.8a4`<br>
|
|
47
47
|
**Project Profile contract:** `pp.1.02`<br>
|
|
48
48
|
**Specification family:** `0.3.7-draft`<br>
|
|
49
49
|
**Bound immutable Specification revision:** `3c47816770d194ae42f98faedc911d980db0e62a`<br>
|
|
@@ -55,11 +55,11 @@ PTSIP is a project-defined architecture policy for separating project responsibi
|
|
|
55
55
|
|
|
56
56
|
> **Purpose precedes reuse.** Classify a coherent responsibility by why it exists and which lifecycle owns it before optimizing for code sharing.
|
|
57
57
|
|
|
58
|
-
Tool `0.3.
|
|
58
|
+
Tool `0.3.8a4` consolidates the developer control plane built after `0.3.8a3`: native Go developer automation, Root Family policy lifecycle enforcement, canonical Project Profile storage, deterministic Test Mode routing, and a single release workflow with responsibility-separated Go release verification. The `0.3.8a3` Consumer Context Plane behavior remains available. The Specification family and Project Profile contract identities remain unchanged.
|
|
59
59
|
|
|
60
60
|
## Primary lifecycle ownership
|
|
61
61
|
|
|
62
|
-
Canonical Tool `0.3.
|
|
62
|
+
Canonical Tool `0.3.8a4` classifications remain exactly:
|
|
63
63
|
|
|
64
64
|
| Classification | Meaning |
|
|
65
65
|
| --- | --- |
|
|
@@ -81,9 +81,9 @@ TOOLCHAIN
|
|
|
81
81
|
NEUTRAL_CONTRACT
|
|
82
82
|
```
|
|
83
83
|
|
|
84
|
-
Tool `0.3.
|
|
84
|
+
Tool `0.3.8a4` preserves the five-classification model established by Tool `0.3.6`. `TOOLCHAIN` is therefore **legacy Tool `0.3.5` input**, not a current canonical alias. A legacy Toolchain responsibility may become `DEVELOPMENT_TOOLING`, `DELIVERY`, `OPERATIONS`, or require a split depending on its actual lifecycle ownership. Blind `TOOLCHAIN -> DEVELOPMENT_TOOLING` rewriting is prohibited.
|
|
85
85
|
|
|
86
|
-
Tool `0.3.
|
|
86
|
+
Tool `0.3.8a4` provides evidence-bound direct current-target migration for explicitly supported historical sources. Migration capability remains separate from repository adoption authority and never turns inference into project intent.
|
|
87
87
|
|
|
88
88
|
## Classification is not path or technology
|
|
89
89
|
|
|
@@ -104,7 +104,7 @@ Paths such as `tests/`, `tools/`, `deploy/`, `ops/`, or `.github/workflows/` are
|
|
|
104
104
|
|
|
105
105
|
## Responsibility Map v2
|
|
106
106
|
|
|
107
|
-
Tool `0.3.
|
|
107
|
+
Tool `0.3.8a4` uses Responsibility Map v2 as the project-owned architecture declaration model. It keeps several axes independent:
|
|
108
108
|
|
|
109
109
|
```text
|
|
110
110
|
classification
|
|
@@ -233,12 +233,12 @@ Upgrade to the latest **published** release:
|
|
|
233
233
|
python -m pip install --upgrade PTSIP
|
|
234
234
|
```
|
|
235
235
|
|
|
236
|
-
Tool `0.3.
|
|
236
|
+
Tool `0.3.8a4` is a prerelease. A normal `pip install PTSIP` may continue to select the latest stable release unless prereleases are explicitly requested.
|
|
237
237
|
|
|
238
238
|
After publication, install this prerelease explicitly with:
|
|
239
239
|
|
|
240
240
|
```powershell
|
|
241
|
-
python -m pip install "PTSIP==0.3.
|
|
241
|
+
python -m pip install "PTSIP==0.3.8a4"
|
|
242
242
|
```
|
|
243
243
|
|
|
244
244
|
For source development on this release line:
|
|
@@ -261,15 +261,26 @@ ptsip clarify .
|
|
|
261
261
|
ptsip gate .
|
|
262
262
|
ptsip resolve --help
|
|
263
263
|
ptsip conform .
|
|
264
|
+
ptsip context status . --json
|
|
265
|
+
ptsip context check . --json
|
|
264
266
|
```
|
|
265
267
|
|
|
266
268
|
New project-owned profiles are selected through `.ptsip/profiles/index.json`; the catalog's `default_profile` resolves the active `*.ptsip.yaml` resource. Repository-root `ptsip.yaml` remains a compatibility/migration input, and an explicit `--profile` path still takes precedence.
|
|
267
269
|
|
|
270
|
+
PTSIP developers use that same local catalog and `.ptsip/profiles/main.ptsip.yaml`.
|
|
271
|
+
Profile implementation modules and distributed examples live in
|
|
272
|
+
`src/ptsip/profiles/`. The public catalog is `src/ptsip/profiles/index.yaml`;
|
|
273
|
+
`registry/project-profile-contracts.yaml` explicitly binds this source layout.
|
|
274
|
+
Historical PP baselines under `src/ptsip/profiles/history/` are preserved in
|
|
275
|
+
source distributions for verification and are excluded from wheels. Moving
|
|
276
|
+
storage preserves PP identity and historical bytes; public profile or schema
|
|
277
|
+
semantic changes still require the native Go PP transition gates.
|
|
278
|
+
|
|
268
279
|
## Adoption and decision authority
|
|
269
280
|
|
|
270
281
|
Repository evidence is not architecture authority. Candidate discovery, path names, templates, heuristics, and agent confidence can support review but cannot manufacture project intent.
|
|
271
282
|
|
|
272
|
-
Canonical Tool `0.3.
|
|
283
|
+
Canonical Tool `0.3.8a4` explicit adoption facts center on `classification` as lifecycle ownership authority. New canonical decisions use facts such as:
|
|
273
284
|
|
|
274
285
|
```text
|
|
275
286
|
classification
|
|
@@ -279,7 +290,7 @@ runtime_required
|
|
|
279
290
|
executable
|
|
280
291
|
```
|
|
281
292
|
|
|
282
|
-
The historical `lifecycle_owner` field is legacy migration evidence, not a second Tool `0.3.
|
|
293
|
+
The historical `lifecycle_owner` field is legacy migration evidence, not a second Tool `0.3.8a4` ownership authority.
|
|
283
294
|
|
|
284
295
|
Example dry-run:
|
|
285
296
|
|
|
@@ -344,9 +355,9 @@ PTSIP uses action-time synchronization rather than continuous background polling
|
|
|
344
355
|
|
|
345
356
|
Artifact ownership is independent from producer ownership. A `DEVELOPMENT_TOOLING` or `DELIVERY` component may validly build a `PRODUCT` artifact, but the resulting artifact must still satisfy the Product package boundary.
|
|
346
357
|
|
|
347
|
-
Tool `0.3.
|
|
358
|
+
Tool `0.3.8a4` supports snapshot-bound Product Artifact evidence. Release verification checks actual built distribution content rather than treating packaging configuration as proof. Product distribution verification rejects definite non-Product implementation leakage under `PTSIP-PKG-001`.
|
|
348
359
|
|
|
349
|
-
## VPMS — Verification
|
|
360
|
+
## VPMS — Verification Protocol Management System
|
|
350
361
|
|
|
351
362
|
PTSIP and VPMS answer different questions:
|
|
352
363
|
|
|
@@ -355,12 +366,32 @@ PTSIP
|
|
|
355
366
|
Who owns this responsibility across its lifecycle?
|
|
356
367
|
|
|
357
368
|
VPMS
|
|
358
|
-
|
|
369
|
+
How are explicit Verification Cases bound, executed, and reported?
|
|
359
370
|
```
|
|
360
371
|
|
|
361
|
-
PTSIP classification and VPMS Verification Purpose remain separate axes.
|
|
372
|
+
PTSIP classification and the historical VPMS Verification Purpose remain separate axes. The Case `purpose` field is compatibility-only: it does not decide selection, runner binding, or PTSIP classification. PTSIP core does not depend on VPMS.
|
|
373
|
+
|
|
374
|
+
The repository's three product contracts are ACTIVE and separately own the Case/reference/runner protocol, explicit Case selection, and execution composition. The public API is:
|
|
375
|
+
|
|
376
|
+
```python
|
|
377
|
+
from vpms import load_registry_snapshot, resolve_selection, run_cases
|
|
378
|
+
|
|
379
|
+
loaded = load_registry_snapshot(case_definitions, references=reference_registrations)
|
|
380
|
+
if not loaded.ok:
|
|
381
|
+
raise ValueError(loaded.diagnostics)
|
|
382
|
+
selection = resolve_selection(
|
|
383
|
+
loaded.snapshot, {"kind": "CASE_IDS", "case_ids": ["explicit.case.id"]}
|
|
384
|
+
)
|
|
385
|
+
if not selection.ok:
|
|
386
|
+
raise ValueError(selection.diagnostics)
|
|
387
|
+
results = run_cases(loaded.snapshot, selection, executors=runner_adapters)
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
`case_definitions`, `reference_registrations`, and `runner_adapters` are explicit caller-owned inputs. Selection fails closed on invalid, duplicate, or unknown IDs. Execution accepts selection bound to the same validated snapshot and preflights every selected adapter before executing the first Case. `SelectionScope`, `select_cases`, and `run_selected_cases` are retired, not compatibility aliases.
|
|
391
|
+
|
|
392
|
+
Optional PTSIP integration uses `ptsip.validation.handoff.load_validated_effective_map` followed by `vpms.integration.ptsip_bridge.metadata_from_effective_map`. ACTIVE `SFP-0023` owns only this read-only boundary: the projection exposes exact component ID and classification from a genuinely validated immutable effective map. A raw dict, a `validated=True` assertion, and the historical `load_ptsip_metadata` compatibility reader are not canonical validation proof or implicit fallbacks. `SFP-0006` is RETIRED with its historical meaning preserved; VPMS product protocol authority resides in the separate product contracts.
|
|
362
393
|
|
|
363
|
-
The current VPMS compatibility vocabulary may still contain `PRODUCT | TOOLCHAIN`. VPMS `TOOLCHAIN` is not a canonical Tool `0.3.
|
|
394
|
+
The current VPMS compatibility vocabulary may still contain `PRODUCT | TOOLCHAIN`. VPMS `TOOLCHAIN` is not a canonical Tool `0.3.8a4` PTSIP classification.
|
|
364
395
|
|
|
365
396
|
VPMS verification PASS does not imply PTSIP `CONFORMANT`, and PTSIP `CONFORMANT` does not imply functional verification PASS.
|
|
366
397
|
|
|
@@ -431,6 +462,34 @@ in its Tool release note; advancing the PP contract does not rewrite that Tool h
|
|
|
431
462
|
|
|
432
463
|
A new immutable revision is required only for a genuine normative change. Release workflow, test, planning, status, or documentation-only changes do not move `SPEC_REVISION` by themselves.
|
|
433
464
|
|
|
465
|
+
## Tool 0.3.8a4 release identity
|
|
466
|
+
|
|
467
|
+
Tool `0.3.8a4` consolidates native Go developer automation, Root Family policy lifecycle enforcement, canonical Project Profile storage, Test Mode routing, and release verification without changing the bound Specification family or Project Profile contract.
|
|
468
|
+
|
|
469
|
+
```text
|
|
470
|
+
Tool: 0.3.8a4
|
|
471
|
+
Project Profile: pp.1.02
|
|
472
|
+
Specification: 0.3.7-draft
|
|
473
|
+
SPEC_REVISION: 3c47816770d194ae42f98faedc911d980db0e62a
|
|
474
|
+
Release scope: Go-native developer control plane + responsibility-separated release verification
|
|
475
|
+
```
|
|
476
|
+
|
|
477
|
+
Release preparation and publication use the single `.github/workflows/tooling-release.yml` surface. PREPARE and PUBLISH retain independent exact-source verification. Release readiness is owned by the Go tests under `developer/tests/release/`.
|
|
478
|
+
|
|
479
|
+
## Tool 0.3.8a3 release identity
|
|
480
|
+
|
|
481
|
+
Tool `0.3.8a3` is an emergency Context Plane migration-semantics patch over the published `0.3.8a2` repository-namespace release.
|
|
482
|
+
|
|
483
|
+
```text
|
|
484
|
+
Tool: 0.3.8a3
|
|
485
|
+
Project Profile: pp.1.02
|
|
486
|
+
Specification: 0.3.7-draft
|
|
487
|
+
SPEC_REVISION: 3c47816770d194ae42f98faedc911d980db0e62a
|
|
488
|
+
Release scope: deterministic MEMORY.md -> Context Plane migration and projection repair
|
|
489
|
+
```
|
|
490
|
+
|
|
491
|
+
The canonical semantic write target is `.ptsip/context/source/context.source.json`. Generated `context.json`, `context.jsonl`, and `context.schema.json` are repaired from that source. Semantic ambiguity remains user-owned; deterministic projection repair is preauthorized for coding agents. Unlike Tool `0.3.8a2`, Tool `0.3.8a3` ships this implementation inside the Consumer Tool as `ptsip/context_plane.py`; a release build is invalid if that module or the `ptsip context` CLI surface is absent from the built wheel.
|
|
492
|
+
|
|
434
493
|
## Tool 0.3.8a2 release identity
|
|
435
494
|
|
|
436
495
|
Tool `0.3.8a2` is a repository-namespace stabilization prerelease with a deliberately narrow compatibility goal.
|
|
@@ -465,7 +524,7 @@ This Tool release does not introduce a new Specification family or Project Profi
|
|
|
465
524
|
|
|
466
525
|
It adds support for representing a not-yet-existing component as an explicit proposed candidate and resolving that proposal without silently materializing it as an active component. It does not claim completion of the broader Tool `0.4.0` capability-recovery architecture.
|
|
467
526
|
|
|
468
|
-
Release scope and verification history are recorded in [`releasenote/tool/0.3.8a1.md`](releasenote/tool/0.3.8a1.md). The release gate is defined by [`planning/0.3.8/0.3.8a1-emergency-release-gate.yaml`](planning/0.3.8/0.3.8a1-emergency-release-gate.yaml).
|
|
527
|
+
Release scope and verification history are recorded in [`releasenote/tool/0.3.8a1.md`](releasenote/tool/0.3.8a1.md). The release gate is defined by [`developer/planning/0.3.8/0.3.8a1/0.3.8a1-emergency-release-gate.yaml`](developer/planning/0.3.8/0.3.8a1/0.3.8a1-emergency-release-gate.yaml).
|
|
469
528
|
|
|
470
529
|
## License authority
|
|
471
530
|
|
|
@@ -482,8 +541,8 @@ Read-only inspection and Pilot operations remain read-only and do not create rep
|
|
|
482
541
|
|
|
483
542
|
Repository tooling implementations may physically live under `tools/`, `scripts/`, `src/`, or another project-owned path. Their PTSIP-owned registration, policy bindings, task/operation contracts, indexes, and lifecycle state must not establish an alternative repository-local PTSIP control-plane root.
|
|
484
543
|
|
|
485
|
-
Canonical machine indexes under `.ptsip/` use JSON. Tool `0.3.
|
|
544
|
+
Canonical machine indexes under `.ptsip/` use JSON. Tool `0.3.8a4` uses `.ptsip/index.json` as the root router and `.ptsip/profiles/index.json` for local Project Profile selection. The Task and runtime namespaces are reserved; runtime persistence details remain future work. A reserved or unavailable Task capability must fail closed for the dependent operation rather than causing an agent to invent a new Task Engine elsewhere in the repository.
|
|
486
545
|
|
|
487
546
|
## Project status
|
|
488
547
|
|
|
489
|
-
PTSIP remains experimental. Tool `0.3.
|
|
548
|
+
PTSIP remains experimental. Tool `0.3.8a4` is the current Go-native developer automation and release-verification consolidation prerelease candidate; its publication boundary is tracked in [`releasenote/tool/0.3.8a4.md`](releasenote/tool/0.3.8a4.md). Historical Tool releases, including `0.3.8a1`, and Specification notes are preserved under [`releasenote/`](releasenote/).
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
<p align="right">
|
|
2
|
-
English | <a href="README.ko.md">한국어</a>
|
|
2
|
+
English | <a href="docs/translated/README.ko.md">한국어</a>
|
|
3
3
|
</p>
|
|
4
4
|
|
|
5
5
|
# PTSIP — Primary Lifecycle Ownership and Responsibility Isolation Policy
|
|
6
6
|
|
|
7
|
-
**Status:** Tool `0.3.
|
|
8
|
-
**Tool/package version:** `0.3.
|
|
7
|
+
**Status:** Tool `0.3.8a4` Go-native developer automation and release-verification consolidation prerelease — publication pending<br>
|
|
8
|
+
**Tool/package version:** `0.3.8a4`<br>
|
|
9
9
|
**Project Profile contract:** `pp.1.02`<br>
|
|
10
10
|
**Specification family:** `0.3.7-draft`<br>
|
|
11
11
|
**Bound immutable Specification revision:** `3c47816770d194ae42f98faedc911d980db0e62a`<br>
|
|
@@ -17,11 +17,11 @@ PTSIP is a project-defined architecture policy for separating project responsibi
|
|
|
17
17
|
|
|
18
18
|
> **Purpose precedes reuse.** Classify a coherent responsibility by why it exists and which lifecycle owns it before optimizing for code sharing.
|
|
19
19
|
|
|
20
|
-
Tool `0.3.
|
|
20
|
+
Tool `0.3.8a4` consolidates the developer control plane built after `0.3.8a3`: native Go developer automation, Root Family policy lifecycle enforcement, canonical Project Profile storage, deterministic Test Mode routing, and a single release workflow with responsibility-separated Go release verification. The `0.3.8a3` Consumer Context Plane behavior remains available. The Specification family and Project Profile contract identities remain unchanged.
|
|
21
21
|
|
|
22
22
|
## Primary lifecycle ownership
|
|
23
23
|
|
|
24
|
-
Canonical Tool `0.3.
|
|
24
|
+
Canonical Tool `0.3.8a4` classifications remain exactly:
|
|
25
25
|
|
|
26
26
|
| Classification | Meaning |
|
|
27
27
|
| --- | --- |
|
|
@@ -43,9 +43,9 @@ TOOLCHAIN
|
|
|
43
43
|
NEUTRAL_CONTRACT
|
|
44
44
|
```
|
|
45
45
|
|
|
46
|
-
Tool `0.3.
|
|
46
|
+
Tool `0.3.8a4` preserves the five-classification model established by Tool `0.3.6`. `TOOLCHAIN` is therefore **legacy Tool `0.3.5` input**, not a current canonical alias. A legacy Toolchain responsibility may become `DEVELOPMENT_TOOLING`, `DELIVERY`, `OPERATIONS`, or require a split depending on its actual lifecycle ownership. Blind `TOOLCHAIN -> DEVELOPMENT_TOOLING` rewriting is prohibited.
|
|
47
47
|
|
|
48
|
-
Tool `0.3.
|
|
48
|
+
Tool `0.3.8a4` provides evidence-bound direct current-target migration for explicitly supported historical sources. Migration capability remains separate from repository adoption authority and never turns inference into project intent.
|
|
49
49
|
|
|
50
50
|
## Classification is not path or technology
|
|
51
51
|
|
|
@@ -66,7 +66,7 @@ Paths such as `tests/`, `tools/`, `deploy/`, `ops/`, or `.github/workflows/` are
|
|
|
66
66
|
|
|
67
67
|
## Responsibility Map v2
|
|
68
68
|
|
|
69
|
-
Tool `0.3.
|
|
69
|
+
Tool `0.3.8a4` uses Responsibility Map v2 as the project-owned architecture declaration model. It keeps several axes independent:
|
|
70
70
|
|
|
71
71
|
```text
|
|
72
72
|
classification
|
|
@@ -195,12 +195,12 @@ Upgrade to the latest **published** release:
|
|
|
195
195
|
python -m pip install --upgrade PTSIP
|
|
196
196
|
```
|
|
197
197
|
|
|
198
|
-
Tool `0.3.
|
|
198
|
+
Tool `0.3.8a4` is a prerelease. A normal `pip install PTSIP` may continue to select the latest stable release unless prereleases are explicitly requested.
|
|
199
199
|
|
|
200
200
|
After publication, install this prerelease explicitly with:
|
|
201
201
|
|
|
202
202
|
```powershell
|
|
203
|
-
python -m pip install "PTSIP==0.3.
|
|
203
|
+
python -m pip install "PTSIP==0.3.8a4"
|
|
204
204
|
```
|
|
205
205
|
|
|
206
206
|
For source development on this release line:
|
|
@@ -223,15 +223,26 @@ ptsip clarify .
|
|
|
223
223
|
ptsip gate .
|
|
224
224
|
ptsip resolve --help
|
|
225
225
|
ptsip conform .
|
|
226
|
+
ptsip context status . --json
|
|
227
|
+
ptsip context check . --json
|
|
226
228
|
```
|
|
227
229
|
|
|
228
230
|
New project-owned profiles are selected through `.ptsip/profiles/index.json`; the catalog's `default_profile` resolves the active `*.ptsip.yaml` resource. Repository-root `ptsip.yaml` remains a compatibility/migration input, and an explicit `--profile` path still takes precedence.
|
|
229
231
|
|
|
232
|
+
PTSIP developers use that same local catalog and `.ptsip/profiles/main.ptsip.yaml`.
|
|
233
|
+
Profile implementation modules and distributed examples live in
|
|
234
|
+
`src/ptsip/profiles/`. The public catalog is `src/ptsip/profiles/index.yaml`;
|
|
235
|
+
`registry/project-profile-contracts.yaml` explicitly binds this source layout.
|
|
236
|
+
Historical PP baselines under `src/ptsip/profiles/history/` are preserved in
|
|
237
|
+
source distributions for verification and are excluded from wheels. Moving
|
|
238
|
+
storage preserves PP identity and historical bytes; public profile or schema
|
|
239
|
+
semantic changes still require the native Go PP transition gates.
|
|
240
|
+
|
|
230
241
|
## Adoption and decision authority
|
|
231
242
|
|
|
232
243
|
Repository evidence is not architecture authority. Candidate discovery, path names, templates, heuristics, and agent confidence can support review but cannot manufacture project intent.
|
|
233
244
|
|
|
234
|
-
Canonical Tool `0.3.
|
|
245
|
+
Canonical Tool `0.3.8a4` explicit adoption facts center on `classification` as lifecycle ownership authority. New canonical decisions use facts such as:
|
|
235
246
|
|
|
236
247
|
```text
|
|
237
248
|
classification
|
|
@@ -241,7 +252,7 @@ runtime_required
|
|
|
241
252
|
executable
|
|
242
253
|
```
|
|
243
254
|
|
|
244
|
-
The historical `lifecycle_owner` field is legacy migration evidence, not a second Tool `0.3.
|
|
255
|
+
The historical `lifecycle_owner` field is legacy migration evidence, not a second Tool `0.3.8a4` ownership authority.
|
|
245
256
|
|
|
246
257
|
Example dry-run:
|
|
247
258
|
|
|
@@ -306,9 +317,9 @@ PTSIP uses action-time synchronization rather than continuous background polling
|
|
|
306
317
|
|
|
307
318
|
Artifact ownership is independent from producer ownership. A `DEVELOPMENT_TOOLING` or `DELIVERY` component may validly build a `PRODUCT` artifact, but the resulting artifact must still satisfy the Product package boundary.
|
|
308
319
|
|
|
309
|
-
Tool `0.3.
|
|
320
|
+
Tool `0.3.8a4` supports snapshot-bound Product Artifact evidence. Release verification checks actual built distribution content rather than treating packaging configuration as proof. Product distribution verification rejects definite non-Product implementation leakage under `PTSIP-PKG-001`.
|
|
310
321
|
|
|
311
|
-
## VPMS — Verification
|
|
322
|
+
## VPMS — Verification Protocol Management System
|
|
312
323
|
|
|
313
324
|
PTSIP and VPMS answer different questions:
|
|
314
325
|
|
|
@@ -317,12 +328,32 @@ PTSIP
|
|
|
317
328
|
Who owns this responsibility across its lifecycle?
|
|
318
329
|
|
|
319
330
|
VPMS
|
|
320
|
-
|
|
331
|
+
How are explicit Verification Cases bound, executed, and reported?
|
|
321
332
|
```
|
|
322
333
|
|
|
323
|
-
PTSIP classification and VPMS Verification Purpose remain separate axes.
|
|
334
|
+
PTSIP classification and the historical VPMS Verification Purpose remain separate axes. The Case `purpose` field is compatibility-only: it does not decide selection, runner binding, or PTSIP classification. PTSIP core does not depend on VPMS.
|
|
335
|
+
|
|
336
|
+
The repository's three product contracts are ACTIVE and separately own the Case/reference/runner protocol, explicit Case selection, and execution composition. The public API is:
|
|
337
|
+
|
|
338
|
+
```python
|
|
339
|
+
from vpms import load_registry_snapshot, resolve_selection, run_cases
|
|
340
|
+
|
|
341
|
+
loaded = load_registry_snapshot(case_definitions, references=reference_registrations)
|
|
342
|
+
if not loaded.ok:
|
|
343
|
+
raise ValueError(loaded.diagnostics)
|
|
344
|
+
selection = resolve_selection(
|
|
345
|
+
loaded.snapshot, {"kind": "CASE_IDS", "case_ids": ["explicit.case.id"]}
|
|
346
|
+
)
|
|
347
|
+
if not selection.ok:
|
|
348
|
+
raise ValueError(selection.diagnostics)
|
|
349
|
+
results = run_cases(loaded.snapshot, selection, executors=runner_adapters)
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
`case_definitions`, `reference_registrations`, and `runner_adapters` are explicit caller-owned inputs. Selection fails closed on invalid, duplicate, or unknown IDs. Execution accepts selection bound to the same validated snapshot and preflights every selected adapter before executing the first Case. `SelectionScope`, `select_cases`, and `run_selected_cases` are retired, not compatibility aliases.
|
|
353
|
+
|
|
354
|
+
Optional PTSIP integration uses `ptsip.validation.handoff.load_validated_effective_map` followed by `vpms.integration.ptsip_bridge.metadata_from_effective_map`. ACTIVE `SFP-0023` owns only this read-only boundary: the projection exposes exact component ID and classification from a genuinely validated immutable effective map. A raw dict, a `validated=True` assertion, and the historical `load_ptsip_metadata` compatibility reader are not canonical validation proof or implicit fallbacks. `SFP-0006` is RETIRED with its historical meaning preserved; VPMS product protocol authority resides in the separate product contracts.
|
|
324
355
|
|
|
325
|
-
The current VPMS compatibility vocabulary may still contain `PRODUCT | TOOLCHAIN`. VPMS `TOOLCHAIN` is not a canonical Tool `0.3.
|
|
356
|
+
The current VPMS compatibility vocabulary may still contain `PRODUCT | TOOLCHAIN`. VPMS `TOOLCHAIN` is not a canonical Tool `0.3.8a4` PTSIP classification.
|
|
326
357
|
|
|
327
358
|
VPMS verification PASS does not imply PTSIP `CONFORMANT`, and PTSIP `CONFORMANT` does not imply functional verification PASS.
|
|
328
359
|
|
|
@@ -393,6 +424,34 @@ in its Tool release note; advancing the PP contract does not rewrite that Tool h
|
|
|
393
424
|
|
|
394
425
|
A new immutable revision is required only for a genuine normative change. Release workflow, test, planning, status, or documentation-only changes do not move `SPEC_REVISION` by themselves.
|
|
395
426
|
|
|
427
|
+
## Tool 0.3.8a4 release identity
|
|
428
|
+
|
|
429
|
+
Tool `0.3.8a4` consolidates native Go developer automation, Root Family policy lifecycle enforcement, canonical Project Profile storage, Test Mode routing, and release verification without changing the bound Specification family or Project Profile contract.
|
|
430
|
+
|
|
431
|
+
```text
|
|
432
|
+
Tool: 0.3.8a4
|
|
433
|
+
Project Profile: pp.1.02
|
|
434
|
+
Specification: 0.3.7-draft
|
|
435
|
+
SPEC_REVISION: 3c47816770d194ae42f98faedc911d980db0e62a
|
|
436
|
+
Release scope: Go-native developer control plane + responsibility-separated release verification
|
|
437
|
+
```
|
|
438
|
+
|
|
439
|
+
Release preparation and publication use the single `.github/workflows/tooling-release.yml` surface. PREPARE and PUBLISH retain independent exact-source verification. Release readiness is owned by the Go tests under `developer/tests/release/`.
|
|
440
|
+
|
|
441
|
+
## Tool 0.3.8a3 release identity
|
|
442
|
+
|
|
443
|
+
Tool `0.3.8a3` is an emergency Context Plane migration-semantics patch over the published `0.3.8a2` repository-namespace release.
|
|
444
|
+
|
|
445
|
+
```text
|
|
446
|
+
Tool: 0.3.8a3
|
|
447
|
+
Project Profile: pp.1.02
|
|
448
|
+
Specification: 0.3.7-draft
|
|
449
|
+
SPEC_REVISION: 3c47816770d194ae42f98faedc911d980db0e62a
|
|
450
|
+
Release scope: deterministic MEMORY.md -> Context Plane migration and projection repair
|
|
451
|
+
```
|
|
452
|
+
|
|
453
|
+
The canonical semantic write target is `.ptsip/context/source/context.source.json`. Generated `context.json`, `context.jsonl`, and `context.schema.json` are repaired from that source. Semantic ambiguity remains user-owned; deterministic projection repair is preauthorized for coding agents. Unlike Tool `0.3.8a2`, Tool `0.3.8a3` ships this implementation inside the Consumer Tool as `ptsip/context_plane.py`; a release build is invalid if that module or the `ptsip context` CLI surface is absent from the built wheel.
|
|
454
|
+
|
|
396
455
|
## Tool 0.3.8a2 release identity
|
|
397
456
|
|
|
398
457
|
Tool `0.3.8a2` is a repository-namespace stabilization prerelease with a deliberately narrow compatibility goal.
|
|
@@ -427,7 +486,7 @@ This Tool release does not introduce a new Specification family or Project Profi
|
|
|
427
486
|
|
|
428
487
|
It adds support for representing a not-yet-existing component as an explicit proposed candidate and resolving that proposal without silently materializing it as an active component. It does not claim completion of the broader Tool `0.4.0` capability-recovery architecture.
|
|
429
488
|
|
|
430
|
-
Release scope and verification history are recorded in [`releasenote/tool/0.3.8a1.md`](releasenote/tool/0.3.8a1.md). The release gate is defined by [`planning/0.3.8/0.3.8a1-emergency-release-gate.yaml`](planning/0.3.8/0.3.8a1-emergency-release-gate.yaml).
|
|
489
|
+
Release scope and verification history are recorded in [`releasenote/tool/0.3.8a1.md`](releasenote/tool/0.3.8a1.md). The release gate is defined by [`developer/planning/0.3.8/0.3.8a1/0.3.8a1-emergency-release-gate.yaml`](developer/planning/0.3.8/0.3.8a1/0.3.8a1-emergency-release-gate.yaml).
|
|
431
490
|
|
|
432
491
|
## License authority
|
|
433
492
|
|
|
@@ -444,8 +503,8 @@ Read-only inspection and Pilot operations remain read-only and do not create rep
|
|
|
444
503
|
|
|
445
504
|
Repository tooling implementations may physically live under `tools/`, `scripts/`, `src/`, or another project-owned path. Their PTSIP-owned registration, policy bindings, task/operation contracts, indexes, and lifecycle state must not establish an alternative repository-local PTSIP control-plane root.
|
|
446
505
|
|
|
447
|
-
Canonical machine indexes under `.ptsip/` use JSON. Tool `0.3.
|
|
506
|
+
Canonical machine indexes under `.ptsip/` use JSON. Tool `0.3.8a4` uses `.ptsip/index.json` as the root router and `.ptsip/profiles/index.json` for local Project Profile selection. The Task and runtime namespaces are reserved; runtime persistence details remain future work. A reserved or unavailable Task capability must fail closed for the dependent operation rather than causing an agent to invent a new Task Engine elsewhere in the repository.
|
|
448
507
|
|
|
449
508
|
## Project status
|
|
450
509
|
|
|
451
|
-
PTSIP remains experimental. Tool `0.3.
|
|
510
|
+
PTSIP remains experimental. Tool `0.3.8a4` is the current Go-native developer automation and release-verification consolidation prerelease candidate; its publication boundary is tracked in [`releasenote/tool/0.3.8a4.md`](releasenote/tool/0.3.8a4.md). Historical Tool releases, including `0.3.8a1`, and Specification notes are preserved under [`releasenote/`](releasenote/).
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "PTSIP"
|
|
7
|
-
version = "0.3.
|
|
7
|
+
version = "0.3.8a4"
|
|
8
8
|
description = "Reference tooling for primary lifecycle ownership and responsibility isolation"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
@@ -45,8 +45,14 @@ ptsip-app = "ptsip.app.server:main"
|
|
|
45
45
|
[tool.setuptools.packages.find]
|
|
46
46
|
where = ["src"]
|
|
47
47
|
include = ["ptsip*", "vpms*", "agent_contracts*"]
|
|
48
|
+
exclude = ["tests*", "ptsip.profiles.history*"]
|
|
48
49
|
|
|
49
50
|
[tool.setuptools.package-data]
|
|
51
|
+
"ptsip.profiles" = ["index.yaml", "*.ptsip.yaml"]
|
|
52
|
+
vpms = [
|
|
53
|
+
"contracts/*.json",
|
|
54
|
+
"contracts/schemas/*.json",
|
|
55
|
+
]
|
|
50
56
|
ptsip = [
|
|
51
57
|
"specdata/*.json",
|
|
52
58
|
"specdata/*.yaml",
|
|
@@ -69,6 +75,17 @@ agent_contracts = [
|
|
|
69
75
|
"gates/*.yaml",
|
|
70
76
|
"vocabulary/*.yaml",
|
|
71
77
|
"bindings/*.yaml",
|
|
78
|
+
"index.json",
|
|
79
|
+
"contracts/current.json",
|
|
80
|
+
"conformance/current.json",
|
|
81
|
+
"promotion/current.json",
|
|
82
|
+
"promotion/index.json",
|
|
83
|
+
"promotion/specification-contract.json",
|
|
84
|
+
"canonicalization/*.json",
|
|
85
|
+
"digests/*.json",
|
|
86
|
+
"schemas/candidate-index.schema.json",
|
|
87
|
+
"schemas/candidate-group.schema.json",
|
|
88
|
+
"schemas/candidate-vectors.schema.json",
|
|
72
89
|
]
|
|
73
90
|
|
|
74
91
|
[project.optional-dependencies]
|
|
@@ -80,3 +97,6 @@ dev = [
|
|
|
80
97
|
"pytest>=8,<9",
|
|
81
98
|
"setuptools>=77.0.3",
|
|
82
99
|
]
|
|
100
|
+
|
|
101
|
+
[tool.setuptools.exclude-package-data]
|
|
102
|
+
"ptsip.profiles" = ["history/*", "history/**"]
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
schema_version: ptsip-project-profile-contract-registry/v1
|
|
2
2
|
authority: PTSIP_PROJECT_PROFILE_CONTRACT_IDENTITY
|
|
3
3
|
current: pp.1.02
|
|
4
|
+
profile_source:
|
|
5
|
+
root: src/ptsip/profiles
|
|
6
|
+
catalog: src/ptsip/profiles/index.yaml
|
|
7
|
+
history_root: src/ptsip/profiles/history
|
|
8
|
+
history_distribution: SOURCE_ONLY
|
|
4
9
|
contracts:
|
|
5
10
|
- version: pp.0.00
|
|
6
11
|
lifecycle: LEGACY_COMPATIBILITY_ONLY
|
|
@@ -15,7 +20,7 @@ contracts:
|
|
|
15
20
|
- ANALYZE
|
|
16
21
|
- CREATE_TARGET
|
|
17
22
|
schema: schemas/ptsip-profile-pp-1.01.schema.json
|
|
18
|
-
baseline: profiles/history/pp.1.01
|
|
23
|
+
baseline: src/ptsip/profiles/history/pp.1.01
|
|
19
24
|
- version: pp.1.02
|
|
20
25
|
lifecycle: CURRENT
|
|
21
26
|
operations:
|
|
@@ -24,7 +29,7 @@ contracts:
|
|
|
24
29
|
- ANALYZE
|
|
25
30
|
- CREATE_TARGET
|
|
26
31
|
schema: schemas/ptsip-profile-pp-1.02.schema.json
|
|
27
|
-
baseline: profiles/history/pp.1.02
|
|
32
|
+
baseline: src/ptsip/profiles/history/pp.1.02
|
|
28
33
|
transitions:
|
|
29
34
|
- from: pp.1.01
|
|
30
35
|
to: pp.1.02
|
|
@@ -9,8 +9,8 @@ from setuptools.command.build_py import build_py as _build_py
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
ROOT = Path(__file__).resolve().parent
|
|
12
|
-
CANONICAL_SUPPORT_POLICY = ROOT / "
|
|
13
|
-
CANONICAL_PUBLIC_PROFILES = ROOT / "profiles"
|
|
12
|
+
CANONICAL_SUPPORT_POLICY = ROOT / "src" / "policy"
|
|
13
|
+
CANONICAL_PUBLIC_PROFILES = ROOT / "src" / "ptsip" / "profiles"
|
|
14
14
|
CANONICAL_PUBLIC_PROFILE_CATALOG = CANONICAL_PUBLIC_PROFILES / "index.yaml"
|
|
15
15
|
CANONICAL_PP_CONTRACT_REGISTRY = ROOT / "registry" / "project-profile-contracts.yaml"
|
|
16
16
|
EMBEDDED_PP_CONTRACT_REGISTRY = (
|
|
@@ -40,11 +40,14 @@ def _project_support_policy(build_lib: Path) -> None:
|
|
|
40
40
|
policy_target.mkdir(parents=True, exist_ok=True)
|
|
41
41
|
copy2(source / "index.yaml", policy_target / "index.yaml")
|
|
42
42
|
|
|
43
|
-
sfp_files = sorted(source.
|
|
43
|
+
sfp_files = sorted(source.rglob("SFP-*.yaml"))
|
|
44
44
|
if not sfp_files:
|
|
45
45
|
raise RuntimeError("canonical Support Policy source contains no SFP records")
|
|
46
46
|
for path in sfp_files:
|
|
47
|
-
|
|
47
|
+
relative = path.relative_to(source)
|
|
48
|
+
destination = policy_target / relative
|
|
49
|
+
destination.parent.mkdir(parents=True, exist_ok=True)
|
|
50
|
+
copy2(path, destination)
|
|
48
51
|
|
|
49
52
|
copytree(source / "schemas", target / "schemas")
|
|
50
53
|
copytree(source / "registries", target / "registries")
|
|
@@ -52,8 +55,8 @@ def _project_support_policy(build_lib: Path) -> None:
|
|
|
52
55
|
|
|
53
56
|
def _registered_public_profile_resources() -> tuple[str, ...]:
|
|
54
57
|
catalog = _load_yaml(CANONICAL_PUBLIC_PROFILE_CATALOG)
|
|
55
|
-
if catalog.get("root") != "profiles":
|
|
56
|
-
raise RuntimeError("public Profile catalog root must be 'profiles'")
|
|
58
|
+
if catalog.get("root") != "src/ptsip/profiles":
|
|
59
|
+
raise RuntimeError("public Profile catalog root must be 'src/ptsip/profiles'")
|
|
57
60
|
|
|
58
61
|
profiles = catalog.get("profiles")
|
|
59
62
|
if not isinstance(profiles, list) or not profiles:
|
|
@@ -115,7 +118,7 @@ def _registered_profile_baselines() -> tuple[tuple[str, Path], ...]:
|
|
|
115
118
|
continue
|
|
116
119
|
if not isinstance(version, str) or not isinstance(baseline, str):
|
|
117
120
|
raise RuntimeError("Project Profile baseline binding is invalid")
|
|
118
|
-
expected = f"profiles/history/{version}"
|
|
121
|
+
expected = f"src/ptsip/profiles/history/{version}"
|
|
119
122
|
if baseline != expected:
|
|
120
123
|
raise RuntimeError(
|
|
121
124
|
f"Project Profile baseline {baseline!r} must equal {expected!r}"
|
|
@@ -123,38 +126,48 @@ def _registered_profile_baselines() -> tuple[tuple[str, Path], ...]:
|
|
|
123
126
|
source = ROOT / baseline
|
|
124
127
|
if not source.is_dir():
|
|
125
128
|
raise RuntimeError(f"registered Project Profile baseline is missing: {baseline}")
|
|
129
|
+
if not any(source.glob("*.ptsip.yaml")):
|
|
130
|
+
raise RuntimeError(f"registered Project Profile baseline is empty: {baseline}")
|
|
126
131
|
baselines.append((version, source))
|
|
127
132
|
|
|
128
133
|
current_baseline = current_matches[0].get("baseline")
|
|
129
|
-
if current_baseline != f"profiles/history/{current}":
|
|
134
|
+
if current_baseline != f"src/ptsip/profiles/history/{current}":
|
|
130
135
|
raise RuntimeError("current Project Profile contract must bind its generation baseline")
|
|
131
136
|
return tuple(baselines)
|
|
132
137
|
|
|
133
138
|
|
|
134
139
|
def _project_public_profiles(build_lib: Path) -> None:
|
|
135
140
|
resources = _registered_public_profile_resources()
|
|
136
|
-
|
|
141
|
+
_registered_profile_baselines()
|
|
137
142
|
|
|
138
143
|
target = build_lib / "ptsip" / "profiles"
|
|
139
|
-
if target.exists():
|
|
140
|
-
rmtree(target)
|
|
141
144
|
target.mkdir(parents=True, exist_ok=True)
|
|
145
|
+
# Preserve modules copied by build_py. History is source-only, including
|
|
146
|
+
# stale output left by an earlier build that shipped historical baselines.
|
|
147
|
+
history_target = target / "history"
|
|
148
|
+
if history_target.exists():
|
|
149
|
+
if not history_target.resolve().is_relative_to(build_lib.resolve()):
|
|
150
|
+
raise RuntimeError("historical build output escapes build directory")
|
|
151
|
+
rmtree(history_target)
|
|
152
|
+
for name in (
|
|
153
|
+
"profile_identity", "profile_metadata", "profile_compatibility",
|
|
154
|
+
"local_profile_catalog", "project_profile_contracts",
|
|
155
|
+
):
|
|
156
|
+
retired = target.parent / f"{name}.py"
|
|
157
|
+
if retired.exists():
|
|
158
|
+
if not retired.resolve().is_relative_to(build_lib.resolve()):
|
|
159
|
+
raise RuntimeError("retired profile output escapes build directory")
|
|
160
|
+
retired.unlink()
|
|
161
|
+
for stale in target.glob("*.ptsip.yaml"):
|
|
162
|
+
if stale.name not in resources:
|
|
163
|
+
if not stale.resolve().is_relative_to(build_lib.resolve()):
|
|
164
|
+
raise RuntimeError("stale profile output escapes build directory")
|
|
165
|
+
stale.unlink()
|
|
142
166
|
|
|
143
167
|
copy2(CANONICAL_PUBLIC_PROFILE_CATALOG, target / "index.yaml")
|
|
144
168
|
for resource in resources:
|
|
145
169
|
copy2(CANONICAL_PUBLIC_PROFILES / resource, target / resource)
|
|
146
170
|
|
|
147
|
-
for version, source in baselines:
|
|
148
|
-
history_target = target / "history" / version
|
|
149
|
-
history_target.mkdir(parents=True, exist_ok=True)
|
|
150
|
-
baseline_resources = sorted(source.glob("*.ptsip.yaml"))
|
|
151
|
-
if not baseline_resources:
|
|
152
|
-
raise RuntimeError(
|
|
153
|
-
f"registered Project Profile baseline contains no profiles: {source}"
|
|
154
|
-
)
|
|
155
|
-
for path in baseline_resources:
|
|
156
|
-
copy2(path, history_target / path.name)
|
|
157
|
-
|
|
158
171
|
specdata_target = build_lib / "ptsip" / "specdata"
|
|
159
172
|
specdata_target.mkdir(parents=True, exist_ok=True)
|
|
160
173
|
copy2(
|