PTSIP 0.3.8a3__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.8a3 → ptsip-0.3.8a4}/PKG-INFO +64 -21
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/README.md +63 -20
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/pyproject.toml +21 -1
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/registry/project-profile-contracts.yaml +7 -2
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/setup.py +35 -22
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/PTSIP.egg-info/PKG-INFO +64 -21
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/PTSIP.egg-info/SOURCES.txt +187 -65
- {ptsip-0.3.8a3 → 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.8a3/docs/Support_policy/policy → ptsip-0.3.8a4/src/policy/legacy}/SFP-0006.yaml +1 -1
- 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.8a3/docs/Support_policy → ptsip-0.3.8a4/src}/policy/registries/ptsip-support-authority-role-registry.yaml +146 -0
- {ptsip-0.3.8a3/docs/Support_policy → ptsip-0.3.8a4/src}/policy/registries/ptsip-support-authority-schema-registry.yaml +135 -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.8a3/docs/Support_policy → ptsip-0.3.8a4/src}/policy/schemas/ptsip-support-authority-eligibility-result.schema.json +1 -1
- {ptsip-0.3.8a3/docs/Support_policy → ptsip-0.3.8a4/src}/policy/schemas/ptsip-support-authority-role.schema.json +4 -1
- {ptsip-0.3.8a3/docs/Support_policy → ptsip-0.3.8a4/src}/policy/schemas/ptsip-support-authority-semantics.schema.json +276 -0
- {ptsip-0.3.8a3/docs/Support_policy → ptsip-0.3.8a4/src}/policy/schemas/ptsip-support-feature-policy-index.schema.json +15 -4
- {ptsip-0.3.8a3/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.8a3/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.8a3 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/operations/migrate-profile.yaml +6 -3
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/operations/validate.yaml +1 -1
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/clarification/resolution/profile_projection.py +5 -5
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/cli.py +1 -1
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/constants.py +1 -1
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/governance/authority.py +349 -7
- {ptsip-0.3.8a3 → 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.8a3/src/ptsip/migration → ptsip-0.3.8a4/src/ptsip/migration/execution/direct}/identity_rewrite.py +10 -142
- ptsip-0.3.8a3/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.8a3/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.8a3/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.8a3/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.8a3/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.8a3/src/ptsip/local_profile_catalog.py → ptsip-0.3.8a4/src/ptsip/profiles/catalog.py +1 -1
- ptsip-0.3.8a3/src/ptsip/profile_compatibility.py → ptsip-0.3.8a4/src/ptsip/profiles/compatibility.py +1 -1
- ptsip-0.3.8a3/src/ptsip/profile_identity.py → ptsip-0.3.8a4/src/ptsip/profiles/identity.py +1 -1
- {ptsip-0.3.8a3 → ptsip-0.3.8a4/src/ptsip}/profiles/index.yaml +1 -1
- ptsip-0.3.8a3/src/ptsip/profile_metadata.py → ptsip-0.3.8a4/src/ptsip/profiles/metadata.py +2 -2
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/repository/profile_convergence.py +2 -2
- {ptsip-0.3.8a3 → 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.8a3 → ptsip-0.3.8a4}/src/ptsip/spec_identity.py +1 -1
- {ptsip-0.3.8a3 → 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.8a3 → ptsip-0.3.8a4}/src/ptsip/validation/profile.py +2 -2
- {ptsip-0.3.8a3 → 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.8a3 → ptsip-0.3.8a4}/src/vpms/execution/runner.py +1 -34
- {ptsip-0.3.8a3 → 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.8a3/MANIFEST.in +0 -5
- ptsip-0.3.8a3/docs/Support_policy/policy/index.yaml +0 -69
- ptsip-0.3.8a3/docs/Support_policy/policy/registries/ptsip-support-authority-subject-registry.yaml +0 -48
- ptsip-0.3.8a3/docs/Support_policy/policy/schemas/ptsip-support-project-authority-record.schema.json +0 -85
- ptsip-0.3.8a3/src/ptsip/migration/__init__.py +0 -240
- ptsip-0.3.8a3/src/ptsip/migration/analyzer.py +0 -702
- ptsip-0.3.8a3/src/ptsip/migration/direct_convergence.py +0 -324
- ptsip-0.3.8a3/src/ptsip/migration/execution_binding.py +0 -417
- ptsip-0.3.8a3/src/ptsip/migration/execution_model.py +0 -280
- ptsip-0.3.8a3/src/ptsip/migration/execution_promotion.py +0 -195
- ptsip-0.3.8a3/src/ptsip/migration/model.py +0 -420
- ptsip-0.3.8a3/src/ptsip/migration/planner.py +0 -857
- ptsip-0.3.8a3/src/vpms/domain/selector.py +0 -41
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/License-Authority/COMMERCIAL-USE.md +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/License-Authority/LICENSE-GUIDE.md +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/License-Authority/LICENSE-HISTORY.md +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/License-Authority/LICENSE.md +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/License-Authority/NOTICE.md +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/License-Authority/license-authority.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/setup.cfg +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/PTSIP.egg-info/dependency_links.txt +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/PTSIP.egg-info/entry_points.txt +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/PTSIP.egg-info/requires.txt +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/PTSIP.egg-info/top_level.txt +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/__init__.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/actions/analyze-source-profile.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/actions/apply-adoption.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/actions/apply-profile-transition.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/actions/build-adoption-plan.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/actions/build-transition-plan.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/actions/capture-repository-snapshot.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/actions/collect-conformance-evidence.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/actions/compare-profile-authority.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/actions/emit-conformance-result.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/actions/evaluate-conformance-rules.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/actions/map-profile-target.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/actions/project-authority-winner.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/actions/read-relevant-authority.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/actions/resolve-adoption-facts.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/actions/resolve-profile-schema.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/actions/resolve-reconciliation-state.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/actions/validate-profile-structure.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/actions/validate-responsibility-map-semantics.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/conditions/adopt-apply-requested.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/conditions/adopt-authority-fresh.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/conditions/adopt-facts-resolved.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/conditions/adopt-profile-fresh.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/conditions/adopt-repository-fresh.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/conditions/adopt-snapshot-identified.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/conditions/adopt-write-authorized.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/conditions/authority-authority-fresh.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/conditions/authority-coordination-available.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/conditions/authority-profile-fresh.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/conditions/authority-projection-required.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/conditions/authority-semantic-conflict-absent.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/conditions/authority-write-authorized.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/conditions/conform-profile-ready.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/conditions/conform-snapshot-identified.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/conditions/migrate-apply-requested.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/conditions/migrate-source-fresh.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/conditions/migrate-source-profile-identified.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/conditions/migrate-target-contract-resolved.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/conditions/migrate-target-fresh.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/conditions/migrate-write-authorized.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/conditions/validate-contract-resolved.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/conditions/validate-profile-selected.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/gates/adoption-write.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/gates/authority-projection-write.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/gates/profile-transition-write.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/index.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/operations/adopt.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/operations/conform.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/operations/migrate-profile.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/operations/reconcile-authority.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/operations/validate.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/resolver.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/schemas/contracts/action.schema.json +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/schemas/contracts/binding.schema.json +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/schemas/contracts/condition.schema.json +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/schemas/contracts/index.schema.json +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/schemas/contracts/io.schema.json +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/schemas/contracts/mutation-gate.schema.json +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/schemas/contracts/operation.schema.json +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/schemas/contracts/spec.schema.json +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/schemas/contracts/vocabulary.schema.json +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/schemas/io/adopt-request.schema.json +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/schemas/io/adopt-result.schema.json +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/schemas/io/adopt-state.schema.json +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/schemas/io/authority-request.schema.json +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/schemas/io/authority-result.schema.json +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/schemas/io/authority-state.schema.json +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/schemas/io/conform-request.schema.json +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/schemas/io/conform-result.schema.json +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/schemas/io/conform-state.schema.json +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/schemas/io/migrate-request.schema.json +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/schemas/io/migrate-result.schema.json +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/schemas/io/migrate-state.schema.json +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/schemas/io/validate-request.schema.json +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/schemas/io/validate-result.schema.json +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/schemas/io/validate-state.schema.json +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/spec/adoption-procedure.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/spec/adoption.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/spec/agent-behavior.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/spec/authority.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/spec/classification.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/spec/conformance-detail.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/spec/conformance.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/spec/core.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/spec/governance.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/spec/profile-transition-detail.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/spec/profile-transition.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/spec/repository-boundaries.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/spec/responsibility-map-detail.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/spec/responsibility-map.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/spec/specification-governance.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/validator.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/vocabulary/authority.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/vocabulary/diagnostics.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/vocabulary/lifecycle.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/vocabulary/outcomes.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/agent_contracts/vocabulary/terminology.yaml +0 -0
- {ptsip-0.3.8a3/docs/Support_policy/policy → ptsip-0.3.8a4/src/policy/legacy}/SFP-0001.yaml +0 -0
- {ptsip-0.3.8a3/docs/Support_policy/policy → ptsip-0.3.8a4/src/policy/legacy}/SFP-0002.yaml +0 -0
- {ptsip-0.3.8a3/docs/Support_policy/policy → ptsip-0.3.8a4/src/policy/legacy}/SFP-0003.yaml +0 -0
- {ptsip-0.3.8a3/docs/Support_policy/policy → ptsip-0.3.8a4/src/policy/legacy}/SFP-0004.yaml +0 -0
- {ptsip-0.3.8a3/docs/Support_policy/policy → ptsip-0.3.8a4/src/policy/legacy}/SFP-0005.yaml +0 -0
- {ptsip-0.3.8a3/docs/Support_policy/policy → ptsip-0.3.8a4/src/policy/legacy}/SFP-0007.yaml +0 -0
- {ptsip-0.3.8a3/docs/Support_policy/policy → ptsip-0.3.8a4/src/policy/legacy}/SFP-0008.yaml +0 -0
- {ptsip-0.3.8a3/docs/Support_policy/policy → ptsip-0.3.8a4/src/policy/legacy}/SFP-0009.yaml +0 -0
- {ptsip-0.3.8a3/docs/Support_policy/policy → ptsip-0.3.8a4/src/policy/legacy}/SFP-0010.yaml +0 -0
- {ptsip-0.3.8a3/docs/Support_policy/policy → ptsip-0.3.8a4/src/policy/legacy}/SFP-0011.yaml +0 -0
- {ptsip-0.3.8a3/docs/Support_policy/policy → ptsip-0.3.8a4/src/policy/legacy}/SFP-0012.yaml +0 -0
- {ptsip-0.3.8a3/docs/Support_policy/policy → ptsip-0.3.8a4/src/policy/legacy}/SFP-0013.yaml +0 -0
- {ptsip-0.3.8a3/docs/Support_policy/policy → ptsip-0.3.8a4/src/policy/legacy}/SFP-0014.yaml +0 -0
- {ptsip-0.3.8a3/docs/Support_policy/policy → ptsip-0.3.8a4/src/policy/legacy}/SFP-0015.yaml +0 -0
- {ptsip-0.3.8a3/docs/Support_policy/policy → ptsip-0.3.8a4/src/policy/legacy}/SFP-0016.yaml +0 -0
- {ptsip-0.3.8a3/docs/Support_policy/policy → ptsip-0.3.8a4/src/policy/legacy}/SFP-0017.yaml +0 -0
- {ptsip-0.3.8a3/docs/Support_policy/policy → ptsip-0.3.8a4/src/policy/legacy}/SFP-0018.yaml +0 -0
- {ptsip-0.3.8a3/docs/Support_policy/policy → ptsip-0.3.8a4/src/policy/legacy}/SFP-0019.yaml +0 -0
- {ptsip-0.3.8a3/docs/Support_policy/policy → ptsip-0.3.8a4/src/policy/legacy}/SFP-0020.yaml +0 -0
- {ptsip-0.3.8a3/docs/Support_policy/policy → ptsip-0.3.8a4/src/policy/legacy}/SFP-0021.yaml +0 -0
- {ptsip-0.3.8a3/docs/Support_policy/policy → ptsip-0.3.8a4/src/policy/legacy}/SFP-0022.yaml +0 -0
- {ptsip-0.3.8a3/docs/Support_policy → ptsip-0.3.8a4/src}/policy/registries/ptsip-support-authorization-registry.yaml +0 -0
- {ptsip-0.3.8a3/docs/Support_policy → ptsip-0.3.8a4/src}/policy/schemas/ptsip-support-governance-registry.schema.json +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/__init__.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/__main__.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/adoption.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/__init__.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/bindings/current.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/index.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/operations/adopt.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/operations/conform.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/operations/reconcile-authority.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/runtime.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/schemas/binding.schema.json +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/schemas/index.schema.json +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/schemas/operation.schema.json +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/schemas/spec.schema.json +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/schemas/vocabulary.schema.json +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/spec/adoption.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/spec/authority.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/spec/classification.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/spec/conformance.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/spec/core.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/spec/governance.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/spec/profile-transition.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/spec/responsibility-map.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/validator.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/vocabulary/authority.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/vocabulary/diagnostics.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/vocabulary/lifecycle.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/agent_contracts/vocabulary/outcomes.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/app/__init__.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/app/client.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/app/github_authority.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/app/github_client.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/app/github_reconciliation.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/app/local_client.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/app/server.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/app/service.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/app/store.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/artifact_evidence.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/build_resolution.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/clarification/__init__.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/clarification/generator.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/clarification/generator_core.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/clarification/i18n.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/clarification/model.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/clarification/render.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/clarification/resolution/__init__.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/clarification/resolution/model.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/clarification/resolution/parser.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/clarification/resolution/resolver.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/clarification/transports/__init__.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/clarification/transports/github_issue.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/conformance.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/conformance_audit.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/conformance_engine.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/context_plane.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/dependency_analysis.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/dependency_cache.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/dependency_reconciliation.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/dependency_review.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/dependency_validation.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/doctor.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/evidence/__init__.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/evidence/adapters.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/evidence/contract.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/evidence/normalization.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/governance/__init__.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/governance/authorization.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/governance/model.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/governance/subject_matching.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/inspection/__init__.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/inspection/candidate_evidence.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/inspection/components.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/inspection/dependencies.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/inspection/dependencies_030.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/inspection/dotnet.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/inspection/go.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/inspection/inventory.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/inspection/javascript.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/inspection/lexing.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/inspection/python_resolution.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/inspection/source_adapters.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/lifecycle_evidence.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/model.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/pilot/__init__.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/pilot/runner.py +0 -0
- /ptsip-0.3.8a3/src/ptsip/project_profile_contracts.py → /ptsip-0.3.8a4/src/ptsip/profiles/contracts.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4/src/ptsip}/profiles/example.ptsip.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4/src/ptsip}/profiles/history/pp.1.01/example.ptsip.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4/src/ptsip}/profiles/history/pp.1.01/hybrid-python-package.ptsip.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4/src/ptsip}/profiles/history/pp.1.01/template-python-package.ptsip.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4/src/ptsip}/profiles/history/pp.1.02/example.ptsip.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4/src/ptsip}/profiles/history/pp.1.02/hybrid-python-package.ptsip.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4/src/ptsip}/profiles/history/pp.1.02/template-python-package.ptsip.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4/src/ptsip}/profiles/hybrid-python-package.ptsip.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4/src/ptsip}/profiles/template-python-package.ptsip.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/proposed_component.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/remediation/__init__.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/remediation/domain/__init__.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/remediation/domain/model.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/remediation/escalation/__init__.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/remediation/escalation/contract.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/remediation/escalation/engine.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/remediation/rules/__init__.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/remediation/rules/contract.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/remediation/solution/candidate.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/remediation/solution/elimination.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/repository/__init__.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/repository/discover.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/repository/namespace.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/repository/profile_transition.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/repository/remote.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/repository/schemas/repository-index.schema.json +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/repository/snapshot.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/review_evidence.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/source_compat/__init__.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/source_compat/integrity.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/source_compat/model.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/source_compat/reader.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/specdata/ptsip-agent-classification.schema.json +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/specdata/ptsip-artifact-evidence.schema.json +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/specdata/ptsip-diagnostic.schema.json +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/specdata/ptsip-normalized-evidence.schema.json +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/specdata/ptsip-profile-pp-1.01.schema.json +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/specdata/ptsip-profile-pp-1.02.schema.json +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/specdata/ptsip-profile.schema.json +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/specdata/ptsip-registry.yaml +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/specdata/ptsip-source-profile-0.3.4.schema.json +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/specdata/ptsip-source-profile-0.3.6.schema.json +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/specification_binding.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/storage/__init__.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/storage/local_state.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/topology.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/validation/__init__.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/validation/components.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/validation/rules.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/validation/specification.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/validation/templates.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/ptsip/validation_capture.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/vpms/domain/__init__.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/vpms/domain/model.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/vpms/domain/registry.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/vpms/execution/__init__.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/vpms/execution/adapters/__init__.py +0 -0
- {ptsip-0.3.8a3 → ptsip-0.3.8a4}/src/vpms/execution/adapters/command.py +0 -0
- {ptsip-0.3.8a3 → 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:
|
|
@@ -267,11 +267,20 @@ ptsip context check . --json
|
|
|
267
267
|
|
|
268
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.
|
|
269
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
|
+
|
|
270
279
|
## Adoption and decision authority
|
|
271
280
|
|
|
272
281
|
Repository evidence is not architecture authority. Candidate discovery, path names, templates, heuristics, and agent confidence can support review but cannot manufacture project intent.
|
|
273
282
|
|
|
274
|
-
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:
|
|
275
284
|
|
|
276
285
|
```text
|
|
277
286
|
classification
|
|
@@ -281,7 +290,7 @@ runtime_required
|
|
|
281
290
|
executable
|
|
282
291
|
```
|
|
283
292
|
|
|
284
|
-
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.
|
|
285
294
|
|
|
286
295
|
Example dry-run:
|
|
287
296
|
|
|
@@ -346,9 +355,9 @@ PTSIP uses action-time synchronization rather than continuous background polling
|
|
|
346
355
|
|
|
347
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.
|
|
348
357
|
|
|
349
|
-
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`.
|
|
350
359
|
|
|
351
|
-
## VPMS — Verification
|
|
360
|
+
## VPMS — Verification Protocol Management System
|
|
352
361
|
|
|
353
362
|
PTSIP and VPMS answer different questions:
|
|
354
363
|
|
|
@@ -357,12 +366,32 @@ PTSIP
|
|
|
357
366
|
Who owns this responsibility across its lifecycle?
|
|
358
367
|
|
|
359
368
|
VPMS
|
|
360
|
-
|
|
369
|
+
How are explicit Verification Cases bound, executed, and reported?
|
|
370
|
+
```
|
|
371
|
+
|
|
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)
|
|
361
388
|
```
|
|
362
389
|
|
|
363
|
-
|
|
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.
|
|
364
391
|
|
|
365
|
-
|
|
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.
|
|
393
|
+
|
|
394
|
+
The current VPMS compatibility vocabulary may still contain `PRODUCT | TOOLCHAIN`. VPMS `TOOLCHAIN` is not a canonical Tool `0.3.8a4` PTSIP classification.
|
|
366
395
|
|
|
367
396
|
VPMS verification PASS does not imply PTSIP `CONFORMANT`, and PTSIP `CONFORMANT` does not imply functional verification PASS.
|
|
368
397
|
|
|
@@ -433,6 +462,20 @@ in its Tool release note; advancing the PP contract does not rewrite that Tool h
|
|
|
433
462
|
|
|
434
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.
|
|
435
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
|
+
|
|
436
479
|
## Tool 0.3.8a3 release identity
|
|
437
480
|
|
|
438
481
|
Tool `0.3.8a3` is an emergency Context Plane migration-semantics patch over the published `0.3.8a2` repository-namespace release.
|
|
@@ -481,7 +524,7 @@ This Tool release does not introduce a new Specification family or Project Profi
|
|
|
481
524
|
|
|
482
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.
|
|
483
526
|
|
|
484
|
-
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).
|
|
485
528
|
|
|
486
529
|
## License authority
|
|
487
530
|
|
|
@@ -498,8 +541,8 @@ Read-only inspection and Pilot operations remain read-only and do not create rep
|
|
|
498
541
|
|
|
499
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.
|
|
500
543
|
|
|
501
|
-
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.
|
|
502
545
|
|
|
503
546
|
## Project status
|
|
504
547
|
|
|
505
|
-
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:
|
|
@@ -229,11 +229,20 @@ ptsip context check . --json
|
|
|
229
229
|
|
|
230
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.
|
|
231
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
|
+
|
|
232
241
|
## Adoption and decision authority
|
|
233
242
|
|
|
234
243
|
Repository evidence is not architecture authority. Candidate discovery, path names, templates, heuristics, and agent confidence can support review but cannot manufacture project intent.
|
|
235
244
|
|
|
236
|
-
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:
|
|
237
246
|
|
|
238
247
|
```text
|
|
239
248
|
classification
|
|
@@ -243,7 +252,7 @@ runtime_required
|
|
|
243
252
|
executable
|
|
244
253
|
```
|
|
245
254
|
|
|
246
|
-
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.
|
|
247
256
|
|
|
248
257
|
Example dry-run:
|
|
249
258
|
|
|
@@ -308,9 +317,9 @@ PTSIP uses action-time synchronization rather than continuous background polling
|
|
|
308
317
|
|
|
309
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.
|
|
310
319
|
|
|
311
|
-
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`.
|
|
312
321
|
|
|
313
|
-
## VPMS — Verification
|
|
322
|
+
## VPMS — Verification Protocol Management System
|
|
314
323
|
|
|
315
324
|
PTSIP and VPMS answer different questions:
|
|
316
325
|
|
|
@@ -319,12 +328,32 @@ PTSIP
|
|
|
319
328
|
Who owns this responsibility across its lifecycle?
|
|
320
329
|
|
|
321
330
|
VPMS
|
|
322
|
-
|
|
331
|
+
How are explicit Verification Cases bound, executed, and reported?
|
|
332
|
+
```
|
|
333
|
+
|
|
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)
|
|
323
350
|
```
|
|
324
351
|
|
|
325
|
-
|
|
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.
|
|
326
353
|
|
|
327
|
-
|
|
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.
|
|
355
|
+
|
|
356
|
+
The current VPMS compatibility vocabulary may still contain `PRODUCT | TOOLCHAIN`. VPMS `TOOLCHAIN` is not a canonical Tool `0.3.8a4` PTSIP classification.
|
|
328
357
|
|
|
329
358
|
VPMS verification PASS does not imply PTSIP `CONFORMANT`, and PTSIP `CONFORMANT` does not imply functional verification PASS.
|
|
330
359
|
|
|
@@ -395,6 +424,20 @@ in its Tool release note; advancing the PP contract does not rewrite that Tool h
|
|
|
395
424
|
|
|
396
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.
|
|
397
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
|
+
|
|
398
441
|
## Tool 0.3.8a3 release identity
|
|
399
442
|
|
|
400
443
|
Tool `0.3.8a3` is an emergency Context Plane migration-semantics patch over the published `0.3.8a2` repository-namespace release.
|
|
@@ -443,7 +486,7 @@ This Tool release does not introduce a new Specification family or Project Profi
|
|
|
443
486
|
|
|
444
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.
|
|
445
488
|
|
|
446
|
-
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).
|
|
447
490
|
|
|
448
491
|
## License authority
|
|
449
492
|
|
|
@@ -460,8 +503,8 @@ Read-only inspection and Pilot operations remain read-only and do not create rep
|
|
|
460
503
|
|
|
461
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.
|
|
462
505
|
|
|
463
|
-
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.
|
|
464
507
|
|
|
465
508
|
## Project status
|
|
466
509
|
|
|
467
|
-
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(
|