platformforge 0.2.0__tar.gz → 0.2.2__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.
- {platformforge-0.2.0 → platformforge-0.2.2}/CHANGELOG.md +24 -1
- {platformforge-0.2.0 → platformforge-0.2.2}/PKG-INFO +1 -1
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/audits/FORGE_CONTEXT_FINAL_HOMOLOGATION.md +24 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/economy-parity/VALIDATION-RECEIPT.json +15 -15
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/__init__.py +1 -1
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/_forgecontext.py +133 -47
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/_installkit.py +82 -14
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/install/service.py +8 -2
- {platformforge-0.2.0 → platformforge-0.2.2}/pyproject.toml +1 -1
- {platformforge-0.2.0 → platformforge-0.2.2}/scripts/forge_installkit.py +82 -14
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_contracts.py +1 -1
- {platformforge-0.2.0 → platformforge-0.2.2}/uv.lock +1 -1
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/agents/pf-extractor.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/agents/pf-graph-builder.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/agents/pf-inventory.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/agents/pf-judge.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/agents/pf-reconciler.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/agents/pf-simulator.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/agents/pf-synthesizer.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/agents/pf-verifier.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/agents/platform-adversarial-critic.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/agents/platform-ai-infra-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/agents/platform-architecture-reviewer.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/agents/platform-aws-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/agents/platform-capacity-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/agents/platform-change-coordinator.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/agents/platform-crossplane-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/agents/platform-debate-referee.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/agents/platform-economy-reviewer.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/agents/platform-evidence-reviewer.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/agents/platform-federation-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/agents/platform-finops-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/agents/platform-fleet-coordinator.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/agents/platform-fleet-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/agents/platform-gitops-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/agents/platform-graph-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/agents/platform-iac-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/agents/platform-incident-coordinator.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/agents/platform-kubernetes-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/agents/platform-operations-safety-reviewer.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/agents/platform-optimization-coordinator.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/agents/platform-orchestrator.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/agents/platform-planner.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/agents/platform-policy-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/agents/platform-privacy-reviewer.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/agents/platform-product-coordinator.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/agents/platform-product-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/agents/platform-release-guardian.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/agents/platform-security-reviewer.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/agents/platform-security-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/agents/platform-sre-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/agents/platform-task-spec-reviewer.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/agents/platform-verifier.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/skills/platformforge-agents/SKILL.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/skills/platformforge-change/SKILL.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/skills/platformforge-core/SKILL.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/skills/platformforge-economy/SKILL.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/skills/platformforge-finops/SKILL.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/skills/platformforge-fleet/SKILL.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/skills/platformforge-governance/SKILL.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/skills/platformforge-graph/SKILL.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/skills/platformforge-lab/SKILL.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/skills/platformforge-sdd/SKILL.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/skills/platformforge-security/SKILL.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.agents/skills/platformforge-sre/SKILL.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.claude/agents/pf-extractor.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.claude/agents/pf-graph-builder.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.claude/agents/pf-inventory.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.claude/agents/pf-judge.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.claude/agents/pf-reconciler.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.claude/agents/pf-simulator.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.claude/agents/pf-synthesizer.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.claude/agents/pf-verifier.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.claude/agents/platform-adversarial-critic.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.claude/agents/platform-ai-infra-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.claude/agents/platform-architecture-reviewer.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.claude/agents/platform-aws-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.claude/agents/platform-capacity-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.claude/agents/platform-change-coordinator.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.claude/agents/platform-crossplane-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.claude/agents/platform-debate-referee.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.claude/agents/platform-economy-reviewer.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.claude/agents/platform-evidence-reviewer.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.claude/agents/platform-federation-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.claude/agents/platform-finops-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.claude/agents/platform-fleet-coordinator.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.claude/agents/platform-fleet-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.claude/agents/platform-gitops-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.claude/agents/platform-graph-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.claude/agents/platform-iac-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.claude/agents/platform-incident-coordinator.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.claude/agents/platform-kubernetes-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.claude/agents/platform-operations-safety-reviewer.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.claude/agents/platform-optimization-coordinator.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.claude/agents/platform-orchestrator.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.claude/agents/platform-planner.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.claude/agents/platform-policy-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.claude/agents/platform-privacy-reviewer.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.claude/agents/platform-product-coordinator.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.claude/agents/platform-product-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.claude/agents/platform-release-guardian.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.claude/agents/platform-security-reviewer.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.claude/agents/platform-security-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.claude/agents/platform-sre-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.claude/agents/platform-task-spec-reviewer.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.claude/agents/platform-verifier.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.codex/agents/pf-extractor.toml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.codex/agents/pf-graph-builder.toml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.codex/agents/pf-inventory.toml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.codex/agents/pf-judge.toml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.codex/agents/pf-reconciler.toml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.codex/agents/pf-simulator.toml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.codex/agents/pf-synthesizer.toml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.codex/agents/pf-verifier.toml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.codex/agents/platform-adversarial-critic.toml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.codex/agents/platform-ai-infra-specialist.toml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.codex/agents/platform-architecture-reviewer.toml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.codex/agents/platform-aws-specialist.toml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.codex/agents/platform-capacity-specialist.toml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.codex/agents/platform-change-coordinator.toml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.codex/agents/platform-crossplane-specialist.toml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.codex/agents/platform-debate-referee.toml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.codex/agents/platform-economy-reviewer.toml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.codex/agents/platform-evidence-reviewer.toml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.codex/agents/platform-federation-specialist.toml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.codex/agents/platform-finops-specialist.toml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.codex/agents/platform-fleet-coordinator.toml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.codex/agents/platform-fleet-specialist.toml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.codex/agents/platform-gitops-specialist.toml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.codex/agents/platform-graph-specialist.toml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.codex/agents/platform-iac-specialist.toml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.codex/agents/platform-incident-coordinator.toml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.codex/agents/platform-kubernetes-specialist.toml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.codex/agents/platform-operations-safety-reviewer.toml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.codex/agents/platform-optimization-coordinator.toml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.codex/agents/platform-orchestrator.toml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.codex/agents/platform-planner.toml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.codex/agents/platform-policy-specialist.toml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.codex/agents/platform-privacy-reviewer.toml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.codex/agents/platform-product-coordinator.toml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.codex/agents/platform-product-specialist.toml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.codex/agents/platform-release-guardian.toml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.codex/agents/platform-security-reviewer.toml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.codex/agents/platform-security-specialist.toml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.codex/agents/platform-sre-specialist.toml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.codex/agents/platform-task-spec-reviewer.toml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.codex/agents/platform-verifier.toml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.devin/agents/pf-extractor.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.devin/agents/pf-graph-builder.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.devin/agents/pf-inventory.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.devin/agents/pf-judge.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.devin/agents/pf-reconciler.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.devin/agents/pf-simulator.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.devin/agents/pf-synthesizer.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.devin/agents/pf-verifier.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.devin/agents/platform-adversarial-critic.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.devin/agents/platform-ai-infra-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.devin/agents/platform-architecture-reviewer.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.devin/agents/platform-aws-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.devin/agents/platform-capacity-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.devin/agents/platform-change-coordinator.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.devin/agents/platform-crossplane-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.devin/agents/platform-debate-referee.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.devin/agents/platform-economy-reviewer.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.devin/agents/platform-evidence-reviewer.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.devin/agents/platform-federation-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.devin/agents/platform-finops-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.devin/agents/platform-fleet-coordinator.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.devin/agents/platform-fleet-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.devin/agents/platform-gitops-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.devin/agents/platform-graph-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.devin/agents/platform-iac-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.devin/agents/platform-incident-coordinator.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.devin/agents/platform-kubernetes-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.devin/agents/platform-operations-safety-reviewer.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.devin/agents/platform-optimization-coordinator.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.devin/agents/platform-orchestrator.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.devin/agents/platform-planner.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.devin/agents/platform-policy-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.devin/agents/platform-privacy-reviewer.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.devin/agents/platform-product-coordinator.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.devin/agents/platform-product-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.devin/agents/platform-release-guardian.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.devin/agents/platform-security-reviewer.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.devin/agents/platform-security-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.devin/agents/platform-sre-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.devin/agents/platform-task-spec-reviewer.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.devin/agents/platform-verifier.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.github/CODEOWNERS +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.github/workflows/ci.yml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.github/workflows/publish-pypi.yml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.gitignore +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.platformforge/cases/golden/argo-bad-rollout/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.platformforge/cases/golden/aws-dump/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.platformforge/cases/golden/container-unsigned/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.platformforge/cases/golden/gitops-drift/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.platformforge/cases/golden/k8s-bad-readiness/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.platformforge/cases/golden/k8s-single-replica/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.platformforge/cases/golden/network-policy-missing/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.platformforge/cases/golden/secret-exposure/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.platformforge/cases/golden/slo-burn/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.platformforge/cases/golden/terraform-public-bucket/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.platformforge/cases/holdout/cost-idle-workload/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.platformforge/cases/holdout/crossplane-platform/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.platformforge/cases/holdout/demo-platform/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.platformforge/cases/holdout/k8s-missing-limits/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.platformforge/cases/holdout/secret-prose-mixed/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.platformforge/cases/holdout/terraform-iam-wildcard/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.platformforge/ledgers/false-negatives.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/.platformforge/ledgers/false-positives.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/AGENTIC-OS.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/AGENTS.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/AI-PLATFORM.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/APPROVALS.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/ARCHITECTURE.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/CAPABILITIES.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/CAPACITY.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/CLI-REFERENCE.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/CLOUD.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/CODE_OF_CONDUCT.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/COLLECTORS.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/COMPATIBILITY.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/CONTRIBUTING.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/CREDITS.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/DEPRECATION.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/DOMAIN-MAP.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/ECONOMY.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/ENTERPRISE.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/EVALS.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/EXECUTION.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/FEDERATION.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/FLEET.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/GLOSSARY.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/GOLDEN-PATH-ANALYTICS.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/GOLDEN-PATHS.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/GRAPHFY.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/INCIDENTS.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/KNOWLEDGE.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/LICENSE +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/LIVE.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/MCP.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/MULTI-CLUSTER.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/OBSERVATION-MODEL.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/OPS.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/OPTIMIZATION.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/PLATFORM-ANALYTICS.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/PLATFORM-MEASUREMENT.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/POLICY-INTELLIGENCE.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/QUALITY-PER-TOKEN.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/README.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/README.pt-BR.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/RECONCILIATION.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/RESEARCH.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/ROADMAP.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/ROLLBACK.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/RULES.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/RUNBOOKS.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/RUNTIME-TOPOLOGY.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/SDD.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/SECURITY.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/SOURCES.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/SUPPORT.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/VERIFICATION.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/agents/pf-extractor.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/agents/pf-graph-builder.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/agents/pf-inventory.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/agents/pf-judge.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/agents/pf-reconciler.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/agents/pf-simulator.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/agents/pf-synthesizer.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/agents/pf-verifier.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/agents/platform-adversarial-critic.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/agents/platform-ai-infra-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/agents/platform-architecture-reviewer.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/agents/platform-aws-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/agents/platform-capacity-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/agents/platform-change-coordinator.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/agents/platform-crossplane-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/agents/platform-debate-referee.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/agents/platform-economy-reviewer.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/agents/platform-evidence-reviewer.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/agents/platform-federation-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/agents/platform-finops-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/agents/platform-fleet-coordinator.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/agents/platform-fleet-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/agents/platform-gitops-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/agents/platform-graph-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/agents/platform-iac-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/agents/platform-incident-coordinator.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/agents/platform-kubernetes-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/agents/platform-operations-safety-reviewer.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/agents/platform-optimization-coordinator.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/agents/platform-orchestrator.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/agents/platform-planner.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/agents/platform-policy-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/agents/platform-privacy-reviewer.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/agents/platform-product-coordinator.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/agents/platform-product-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/agents/platform-release-guardian.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/agents/platform-security-reviewer.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/agents/platform-security-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/agents/platform-sre-specialist.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/agents/platform-task-spec-reviewer.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/agents/platform-verifier.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/config.example.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/contracts/agent-handoff.schema.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/contracts/agent-run.schema.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/contracts/agent-spec.schema.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/contracts/capability.schema.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/contracts/change-event.schema.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/contracts/change-intent.schema.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/contracts/change-plan.schema.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/contracts/collector-receipt.schema.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/contracts/context-pack.schema.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/contracts/debate.schema.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/contracts/distribution-manifest-v1.schema.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/contracts/drift-event.schema.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/contracts/fact.schema.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/contracts/finding.schema.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/contracts/graph-v2.schema.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/contracts/graph.schema.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/contracts/install-receipt-v1.schema.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/contracts/observation.schema.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/contracts/receipt.schema.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/contracts/recommendation.schema.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/contracts/refusal.schema.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/contracts/slo-contract.schema.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/contracts/task-spec.schema.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/contracts/workspace-manifest-v1.schema.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/CLI-SURFACE.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/INDEX.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/README.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0001-deterministic-core-first.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0002-graphfy-as-spine.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0003-economy-by-architecture.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0004-planned-provenance.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0005-context-redaction.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0006-rule-provenance.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0007-version-unresolved-semantics.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0008-quality-per-token.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0009-cloud-common-model.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0010-golden-path-model.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0011-observation-model.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0012-collector-boundary.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0013-absence-semantics.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0014-freshness-coverage.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0015-temporal-graphfy.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0016-identity-resolution.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0017-reconciliation-classes.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0018-runtime-edge-semantics.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0019-credential-boundary.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0020-provider-call-economy.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0021-no-arbitrary-shell.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0022-source-of-truth-first.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0023-autonomy-levels.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0024-risk-classes.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0025-approval-hash-binding.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0026-operation-state-machine.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0027-execution-adapter-boundary.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0028-verification-not-command-success.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0029-rollback-semantics.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0030-policy-precedence.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0031-fleet-canonical-model.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0032-org-graphfy-layers.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0033-history-boundaries.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0034-deterministic-baseline-first.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0035-platform-metric-provenance.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0036-optimization-changeintent.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0037-federation-no-credentials.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0038-no-individual-scoring.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0039-ai-platform-boundary.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0040-pluggable-analytics-storage.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0041-canonical-agent-roster.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0042-agents-vs-engines.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0043-coordinator-dispatch-boundary.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0044-verifier-independence.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0045-agent-budget-model.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0046-agent-context-economy.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0047-debate-referee-contract.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0048-host-mirror-generation.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0049-zero-subagent-fallback.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0050-agent-operation-boundary.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0051-fleet-scale-context-policy.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0052-architecture-freeze-policy.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0053-economy-control-plane.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0054-multilayer-cache-invalidation.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0055-context-gateway-as-the-single-context-entry-point.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0056-budgetenvelope-dimensions-and-hard-soft-limits.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0057-checkpoint-and-resume-carry-spend.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0058-observed-vs-estimated-accounting.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0059-declared-provider-pricing.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0060-selective-verification,-not-test-skipping.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0061-agent-fanout-economy.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0062-champion-challenger-routing.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/adr/0063-fleet-context-boundary.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/agents/AGENT_ARCHITECTURE.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/agents/AGENT_OUTPUT_CONTRACT.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/agents/AGENT_PROTOCOL.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/agents/AGENT_RISK_MATRIX.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/agents/AGENT_SKILL_MATRIX.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/agents/AGENT_TOOL_MATRIX.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/agents/DEBATE.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/agents/ECONOMY.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/agents/HOST_PARITY.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/agents/ROUTING.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/agents/VERIFICATION.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/assets/logo.png +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/audits/FORGE_CONTEXT_BASELINE.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/cycle2/ARCHITECTURAL-REVIEW.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/cycle2/FINAL-ECONOMY.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/cycle2/FINAL-MATRIX.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/cycle2/FINAL-QUALITY.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/cycle2/FINAL-REPORT.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/cycle2/FINAL-SECURITY.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/cycle2/NORTH-STAR.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/cycle2.1/BASELINE.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/cycle2.1/CI-VALIDATION.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/cycle2.1/FINAL-MATRIX.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/cycle2.1/VALIDATION-RECEIPT.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/cycle3/BASELINE.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/cycle3/FINAL-REPORT.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/cycle3/PROPOSAL.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/cycle3/RESEARCH-LEDGER.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/cycle4/BASELINE.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/cycle4/FINAL-REPORT.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/cycle4/RESEARCH-LEDGER.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/cycle4.1/BASELINE.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/cycle4.1/FINAL-MATRIX.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/cycle4.1/FINAL-REPORT.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/cycle4.1/VALIDATION-RECEIPT.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/cycle5/BASELINE.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/cycle5/ECONOMY-REPORT.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/cycle5/ENTERPRISE-REVIEW.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/cycle5/FINAL-MATRIX.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/cycle5/FINAL-REPORT.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/cycle5/OPTIMIZATION-REPORT.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/cycle5/RESEARCH-LEDGER.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/cycle5/SCALE-BENCHMARKS.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/cycle5/SECURITY-PRIVACY-REVIEW.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/cycle5/VALIDATION-RECEIPT.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/cycle5.1/AGENT-BENCHMARKS.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/cycle5.1/AGENT-MATRIX.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/cycle5.1/AGENTIC-RUNTIME-REPORT.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/cycle5.1/BASELINE.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/cycle5.1/FINAL-MATRIX.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/cycle5.1/FINAL-REPORT.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/cycle5.1/FREEZE-REVIEW.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/cycle5.1/SCALE-BENCHMARKS.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/cycle5.1/SOAK-REPORT.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/cycle5.1/VALIDATION-RECEIPT.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/discovery/forge-audit.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/economy/AGENTIC-ECONOMY.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/economy/ARCHITECTURE.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/economy/BUDGETS.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/economy/CACHE.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/economy/CHECKPOINT-RESUME.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/economy/CONTEXT-GATEWAY.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/economy/PRICING.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/economy/RECONCILIATION.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/economy/ROUTING.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/economy/VERIFICATION-ECONOMY.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/economy-parity/AGENTIC-ECONOMY-REPORT.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/economy-parity/BASELINE.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/economy-parity/BENCHMARKS.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/economy-parity/CACHE-REPORT.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/economy-parity/ECONOMY-BENCHMARKS.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/economy-parity/FINAL-MATRIX.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/economy-parity/FINAL-REPORT.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/economy-parity/GAP-MATRIX.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/economy-parity/POLISH-BASELINE.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/economy.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/engineering-excellence/fitness-and-gates.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/evals-taxonomy.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/experience/accessibility.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/experience/automation-mode.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/experience/fase4-report.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/experience/installation-wizard.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/experience/interactive-cli.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/experience/themes.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/freeze/AGENTIC-RECEIPT.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/freeze/ARCHITECTURE-FREEZE-REVIEW.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/freeze/DOGFOOD.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/freeze/FINAL-MATRIX.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/freeze/FINAL-REPORT.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/freeze/FREEZE-MANIFEST.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/freeze/KNOWLEDGE-REVIEW.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/freeze/LICENSE-INVENTORY.txt +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/freeze/LIFECYCLE.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/freeze/PERFORMANCE-BASELINE.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/freeze/PERFORMANCE-RECEIPT.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/freeze/README.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/freeze/REAL-WORLD-ISSUES.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/freeze/RELEASE-HARDENING.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/freeze/SBOM.cdx.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/freeze/SECURITY-REVIEW.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/freeze/SOAK-RECEIPT.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/freeze/UNFREEZE-RFC.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/freeze/VALIDATION-RECEIPT.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/freeze/dogfood/api-collect.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/freeze/dogfood/api-inspect.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/freeze/dogfood/context-audit.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/freeze/dogfood/route-audit.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/freeze/dogfood/self-analyze-iac.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/freeze/dogfood/self-analyze-k8s.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/freeze/dogfood/self-analyze-secrets.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/freeze/dogfood/self-collect.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/freeze/dogfood/self-graph.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/freeze/dogfood/self-inspect.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/freeze/dogfood/spark-collect.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/freeze/dogfood/spark-inspect.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/freeze/exceptions/FE-000-template.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/freeze/exceptions/FE-001.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/freeze/exceptions/FE-002.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/freeze/exceptions/FE-003.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/freeze/exceptions/FE-004.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/freeze/rfc/RFC-ECONOMY-UNFREEZE.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/freeze/rfc/RFC-PORTABLE-DISTRIBUTION.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/freeze/snapshots/agents.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/freeze/snapshots/capabilities.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/freeze/snapshots/cli.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/freeze/snapshots/knowledge.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/freeze/snapshots/mcp.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/freeze/snapshots/schemas.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/install/DISTRIBUTION_PARITY.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/installation/account-installation.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/installation/claude-code.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/installation/codex-cli.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/installation/copilot-cli.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/installation/devin-cli.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/installation/global-installation.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/installation/mcp.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/installation/portable-installation.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/installation/quickstart.en.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/installation/quickstart.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/installation/troubleshooting.en.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/installation/troubleshooting.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/installation/uninstall.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/installation/update-and-repair.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/installation/workspace-installation.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/knowledge-program/broken-link-report.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/knowledge-program/classification-report.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/knowledge-program/command-drift-report.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/knowledge-program/context-map.jsonl +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/knowledge-program/documentation-quality-report.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/knowledge-program/duplicate-content-report.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/knowledge-program/final-report.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/knowledge-program/inventory.jsonl +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/knowledge-program/obsolete-document-report.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/knowledge-program/pipeline.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/knowledge-program/semantic-review-ledger.jsonl +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/knowledge-program/tutorial-coverage-report.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/learn/README.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/learn/recipes/cicd.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/learn/recipes/custos.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/learn/recipes/graph-deps.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/learn/recipes/graph-studio.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/learn/recipes/hosts.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/learn/recipes/impacto-blast.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/learn/recipes/inspect-repo.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/learn/recipes/judge-policy.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/learn/recipes/kubernetes.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/learn/recipes/seguranca.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/learn/recipes/sre.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/learn/recipes/terraform.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/learn/recipes/usar-agents.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/learn/recipes/usar-skills.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/learn/recipes/verificar-mcp.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/portable/ARCHITECTURE.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/portable/FINAL-MATRIX.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/portable/FINAL-REPORT.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/portable/INSTALL.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/portable/OFFLINE.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/portable/WORKSPACES.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/reference/agents.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/reference/command-rationale.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/reference/commands.generated.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/reference/commands.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/reference/divergence.generated.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/reference/skills.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/releasing/pypi-patch-plan.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/reports/experience-3.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/docs/tutorials/first-run.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/agent-budget-exhaustion/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/agent-conflicting-specialists/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/agent-fleet-optimization/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/agent-host-no-subagents/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/agent-incident-multi/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/agent-missing-evidence/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/agent-multi-domain-audit/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/agent-production-change/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/agent-security-mandatory/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/agent-simple-iac/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/approval-integrity-seal/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/capacity-hot/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/capacity-hot/fixture/capacity.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/catalog-noowner/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/catalog-noowner/fixture/catalog-info.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/contract-fact/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/contract-fact/fixture/doc.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/cosign-unverified/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/cosign-unverified/fixture/sig.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/expected-delta-refusal/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/finops-noattr/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/finops-noattr/fixture/costs.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/fleet-inv-absent-allocation-unknown/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/fleet-inv-centrality-not-criticality/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/fleet-inv-correlation-not-causality/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/fleet-inv-dx-no-person-metrics/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/fleet-inv-federation-restricted-denied/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/fleet-inv-federation-secret-denied/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/fleet-inv-history-window-deterministic/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/fleet-inv-low-util-not-deletable/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/fleet-inv-member-key-deterministic/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/fleet-inv-missing-denominator/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/fleet-inv-partial-coverage-visible/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/fleet-inv-plan-changeintent-only/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/fleet-inv-report-all-cited/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/fleet-inv-small-sample-confidence/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/fleet-inv-uncertain-optimization-suppressed/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/gha-dangerous/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/gha-dangerous/fixture/.github/workflows/ci.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/gitops-v2/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/gitops-v2/fixture/argo.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/graph-k8s-blast/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/graph-k8s-blast/fixture/deploy.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/iac-module-nopin/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/iac-module-nopin/fixture/main.tf +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/iac-plan-replace/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/iac-plan-replace/fixture/plan.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/iac-sg-open/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/iac-sg-open/fixture/main.tf +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/iam-oidc/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/iam-oidc/fixture/policy.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/iam-wildcard-positive/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/iam-wildcard-positive/fixture/policy.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/k8s-bad-actor/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/k8s-bad-actor/fixture/app.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/k8s-beta-api/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/k8s-beta-api/fixture/cr.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/k8s-dep-api-boundary/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/k8s-dep-api-boundary/fixture/app.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/k8s-dep-api-clean/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/k8s-dep-api-clean/fixture/app.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/k8s-dep-api-unknown/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/k8s-dep-api-unknown/fixture/app.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/k8s-dep-api-v120/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/k8s-dep-api-v120/fixture/app.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/k8s-dep-api-v129/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/k8s-dep-api-v129/fixture/app.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/k8s-hpa-noreq/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/k8s-hpa-noreq/fixture/app.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/k8s-limits-boundary/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/k8s-limits-boundary/fixture/app.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/k8s-limits-negative/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/k8s-limits-negative/fixture/deploy.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/k8s-limits-positive/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/k8s-limits-positive/fixture/deploy.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/k8s-nopdb/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/k8s-nopdb/fixture/app.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/knowledge-registry/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/kyverno-dep/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/kyverno-dep/fixture/pol.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/kyverno-legacy/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/kyverno-legacy/fixture/pol.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/live-aws-collect/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/live-aws-collect/fixture/aws/ec2_describe-vpcs.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/live-aws-collect/fixture/aws/iam_list-users.denied.txt +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/live-aws-collect/fixture/aws/sts_get-caller-identity.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/live-drift/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/live-drift/fixture/after.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/live-drift/fixture/before.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/live-incident/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/live-incident/fixture/changes.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/live-incident/fixture/incident.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/live-k8s-collect/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/live-k8s-collect/fixture/kubectl/get_configmaps.denied.txt +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/live-k8s-collect/fixture/kubectl/get_deployments.apps.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/live-k8s-collect/fixture/kubectl/get_pods.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/live-k8s-collect/fixture/kubectl/get_secrets.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/live-multicluster/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/live-multicluster/fixture/clusters.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/live-plan/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/live-plan/fixture/drift.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/live-reconcile/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/live-reconcile/fixture/desired.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/live-reconcile/fixture/observed.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/live-secrets-boundary/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/live-secrets-boundary/fixture/envelope.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/live-temporal-graph/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/live-temporal-graph/fixture/graph.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/ops-approval/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/ops-convergence/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/ops-execution-safety/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/ops-intent/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/ops-planning/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/ops-policy/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/ops-rollback/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/ops-verification/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/rollback-argocd-revision/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/rollback-blind-inverse/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/rollback-git-commit/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/rollback-impossible/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/rollback-k8s-annotation-restore/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/rollback-k8s-scale/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/rollback-material-tamper/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/rollback-terraform-replan/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/rollback-unknown/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/routing-specialist/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/rtk-roundtrip/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/rtk-roundtrip/fixture/verbose.txt +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/sbom-vuln/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/sbom-vuln/fixture/sbom.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/secret-prose-mixed/fixture/app.env +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/secret-prose-mixed/fixture/policy-notes.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/secrets-noleak/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/secrets-noleak/fixture/app.env +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/slo-fastburn/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/slo-fastburn/fixture/events.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/slo-fastburn/fixture/slo.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/slo-noinput/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/slo-noinput/fixture/events.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/slo-noinput/fixture/slo.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/sot-conflict/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/token-budget/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/token-budget/fixture/big.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/xr-delete/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/xr-delete/fixture/xr.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/xr-graph-chain/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/xr-graph-chain/fixture/xrd.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/xr-negative-crd/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/xr-negative-crd/fixture/widget.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/xr-upbound-mr/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/cases/xr-upbound-mr/fixture/bucket.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/qpt-bench/change-review/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/qpt-bench/change-review/fixture/plan.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/qpt-bench/gha-security/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/qpt-bench/gha-security/fixture/ci.yml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/qpt-bench/iam-investigate/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/qpt-bench/iam-investigate/fixture/policy.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/qpt-bench/incident-analysis/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/qpt-bench/incident-analysis/fixture/query.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/qpt-bench/incident-analysis/fixture/rules.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/qpt-bench/k8s-review/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/qpt-bench/k8s-review/fixture/deploy.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/qpt-bench/tf-security/case.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/evals/qpt-bench/tf-security/fixture/main.tf +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/factory/specs/archive/2026/cyc9-07-scenarios-platform.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/forge.agentic.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/forge.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/install.ps1 +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/install.sh +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/install.windows.sh +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/knowledge/aws/eks.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/knowledge/aws/iam.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/knowledge/aws/network-exposure.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/knowledge/aws/organizations.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/knowledge/crossplane/composition-providers.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/knowledge/crossplane/managed-resources.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/knowledge/crossplane/v1-v2.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/knowledge/kubernetes/api-deprecations.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/knowledge/kubernetes/autoscaling-rbac.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/knowledge/kubernetes/gateway-api.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/knowledge/kubernetes/pod-security.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/knowledge/sources.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/knowledge/terraform/lifecycle.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/knowledge/terraform/plan-semantics.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/chaos-pod-kill/chaos.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/chaos-pod-kill/facts.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/fleets/acme/capacity.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/fleets/acme/costs.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/fleets/acme/events.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/fleets/acme/fleet.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/fleets/acme/graph.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/fleets/acme/policies.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/fleets/acme/requests.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/argo-bad-rollout/expected.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/argo-bad-rollout/fixture/app.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/aws-dump/expected.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/aws-dump/fixture/compute.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/aws-dump/fixture/iam.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/aws-dump/fixture/network.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/aws-dump/fixture/org.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/aws-dump/fixture/storage.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/container-unsigned/expected.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/container-unsigned/fixture/supply.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/cost-idle-workload/expected.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/cost-idle-workload/fixture/costs.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/crossplane-platform/expected.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/crossplane-platform/fixture/negative.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/crossplane-platform/fixture/xrd.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/demo-platform/expected.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/demo-platform/fixture/.github/workflows/ci.yml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/demo-platform/fixture/deploy.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/demo-platform/fixture/infra.tf +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/fleet-ai/expected.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/fleet-capacity/expected.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/fleet-cost/expected.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/fleet-federation/expected.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/fleet-golden-path/expected.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/fleet-op-hotspot/expected.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/fleet-ownership/expected.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/fleet-partial/expected.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/fleet-policy-friction/expected.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/fleet-recurring-incident/expected.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/fleet-report/expected.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/fleet-risk/expected.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/gitops-drift/expected.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/gitops-drift/fixture/app.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/k8s-bad-readiness/expected.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/k8s-bad-readiness/fixture/deploy.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/k8s-bad-readiness/fixture/netpol.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/k8s-missing-limits/expected.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/k8s-missing-limits/fixture/deploy.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/k8s-missing-limits/fixture/netpol.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/k8s-single-replica/expected.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/k8s-single-replica/fixture/deploy.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/k8s-single-replica/fixture/netpol.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/live-aws-collect/expected.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/live-aws-collect/fixture/aws/ec2_describe-vpcs.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/live-aws-collect/fixture/aws/iam_list-users.denied.txt +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/live-aws-collect/fixture/aws/sts_get-caller-identity.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/live-k8s-collect/expected.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/live-k8s-collect/fixture/kubectl/get_configmaps.denied.txt +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/live-k8s-collect/fixture/kubectl/get_deployments.apps.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/live-k8s-collect/fixture/kubectl/get_pods.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/live-k8s-collect/fixture/kubectl/get_secrets.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/live-kind/expected.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/live-kind/fixture/kubectl/get_configmaps.denied.txt +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/live-kind/fixture/kubectl/get_deployments.apps.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/live-kind/fixture/kubectl/get_pods.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/live-kind/fixture/kubectl/get_secrets.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/network-policy-missing/expected.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/network-policy-missing/fixture/deploy.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/ops-bad-rollout/expected.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/ops-bad-rollout/fixture/ops.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/ops-break-glass/expected.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/ops-break-glass/fixture/ops.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/ops-broken-selector/expected.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/ops-broken-selector/fixture/ops.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/ops-changed-plan-hash/expected.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/ops-changed-plan-hash/fixture/ops.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/ops-conflicting-operation/expected.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/ops-conflicting-operation/fixture/ops.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/ops-expired-approval/expected.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/ops-expired-approval/fixture/ops.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/ops-partial-failure/expected.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/ops-partial-failure/fixture/ops.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/ops-policy-denial/expected.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/ops-policy-denial/fixture/ops.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/ops-replica-drift/expected.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/ops-replica-drift/fixture/ops.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/ops-rollback-annotate/expected.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/ops-rollback-annotate/fixture/ops.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/ops-rollback-gitops/expected.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/ops-rollback-gitops/fixture/ops.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/ops-rollback-impossible/expected.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/ops-rollback-impossible/fixture/ops.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/ops-rollback-scale/expected.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/ops-rollback-scale/fixture/ops.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/ops-rollback-terraform/expected.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/ops-rollback-terraform/fixture/ops.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/ops-rollback-terraform/fixture/tf/tfplan.bin +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/ops-stale-observation/expected.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/ops-stale-observation/fixture/ops.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/secret-exposure/expected.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/secret-exposure/fixture/app.env +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/slo-burn/expected.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/slo-burn/fixture/events.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/slo-burn/fixture/slo.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/terraform-iam-wildcard/expected.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/terraform-iam-wildcard/fixture/policy.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/terraform-public-bucket/expected.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/lab/scenarios/terraform-public-bucket/fixture/main.tf +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/__main__.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/_forge_portal.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/_graphstudio.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/_graphview.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/_portal_telemetry.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/agents/__init__.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/agents/bench.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/agents/contextpack.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/agents/contracts.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/agents/coordinators.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/agents/critic.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/agents/debate.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/agents/executors.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/agents/guardian.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/agents/mirrors.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/agents/orchestrator.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/agents/planner.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/agents/playbook.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/agents/referee.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/agents/reviewers.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/agents/roster.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/agents/runledger.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/agents/runstore.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/agents/specialists.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/agents/taskspec.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/agents/uniqueness.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/agents/verifier.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/aiplat/__init__.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/aiplat/models.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/analytics/__init__.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/analytics/capacity.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/analytics/debt.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/analytics/dx.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/analytics/finops_v4.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/analytics/goldenpath.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/analytics/history.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/analytics/measurement.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/analytics/models.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/analytics/opsanalytics.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/analytics/policyintel.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/analytics/reliability.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/analytics/soak.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/analytics/store.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/bench.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/cases/__init__.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/cases/casefile.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/cases/context_audit.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/cases/ledgers.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/cases/replay.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/cases/routing_audit.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/caveman/__init__.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/caveman/compress.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/cicd/__init__.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/cicd/backstage.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/cicd/dockerfile.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/cicd/github_actions.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/cicd/gitlab_ci.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/cicd/gitops.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/cli/__init__.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/cli/fleetcmd.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/cli/main.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/cloud/__init__.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/cloud/aws.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/cloud/common.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/cloud/multicloud.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/collect/__init__.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/collect/detect.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/context/__init__.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/context/capsule.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/context/gateway.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/context/refs.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/context/sufficiency.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/core/__init__.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/core/hashing.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/core/ownership.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/core/receipts.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/core/redaction.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/core/store.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/core/workspace.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/data/portable_skills/platformforge-agents/SKILL.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/data/portable_skills/platformforge-change/SKILL.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/data/portable_skills/platformforge-core/SKILL.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/data/portable_skills/platformforge-economy/SKILL.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/data/portable_skills/platformforge-finops/SKILL.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/data/portable_skills/platformforge-fleet/SKILL.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/data/portable_skills/platformforge-governance/SKILL.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/data/portable_skills/platformforge-graph/SKILL.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/data/portable_skills/platformforge-lab/SKILL.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/data/portable_skills/platformforge-sdd/SKILL.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/data/portable_skills/platformforge-security/SKILL.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/data/portable_skills/platformforge-sre/SKILL.md +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/diagnose/__init__.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/discovery.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/discovery_ops.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/distribution/__init__.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/distribution/bundle.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/distribution/hostflow.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/distribution/models.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/distribution/service.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/economy/__init__.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/economy/bench.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/economy/budget.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/economy/cache.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/economy/checkpoint.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/economy/collection.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/economy/doctor.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/economy/engine.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/economy/envelope.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/economy/fleetpack.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/economy/ledger.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/economy/plan.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/economy/pricing.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/economy/qpt.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/economy/reconcile.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/economy/verifyplan.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/economy/waste.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/evals/__init__.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/evals/coverage.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/evals/fleet_invariants.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/evals/ops_invariants.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/evals/runner.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/evals/surface.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/evals/taxonomy.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/federation/__init__.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/federation/node.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/finops/__init__.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/finops/alloc.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/finops/costs.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/finops/focus.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/finops/graph_cost.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/finops/ingest.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/finops/insights.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/finops/unit.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/fleet/__init__.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/fleet/loader.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/fleet/models.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/fleet/orggraph.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/fleet/query.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/forge/__init__.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/forge/collect.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/forge/delegate.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/forge/manifest.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/freeze/__init__.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/freeze/exceptions.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/freeze/manifest.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/freeze/snapshots.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/graph/__init__.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/graph/backend.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/graph/bench.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/graph/build.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/graph/delivery.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/graph/diff.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/graph/events.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/graph/migrate.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/graph/model.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/graph/persist.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/graph/query.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/graph/temporal.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/graph/vocab.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/graphview.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/iac/__init__.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/iac/drift.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/iac/plan.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/iac/terraform.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/install/__init__.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/k8s/__init__.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/k8s/helm.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/k8s/hubble.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/k8s/manifests.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/knowledge/__init__.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/knowledge/packs.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/knowledge/registry.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/knowledge/select.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/lab/__init__.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/lab/chaos.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/lab/fleetlab.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/lab/opslab.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/lab/runner.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/live/__init__.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/live/budget.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/live/capability.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/live/collectors/__init__.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/live/collectors/aws.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/live/collectors/aws_transport.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/live/collectors/k8s.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/live/collectors/k8s_transport.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/live/cursors.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/live/drift.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/live/envelope.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/live/federation.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/live/fixtures.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/live/identity.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/live/incident.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/live/models.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/live/reconcile.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/live/remediate.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/live/store.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/live/topology.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/mcp/__init__.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/mcp/parity.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/mcp/registry.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/mcp/server.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/mcp/tools.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/models/__init__.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/models/base.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/observe/__init__.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/observe/capacity.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/observe/dr.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/observe/grafana.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/observe/incident.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/observe/otel.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/observe/postmortem.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/observe/prometheus.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/observe/slo.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/ops/__init__.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/ops/actions.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/ops/analytics.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/ops/approval.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/ops/autorem.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/ops/config.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/ops/engine.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/ops/envelope.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/ops/executors/__init__.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/ops/executors/base.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/ops/executors/git.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/ops/executors/gitops.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/ops/executors/terraform.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/ops/gates.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/ops/goldenpath.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/ops/material.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/ops/models.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/ops/operation.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/ops/opgraph.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/ops/policy.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/ops/preconditions.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/ops/registry.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/ops/risk.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/ops/rollback.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/ops/rollback_builders.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/ops/runbook.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/ops/simulate.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/ops/source_of_truth.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/ops/store.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/ops/verify.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/optimize/__init__.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/optimize/engine.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/optimize/models.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/optimize/scan.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/plan/__init__.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/portable_cli.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/portal_adapter.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/product/__init__.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/product/backstage.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/product/catalog.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/product/crossplane.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/product/golden_paths/__init__.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/product/golden_paths/engine.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/product/golden_paths/library.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/product/golden_paths/model.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/product/maturity.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/product/scorecards.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/resources.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/risk/__init__.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/risk/engine.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/risk/signals.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/routing/__init__.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/routing/decision.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/routing/router.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/rtk/__init__.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/rtk/compact.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/rtk/parsers.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/rules/__init__.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/rules/engine.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/sandbox/__init__.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/sandbox/env.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/sandbox/review.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/sdd/__init__.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/sdd/lifecycle.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/security/__init__.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/security/cosign.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/security/iam.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/security/identity.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/security/kyverno.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/security/sbom.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/security/scan.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/security/slsa.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/security/supply.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/tokensave/__init__.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/tokensave/budget.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/tokensave/estimate.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/tokensave/index.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/tokensave/ledger.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/tokensave/packs.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/ui/__init__.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/ui/app.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/ui/home.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/ui/i18n.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/ui/kit.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/ui/screen.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/ui/tui.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/ui/wizard.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/workspace/__init__.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/workspace/models.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/platformforge/workspace/service.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/portal/assets/chunk-6_bITucK.js +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/portal/assets/chunk-B5AB8czV.js +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/portal/assets/chunk-BJbNCJrv.js +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/portal/assets/chunk-BWjIRvH1.js +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/portal/assets/chunk-BXk7RxGM.js +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/portal/assets/chunk-BYYLUO5t.js +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/portal/assets/chunk-BYc3t4cg.js +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/portal/assets/chunk-BglFR9Wn.js +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/portal/assets/chunk-Bj5_93Ey.js +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/portal/assets/chunk-Bkokxnl9.js +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/portal/assets/chunk-BnZq9uBz.js +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/portal/assets/chunk-BpIbIo4H.js +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/portal/assets/chunk-C-R9EDEw.js +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/portal/assets/chunk-C0nXO1-7.js +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/portal/assets/chunk-C1jICkBx.js +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/portal/assets/chunk-C2Vik-mF.js +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/portal/assets/chunk-C6ri1BES.js +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/portal/assets/chunk-C8bgMzTS.js +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/portal/assets/chunk-CV7TSqiz.js +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/portal/assets/chunk-CWCQmMmw.js +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/portal/assets/chunk-CZreZLNQ.js +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/portal/assets/chunk-CaHx1phd.js +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/portal/assets/chunk-Cp1ysZIS.js +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/portal/assets/chunk-CzfElE0B.js +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/portal/assets/chunk-D-7Jr8A3.js +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/portal/assets/chunk-D-GKcz1x.js +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/portal/assets/chunk-D0sdF23X.js +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/portal/assets/chunk-D4e-ThVc.js +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/portal/assets/chunk-DAuZ25Se.js +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/portal/assets/chunk-DNdMiBOi.js +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/portal/assets/chunk-Df-i8acd.js +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/portal/assets/chunk-DiTrvQme.js +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/portal/assets/chunk-DuZy_X7l.js +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/portal/assets/chunk-E37BkvkU.js +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/portal/assets/chunk-RSTfWegd.js +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/portal/assets/chunk-SeIyT7eK.js +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/portal/assets/chunk-Wd_5yY1t.js +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/portal/assets/chunk-mfSjBx6W.js +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/portal/assets/chunk-tc9WQav2.js +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/portal/assets/chunk-vIImL6Fw.js +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/portal/assets/chunk-yM6DMc_W.js +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/portal/assets/chunk-yaTNqnhj.js +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/portal/assets/favicon.ico +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/portal/assets/index.html +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/portal/assets/main-YKFPUKID.js +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/portal/assets/styles-B6ZRGG3C.css +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/portal/manifest.json +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/rules/catalog/finops.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/rules/catalog/gitops.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/rules/catalog/iac.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/rules/catalog/k8s.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/rules/catalog/orchestration.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/rules/catalog/product.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/rules/catalog/routing.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/rules/catalog/security.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/rules/catalog/sre.yaml +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/scripts/bench_economy.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/scripts/docs/check_docs.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/scripts/docs/doc_catalogs.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/scripts/docs/doc_index.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/scripts/docs/doc_inventory.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/scripts/docs/doc_manifest.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/scripts/docs/doc_reference.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/scripts/docs/final_report.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/scripts/docs/regen_docs.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/scripts/forge_bootstrap.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/scripts/freeze_perf_receipt.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/scripts/freeze_soak_receipt.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/scripts/freeze_validation_receipt.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/scripts/gen_cli_surface.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/scripts/lab/platformforge_lab.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/scripts/validate.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/setup.ps1 +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/setup.sh +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/__init__.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_agent_adversarial.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_agent_budget.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_agent_debate.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_agent_economy.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_agent_handoffs.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_agent_mirrors.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_agent_protocol.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_agent_routing.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_agents.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_artifact_contents.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_cases.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_cicd.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_cli_ops.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_cloud.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_command_rationale.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_coordinators.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_core.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_crossplane.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_cycle5_analytics.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_cycle5_hardening.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_discovery_ops.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_doc_drift.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_doc_manifest.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_docs_drift.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_economy.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_economy_agents_waste.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_economy_cache.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_economy_closure.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_economy_contracts.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_economy_evals.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_economy_fleet_qpt.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_economy_gateway.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_economy_pricing_verify.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_economy_v2.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_evals_surface.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_executors.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_federation.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_finops.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_fleet.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_fleet_adversarial.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_forge.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_freeze.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_graph.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_graph_v2.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_hardening.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_hosts_flow.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_iac.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_install_lifecycle.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_k8s.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_k8s_depth.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_knowledge_packs.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_lab.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_ledgers.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_live_aws.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_live_capability.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_live_drift.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_live_identity.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_live_incident.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_live_k8s.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_live_remediate.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_live_security_props.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_mcp.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_missing_input_refusals.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_observation.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_observe.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_observe_v2.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_offline.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_ops_adversarial41.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_ops_approval.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_ops_autorem.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_ops_executors.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_ops_gapwave.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_ops_goldenpath.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_ops_hardening.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_ops_models.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_ops_operation.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_ops_opgraph.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_ops_pipeline.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_ops_policy.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_ops_property.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_ops_risk.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_ops_rollback.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_ops_runbook.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_ops_runbook41.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_ops_verify.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_orchestrator.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_portable_distribution.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_portable_workspace.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_portal_adapter.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_product.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_product_v2.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_qpt_v2.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_reconcile.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_redaction.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_reviewers.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_routing_audit.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_sdd.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_security.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_soak.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_specialists.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_surface.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_topology.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_truth.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_ui_resilience.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_ui_tui.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_wave_h.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_wave_k.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_wave_l.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_wave_n.py +0 -0
- {platformforge-0.2.0 → platformforge-0.2.2}/tests/test_wheel_isolation.py +0 -0
|
@@ -1,6 +1,28 @@
|
|
|
1
1
|
# CHANGELOG
|
|
2
2
|
|
|
3
3
|
All notable changes. Format: wave/feature, the "why", key commits.
|
|
4
|
+
## [0.2.2] - 2026-10-29
|
|
5
|
+
|
|
6
|
+
### Fixed
|
|
7
|
+
|
|
8
|
+
- `_forgecontext` v1.3.3 + `_installkit` v1.0.3 (vendored): `repair_context`
|
|
9
|
+
reports malformed capability files per-file instead of crashing;
|
|
10
|
+
context/install locks carry a unique ownership token; poisoned journals
|
|
11
|
+
quarantine instead of wedging later ops; asset/ledger paths are
|
|
12
|
+
validated before disk writes (`FORGE-INSTALL-UNSAFE-PATH`);
|
|
13
|
+
`_atomic_write` preserves file modes.
|
|
14
|
+
- A `BLOCKED` check on the mandatory context-registry component now marks
|
|
15
|
+
the receipt `failed` (nonzero exit) — on install AND on both uninstall
|
|
16
|
+
paths.
|
|
17
|
+
|
|
18
|
+
## [0.2.1] - 2026-10-22
|
|
19
|
+
|
|
20
|
+
### Fixed
|
|
21
|
+
|
|
22
|
+
- `_forgecontext` v1.3.2: non-UTF-8 consumer docs (AGENTS.md / CLAUDE.md /
|
|
23
|
+
AGENT_PROTOCOL.md) now refuse with named `FORGE-CONTEXT-CONFLICT` on
|
|
24
|
+
install and uninstall — never a bare `UnicodeDecodeError` mid-write.
|
|
25
|
+
|
|
4
26
|
## [0.2.0] - 2026-10-22
|
|
5
27
|
|
|
6
28
|
### Added
|
|
@@ -12,7 +34,7 @@ All notable changes. Format: wave/feature, the "why", key commits.
|
|
|
12
34
|
### Fixed
|
|
13
35
|
|
|
14
36
|
- `_txn_restore` journal path validation; interrupt-safe rollback;
|
|
15
|
-
stale-lock `created_at` fallback (Windows); vendored `_installkit` v1.0.
|
|
37
|
+
stale-lock `created_at` fallback (Windows); vendored `_installkit` v1.0.2 +
|
|
16
38
|
`forge_bootstrap` v1.1.1 security backports (userinfo redaction, argv trim,
|
|
17
39
|
empty-stdout smoke).
|
|
18
40
|
|
|
@@ -50,6 +72,7 @@ All notable changes. Format: wave/feature, the "why", key commits.
|
|
|
50
72
|
- Portal vendored 2.1 final (Cycles 0-6)
|
|
51
73
|
|
|
52
74
|
## [Unreleased]
|
|
75
|
+
|
|
53
76
|
## [0.1.6] - 2026-10-21
|
|
54
77
|
|
|
55
78
|
### Changed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: platformforge
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.2
|
|
4
4
|
Summary: Agentic Platform Engineering intelligence platform — deterministic, offline-first, evidence-first
|
|
5
5
|
Project-URL: Homepage, https://github.com/EdgarSocrates98/platform-forge
|
|
6
6
|
Project-URL: Repository, https://github.com/EdgarSocrates98/platform-forge
|
|
@@ -294,3 +294,27 @@ grep register_installation platformforge/install/service.py → (vazio — P0-3
|
|
|
294
294
|
grep -c 'def test_' tests/test_{install_lifecycle,wheel_isolation,
|
|
295
295
|
evals_surface,discovery_ops}.py → 31/1/21/4
|
|
296
296
|
```
|
|
297
|
+
|
|
298
|
+
## Pós-release — evidência de publicação (2026-10-23 UTC)
|
|
299
|
+
|
|
300
|
+
| Item | Estado | Evidência |
|
|
301
|
+
|---|---|---|
|
|
302
|
+
| Tag | CRIADA | `v0.2.0` no merge commit da release PR |
|
|
303
|
+
| GitHub Release | CRIADO | `gh release view v0.2.0` |
|
|
304
|
+
| PyPI | PUBLICADO | `pypi.org/pypi/platformforge/json` → `0.2.0` |
|
|
305
|
+
| Wheel smoke (venv limpo) | PASS | `pip install platformforge==0.2.0` + `platformforge --version` → `0.2.0` |
|
|
306
|
+
|
|
307
|
+
Notas: installkit canônico 1.0.2 (`_SOURCE_SHA256 a15ca78bb34a0109`), bootstrap 1.1.1 — propagados aos 7 carriers; `vendor.py --check` CLEAN ×7. `data-sentinel-forge`: **deferido pelo dono** (outro CLI evoluindo).
|
|
308
|
+
|
|
309
|
+
## Pós-release hotfix — evidência de publicação patch (2026-10-23 UTC)
|
|
310
|
+
|
|
311
|
+
Patch motivado pelo review: `UnicodeDecodeError` não-tipado em docs de
|
|
312
|
+
consumidor não-UTF-8 quebrava install **e** uninstall.
|
|
313
|
+
|
|
314
|
+
| Item | Estado | Evidência |
|
|
315
|
+
|---|---|---|
|
|
316
|
+
| Tag | CRIADA | `v0.2.1` |
|
|
317
|
+
| GitHub Release | CRIADO | `gh release view v0.2.1` |
|
|
318
|
+
| PyPI | PUBLICADO | `pypi.org/pypi/platformforge/json` → `0.2.1` |
|
|
319
|
+
| Wheel smoke | PASS | wheel publicado contém `_forgecontext` v1.3.2 (`_read_doc` presente) — verificado via `pip download platformforge==0.2.1` |
|
|
320
|
+
| Regressão | PASS | teste cp1252 `AGENTS.md` → `FORGE-CONTEXT-CONFLICT` nomeado em install e uninstall |
|
|
@@ -11,42 +11,42 @@
|
|
|
11
11
|
"economy-agentic": {
|
|
12
12
|
"ok": true,
|
|
13
13
|
"reproduce": "pytest -q tests/test_economy_agents_waste.py tests/test_economy_evals.py -k uniqueness or debate or duplication or fanout or waste or stagnant",
|
|
14
|
-
"seconds": 3.
|
|
14
|
+
"seconds": 3.31
|
|
15
15
|
},
|
|
16
16
|
"economy-budget": {
|
|
17
17
|
"ok": true,
|
|
18
18
|
"reproduce": "pytest -q tests/test_economy_contracts.py -k budget or limit or protected or dimension",
|
|
19
|
-
"seconds": 2.
|
|
19
|
+
"seconds": 2.54
|
|
20
20
|
},
|
|
21
21
|
"economy-cache": {
|
|
22
22
|
"ok": true,
|
|
23
23
|
"reproduce": "pytest -q tests/test_economy_cache.py",
|
|
24
|
-
"seconds":
|
|
24
|
+
"seconds": 12.07
|
|
25
25
|
},
|
|
26
26
|
"economy-closure": {
|
|
27
27
|
"ok": true,
|
|
28
28
|
"reproduce": "python -c import sys\nfrom pathlib import Path\nreq = {'docs/economy-parity/FINAL-REPORT.md':\n ['validated_sha', 'remote_ci', 'known gap'],\n 'docs/economy-parity/FINAL-MATRIX.md':\n ['validated', 'externally-unverified'],\n 'docs/economy-parity/ECONOMY-BENCHMARKS.md':\n ['Control Plane Overhead', 'End-to-End'],\n 'docs/economy/ROUTING.md':\n ['decide', 'advisory'],\n 'docs/economy-parity/POLISH-BASELINE.md': ['drift']}\nbad = []\nfor f, needles in req.items():\n p = Path(f)\n if not p.is_file(): bad.append(('missing', f)); continue\n txt = p.read_text()\n for n in needles:\n if n not in txt: bad.append((f, n))\nm = Path('docs/economy-parity/FINAL-MATRIX.md').read_text()\nif '\\n' + '|' in m and ' fully-production' in m:\n bad.append(('matrix', 'overclaimed status'))\nif bad: print(bad); sys.exit(1)\nprint('closure docs coherent')\n && pytest -q tests/test_economy_closure.py",
|
|
29
|
-
"seconds": 3.
|
|
29
|
+
"seconds": 3.49
|
|
30
30
|
},
|
|
31
31
|
"economy-context": {
|
|
32
32
|
"ok": true,
|
|
33
33
|
"reproduce": "pytest -q tests/test_economy_gateway.py -k TestGateway or TestLazy or TestRole or Suff",
|
|
34
|
-
"seconds": 2.
|
|
34
|
+
"seconds": 2.62
|
|
35
35
|
},
|
|
36
36
|
"economy-contracts": {
|
|
37
37
|
"ok": true,
|
|
38
38
|
"reproduce": "pytest -q tests/test_economy_contracts.py tests/test_economy_v2.py",
|
|
39
|
-
"seconds":
|
|
39
|
+
"seconds": 3.92
|
|
40
40
|
},
|
|
41
41
|
"economy-evals": {
|
|
42
42
|
"ok": true,
|
|
43
43
|
"reproduce": "pytest -q tests/test_economy_evals.py",
|
|
44
|
-
"seconds": 3.
|
|
44
|
+
"seconds": 3.17
|
|
45
45
|
},
|
|
46
46
|
"economy-qpt": {
|
|
47
47
|
"ok": true,
|
|
48
48
|
"reproduce": "pytest -q tests/test_qpt_v2.py tests/test_economy_fleet_qpt.py",
|
|
49
|
-
"seconds": 8.
|
|
49
|
+
"seconds": 8.57
|
|
50
50
|
},
|
|
51
51
|
"economy-receipt": {
|
|
52
52
|
"ok": true,
|
|
@@ -56,30 +56,30 @@
|
|
|
56
56
|
"economy-reconcile": {
|
|
57
57
|
"ok": true,
|
|
58
58
|
"reproduce": "pytest -q tests/test_economy_gateway.py tests/test_economy_evals.py -k reconcil or mismatch or unobserved",
|
|
59
|
-
"seconds": 2.
|
|
59
|
+
"seconds": 2.87
|
|
60
60
|
},
|
|
61
61
|
"economy-resume": {
|
|
62
62
|
"ok": true,
|
|
63
63
|
"reproduce": "pytest -q tests/test_economy_gateway.py -k resume or checkpoint",
|
|
64
|
-
"seconds": 2.
|
|
64
|
+
"seconds": 2.62
|
|
65
65
|
},
|
|
66
66
|
"economy-routing": {
|
|
67
67
|
"ok": true,
|
|
68
68
|
"reproduce": "pytest -q tests/test_economy_evals.py -k routing or profile or champion or simple_task",
|
|
69
|
-
"seconds": 2.
|
|
69
|
+
"seconds": 2.95
|
|
70
70
|
},
|
|
71
71
|
"economy-surface": {
|
|
72
72
|
"ok": true,
|
|
73
73
|
"reproduce": "python -c import subprocess, sys\ncmds = [\n ['platformforge','economy','doctor'],\n ['platformforge','economy','checkpoint','--run-id','gate',\n '--spent','{\"tokens\":1}'],\n ['platformforge','economy','resume','--run-id','gate'],\n ['platformforge','economy','reconcile',\n '--planned','{\"tokens\":1}','--observed','{\"tokens\":2}'],\n ['platformforge','economy','explain','--run-id','gate'],\n ['platformforge','cache','stats'],\n ['platformforge','cache','gc'],\n ['platformforge','context','capsule','--task','t',\n '--facts','[{\"fact_id\":\"f\"}]'],\n ['platformforge','context','gc'],\n ['platformforge','routing','explain','--signal','{}'],\n ['platformforge','routing','compare',\n '--champion','{}','--challenger','{}'],\n]\nfor c in cmds:\n r = subprocess.run(c, capture_output=True)\n if r.returncode not in (0, 2):\n print('FAIL', c, r.returncode, r.stderr[-300:])\n sys.exit(1)\nprint('all economy verbs respond')\n",
|
|
74
|
-
"seconds":
|
|
74
|
+
"seconds": 16.02
|
|
75
75
|
},
|
|
76
76
|
"economy-verification": {
|
|
77
77
|
"ok": true,
|
|
78
78
|
"reproduce": "pytest -q tests/test_economy_pricing_verify.py",
|
|
79
|
-
"seconds": 2.
|
|
79
|
+
"seconds": 2.87
|
|
80
80
|
}
|
|
81
81
|
},
|
|
82
|
-
"generated_at": "2026-10-
|
|
82
|
+
"generated_at": "2026-10-23T04:16:58Z",
|
|
83
83
|
"kind": "platformforge/economy-validation-receipt/1",
|
|
84
84
|
"known_gaps": [
|
|
85
85
|
"real provider pricing catalog not bundled (declared-rates engine only, by design)",
|
|
@@ -93,7 +93,7 @@
|
|
|
93
93
|
"remote_ci": "not independently verified",
|
|
94
94
|
"schema": "platformforge/economy-validation-receipt/v1",
|
|
95
95
|
"spec": "prompt_evo_economy.md",
|
|
96
|
-
"validated_sha": "
|
|
96
|
+
"validated_sha": "b3b4558bedfcfd434034af1573c3129128cca12a",
|
|
97
97
|
"validator": "scripts/validate.py",
|
|
98
98
|
"validator_version": "economy-validation-receipt/v1",
|
|
99
99
|
"verdict": "validated"
|
|
@@ -100,6 +100,7 @@ import json
|
|
|
100
100
|
import os
|
|
101
101
|
import re
|
|
102
102
|
import shutil
|
|
103
|
+
import stat
|
|
103
104
|
import sys
|
|
104
105
|
import tempfile
|
|
105
106
|
import time
|
|
@@ -107,10 +108,10 @@ from collections.abc import Iterable, Mapping
|
|
|
107
108
|
from pathlib import Path, PurePosixPath
|
|
108
109
|
from typing import Any
|
|
109
110
|
|
|
110
|
-
_FORGECONTEXT_VERSION = "1.3.
|
|
111
|
+
_FORGECONTEXT_VERSION = "1.3.3"
|
|
111
112
|
# Filled by the vendor step (scripts/installkit/vendor.py) — the sha256 of
|
|
112
113
|
# the canonical source body, so drift checks can compare vendored copies.
|
|
113
|
-
_SOURCE_SHA256 = "
|
|
114
|
+
_SOURCE_SHA256 = "18ebe75c6281a3f5"
|
|
114
115
|
|
|
115
116
|
SCHEMA_MANIFEST = "forge/context/v1"
|
|
116
117
|
SCHEMA_REGISTRY = "forge/context-registry/v1"
|
|
@@ -241,12 +242,17 @@ def _load_json(path: Path, default: Any = None) -> Any:
|
|
|
241
242
|
|
|
242
243
|
def _atomic_write(path: Path, data: bytes) -> None:
|
|
243
244
|
path.parent.mkdir(parents=True, exist_ok=True)
|
|
245
|
+
# mkstemp lands 0600 — preserve an existing file's mode so a managed
|
|
246
|
+
# merge never downgrades the user's permissions.
|
|
247
|
+
mode = stat.S_IMODE(path.stat().st_mode) if path.is_file() else None
|
|
244
248
|
fd, tmp = tempfile.mkstemp(prefix=path.name, dir=str(path.parent))
|
|
245
249
|
try:
|
|
246
250
|
with os.fdopen(fd, "wb") as fh:
|
|
247
251
|
fh.write(data)
|
|
248
252
|
fh.flush()
|
|
249
253
|
os.fsync(fh.fileno())
|
|
254
|
+
if mode is not None:
|
|
255
|
+
os.chmod(tmp, mode)
|
|
250
256
|
os.replace(tmp, path)
|
|
251
257
|
finally:
|
|
252
258
|
if os.path.exists(tmp):
|
|
@@ -269,15 +275,18 @@ def _pid_alive(pid: int) -> bool | None:
|
|
|
269
275
|
|
|
270
276
|
|
|
271
277
|
class _Lock:
|
|
272
|
-
"""O_EXCL lockfile carrying ``{pid, created_at}``. Stale locks —
|
|
273
|
-
holder or older than ``stale_after_s`` — are reclaimed once so an
|
|
274
|
-
interrupted op never bricks the registry.
|
|
278
|
+
"""O_EXCL lockfile carrying ``{pid, created_at, token}``. Stale locks —
|
|
279
|
+
dead holder or older than ``stale_after_s`` — are reclaimed once so an
|
|
280
|
+
interrupted op never bricks the registry. The token guards release:
|
|
281
|
+
a file reclaimed or rewritten by another claimant is never unlinked
|
|
282
|
+
by ``__exit__``."""
|
|
275
283
|
|
|
276
284
|
def __init__(self, lock: Path, stale_after_s: float = 900.0) -> None:
|
|
277
285
|
self._lock = lock
|
|
278
286
|
self._stale = stale_after_s
|
|
279
287
|
self.held = False
|
|
280
288
|
self.recovered = False
|
|
289
|
+
self._token: str | None = None
|
|
281
290
|
|
|
282
291
|
def __enter__(self) -> _Lock:
|
|
283
292
|
try:
|
|
@@ -294,12 +303,30 @@ class _Lock:
|
|
|
294
303
|
E_LOCKED, f"context lock at {self._lock} could not be reclaimed"
|
|
295
304
|
) from exc
|
|
296
305
|
self.recovered = True
|
|
297
|
-
|
|
306
|
+
try:
|
|
307
|
+
self._create()
|
|
308
|
+
except FileExistsError:
|
|
309
|
+
raise LockError(
|
|
310
|
+
E_LOCKED,
|
|
311
|
+
f"context lock at {self._lock} lost to a concurrent reclaimer",
|
|
312
|
+
) from None
|
|
298
313
|
return self
|
|
299
314
|
|
|
300
315
|
def _create(self) -> None:
|
|
316
|
+
self._token = hashlib.sha256(
|
|
317
|
+
f"{os.getpid()}:{time.time_ns()}:{self._lock}".encode()
|
|
318
|
+
).hexdigest()[:24]
|
|
301
319
|
fd = os.open(str(self._lock), os.O_CREAT | os.O_EXCL | os.O_WRONLY)
|
|
302
|
-
os.write(
|
|
320
|
+
os.write(
|
|
321
|
+
fd,
|
|
322
|
+
_json_bytes(
|
|
323
|
+
{
|
|
324
|
+
"pid": os.getpid(),
|
|
325
|
+
"created_at": _utc_now(),
|
|
326
|
+
"token": self._token,
|
|
327
|
+
}
|
|
328
|
+
),
|
|
329
|
+
)
|
|
303
330
|
os.close(fd)
|
|
304
331
|
self.held = True
|
|
305
332
|
|
|
@@ -331,9 +358,16 @@ class _Lock:
|
|
|
331
358
|
return age > self._stale
|
|
332
359
|
|
|
333
360
|
def __exit__(self, *exc: object) -> None:
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
361
|
+
try:
|
|
362
|
+
if self.held:
|
|
363
|
+
# Only release a lock that still carries OUR token — a
|
|
364
|
+
# reclaimed/stolen file belongs to its current claimant.
|
|
365
|
+
doc = _load_json(self._lock)
|
|
366
|
+
if isinstance(doc, dict) and doc.get("token") == self._token:
|
|
367
|
+
with contextlib.suppress(OSError):
|
|
368
|
+
self._lock.unlink()
|
|
369
|
+
finally:
|
|
370
|
+
self.held = False
|
|
337
371
|
|
|
338
372
|
|
|
339
373
|
def acquire_lock(ctx_dir: Path) -> _Lock:
|
|
@@ -1417,7 +1451,23 @@ def _qualified_ids(manifest: Mapping[str, Any]) -> list[str]:
|
|
|
1417
1451
|
def _entry_from_manifest(
|
|
1418
1452
|
manifest: dict[str, Any], cap_sha: str, prev: dict[str, Any] | None, now: str
|
|
1419
1453
|
) -> dict[str, Any]:
|
|
1420
|
-
|
|
1454
|
+
fid = str(manifest.get("forge_id") or "?")
|
|
1455
|
+
inst = manifest.get("installed")
|
|
1456
|
+
if not isinstance(inst, Mapping):
|
|
1457
|
+
raise ContextError(
|
|
1458
|
+
E_SCHEMA,
|
|
1459
|
+
f"{_capability_rel(fid)}: missing required 'installed' — "
|
|
1460
|
+
"repair or remove the capability file",
|
|
1461
|
+
)
|
|
1462
|
+
missing = [
|
|
1463
|
+
k for k in ("forge_id", "name", "version", "state", "recorded_by") if k not in manifest
|
|
1464
|
+
]
|
|
1465
|
+
if missing:
|
|
1466
|
+
raise ContextError(
|
|
1467
|
+
E_SCHEMA,
|
|
1468
|
+
f"{_capability_rel(fid)}: missing required keys {missing} — "
|
|
1469
|
+
"repair or remove the capability file",
|
|
1470
|
+
)
|
|
1421
1471
|
return {
|
|
1422
1472
|
"forge_id": manifest["forge_id"],
|
|
1423
1473
|
"owner": manifest["forge_id"],
|
|
@@ -1535,31 +1585,44 @@ def _recover_journal(ctx: Path, root: Path) -> dict[str, Any] | None:
|
|
|
1535
1585
|
recovered: dict[str, Any] | None = None
|
|
1536
1586
|
now = _utc_now()
|
|
1537
1587
|
if isinstance(journal, dict):
|
|
1538
|
-
|
|
1539
|
-
|
|
1540
|
-
if
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
|
|
1549
|
-
|
|
1550
|
-
|
|
1551
|
-
|
|
1552
|
-
|
|
1553
|
-
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
|
|
1560
|
-
|
|
1561
|
-
|
|
1562
|
-
|
|
1588
|
+
try:
|
|
1589
|
+
op = journal.get("op")
|
|
1590
|
+
if op == "register" and isinstance(journal.get("manifest"), dict):
|
|
1591
|
+
if not validate_manifest(journal["manifest"]):
|
|
1592
|
+
_apply_register(ctx, root, journal["manifest"], now)
|
|
1593
|
+
recovered = {"op": "register", "forge_id": journal["manifest"]["forge_id"]}
|
|
1594
|
+
elif op == "unregister" and isinstance(journal.get("forge_id"), str):
|
|
1595
|
+
_apply_unregister(ctx, root, journal["forge_id"], now)
|
|
1596
|
+
recovered = {"op": "unregister", "forge_id": journal["forge_id"]}
|
|
1597
|
+
elif op == "install" and isinstance(journal.get("manifest"), dict):
|
|
1598
|
+
if not validate_manifest(journal["manifest"]):
|
|
1599
|
+
_apply_register(ctx, root, journal["manifest"], now)
|
|
1600
|
+
if journal.get("docs", True):
|
|
1601
|
+
_docs_install_apply(
|
|
1602
|
+
root, journal["manifest"], tuple(journal.get("legacy_tags") or ())
|
|
1603
|
+
)
|
|
1604
|
+
recovered = {
|
|
1605
|
+
"op": "install",
|
|
1606
|
+
"forge_id": journal["manifest"]["forge_id"],
|
|
1607
|
+
}
|
|
1608
|
+
elif op == "uninstall" and isinstance(journal.get("forge_id"), str):
|
|
1609
|
+
_apply_unregister(ctx, root, journal["forge_id"], now)
|
|
1610
|
+
_docs_uninstall_apply(
|
|
1611
|
+
root, journal["forge_id"], tuple(journal.get("legacy_tags") or ())
|
|
1612
|
+
)
|
|
1613
|
+
recovered = {"op": "uninstall", "forge_id": journal["forge_id"]}
|
|
1614
|
+
except ContextError as exc:
|
|
1615
|
+
# A poisoned journal must not wedge every later op: the redo hit a
|
|
1616
|
+
# conflict that post-dates the crash (foreign doc, non-UTF-8 file).
|
|
1617
|
+
# Quarantine the intent — evidence preserved — and report it,
|
|
1618
|
+
# instead of failing forever on the same journal.
|
|
1619
|
+
_quarantine(jpath, now.replace(":", ""))
|
|
1620
|
+
_txn_drop(ctx)
|
|
1621
|
+
return {
|
|
1622
|
+
"op": str(journal.get("op") or "?"),
|
|
1623
|
+
"quarantined": True,
|
|
1624
|
+
"error": f"{exc.kind}: {exc.detail}",
|
|
1625
|
+
}
|
|
1563
1626
|
if recovered is None:
|
|
1564
1627
|
_quarantine(jpath, now.replace(":", ""))
|
|
1565
1628
|
_txn_drop(ctx)
|
|
@@ -1685,8 +1748,16 @@ def repair_context(root: Path | str) -> dict[str, Any]:
|
|
|
1685
1748
|
now = _utc_now()
|
|
1686
1749
|
previous = {e["forge_id"]: e for e in reg["forges"]}
|
|
1687
1750
|
entries = []
|
|
1751
|
+
invalid: list[dict[str, Any]] = []
|
|
1688
1752
|
for fid in sorted(manifests):
|
|
1689
1753
|
doc = manifests[fid]
|
|
1754
|
+
# A capability file that fails schema validation is reported and
|
|
1755
|
+
# kept out of the rebuilt registry — never an untyped crash on
|
|
1756
|
+
# the one path meant to converge a broken context.
|
|
1757
|
+
problems = validate_manifest(doc)
|
|
1758
|
+
if problems:
|
|
1759
|
+
invalid.append({"forge_id": fid, "problems": problems[:5]})
|
|
1760
|
+
continue
|
|
1690
1761
|
cap_sha = _sha_file(ctx / CAPABILITIES_DIR / f"{fid}.json")
|
|
1691
1762
|
entries.append(_entry_from_manifest(doc, cap_sha, previous.get(fid), now))
|
|
1692
1763
|
reg["forges"] = entries
|
|
@@ -1698,7 +1769,8 @@ def repair_context(root: Path | str) -> dict[str, Any]:
|
|
|
1698
1769
|
# foreign-installer content is never ours to remove.
|
|
1699
1770
|
return {
|
|
1700
1771
|
"status": "repaired",
|
|
1701
|
-
"forges": sorted(
|
|
1772
|
+
"forges": sorted(e["forge_id"] for e in entries),
|
|
1773
|
+
"invalid": invalid,
|
|
1702
1774
|
"recovered": recovered,
|
|
1703
1775
|
"notes": notes,
|
|
1704
1776
|
"written": written,
|
|
@@ -2126,9 +2198,23 @@ def _is_our_protocol(text: str) -> bool:
|
|
|
2126
2198
|
return text.startswith(PROTOCOL_SENTINEL)
|
|
2127
2199
|
|
|
2128
2200
|
|
|
2201
|
+
def _read_doc(path: Path) -> str:
|
|
2202
|
+
"""Read a consumer doc as UTF-8 — a file that does not decode is a
|
|
2203
|
+
named refusal, never an untyped internal error (conflicts precede
|
|
2204
|
+
writes per §9.2; errors are typed per §13.1)."""
|
|
2205
|
+
try:
|
|
2206
|
+
return path.read_text(encoding="utf-8")
|
|
2207
|
+
except UnicodeDecodeError:
|
|
2208
|
+
raise ContextError(
|
|
2209
|
+
E_CONFLICT,
|
|
2210
|
+
f"{path.name}: not valid UTF-8 — convert the file to UTF-8 or "
|
|
2211
|
+
"remove it, then re-run",
|
|
2212
|
+
) from None
|
|
2213
|
+
|
|
2214
|
+
|
|
2129
2215
|
def _write_doc(path: Path, text: str, written: list[str], kept: list[str]) -> None:
|
|
2130
2216
|
rel = path.name
|
|
2131
|
-
old = path
|
|
2217
|
+
old = _read_doc(path) if path.exists() else None
|
|
2132
2218
|
if old == text:
|
|
2133
2219
|
kept.append(rel)
|
|
2134
2220
|
return
|
|
@@ -2143,7 +2229,7 @@ def _sync_protocol(root: Path, written: list[str], notes: list[str]) -> None:
|
|
|
2143
2229
|
manifests = _load_manifests(context_dir(root))
|
|
2144
2230
|
if not manifests:
|
|
2145
2231
|
if path.exists():
|
|
2146
|
-
text = path
|
|
2232
|
+
text = _read_doc(path)
|
|
2147
2233
|
if _is_our_protocol(text):
|
|
2148
2234
|
path.unlink()
|
|
2149
2235
|
written.append(f"{PROTOCOL_NAME} (removed — last forge)")
|
|
@@ -2157,14 +2243,14 @@ def _sync_protocol(root: Path, written: list[str], notes: list[str]) -> None:
|
|
|
2157
2243
|
reg = load_registry(root) or {}
|
|
2158
2244
|
doc = protocol_document(reg, manifests)
|
|
2159
2245
|
if path.exists():
|
|
2160
|
-
cur = path
|
|
2246
|
+
cur = _read_doc(path)
|
|
2161
2247
|
if not _is_our_protocol(cur):
|
|
2162
2248
|
raise ContextError(
|
|
2163
2249
|
E_CONFLICT,
|
|
2164
2250
|
f"{PROTOCOL_NAME} exists and is not forge-managed — rename "
|
|
2165
2251
|
"it or remove it, then re-run",
|
|
2166
2252
|
)
|
|
2167
|
-
old = path
|
|
2253
|
+
old = _read_doc(path) if path.exists() else None
|
|
2168
2254
|
if old != doc:
|
|
2169
2255
|
_atomic_write(path, doc.encode("utf-8"))
|
|
2170
2256
|
written.append(PROTOCOL_NAME)
|
|
@@ -2184,7 +2270,7 @@ def _sync_marked_file(
|
|
|
2184
2270
|
``preamble`` when absent. ``blocks`` is ordered (ecosystem, then the
|
|
2185
2271
|
forge's)."""
|
|
2186
2272
|
path = root / name
|
|
2187
|
-
text = path
|
|
2273
|
+
text = _read_doc(path) if path.exists() else preamble
|
|
2188
2274
|
text, removed = strip_legacy_blocks(text, legacy_tags, name=name)
|
|
2189
2275
|
removed_legacy.extend(removed)
|
|
2190
2276
|
for tag, body in blocks:
|
|
@@ -2209,7 +2295,7 @@ def _teardown_marked_file(
|
|
|
2209
2295
|
path = root / name
|
|
2210
2296
|
if not path.exists():
|
|
2211
2297
|
return
|
|
2212
|
-
text = path
|
|
2298
|
+
text = _read_doc(path)
|
|
2213
2299
|
text, removed = strip_legacy_blocks(text, legacy_tags, name=name)
|
|
2214
2300
|
removed_legacy.extend(removed)
|
|
2215
2301
|
text = remove_managed_block(text, f"forge:{forge_id}", name=name)
|
|
@@ -2248,7 +2334,7 @@ def _protocol_conflict_check(root: Path) -> None:
|
|
|
2248
2334
|
that exists and is not ours."""
|
|
2249
2335
|
path = root / PROTOCOL_NAME
|
|
2250
2336
|
if path.exists():
|
|
2251
|
-
text = path
|
|
2337
|
+
text = _read_doc(path)
|
|
2252
2338
|
if not _is_our_protocol(text):
|
|
2253
2339
|
raise ContextError(
|
|
2254
2340
|
E_CONFLICT,
|
|
@@ -2265,7 +2351,7 @@ def _docs_install_conflicts(
|
|
|
2265
2351
|
(transaction §9.2 step 5: conflict detection precedes backup)."""
|
|
2266
2352
|
for name, preamble, blocks in _install_block_plan(manifest):
|
|
2267
2353
|
path = root / name
|
|
2268
|
-
text = path
|
|
2354
|
+
text = _read_doc(path) if path.exists() else preamble
|
|
2269
2355
|
text, _ = strip_legacy_blocks(text, legacy_tags, name=name)
|
|
2270
2356
|
for tag, body in blocks:
|
|
2271
2357
|
text = apply_managed_block(text, tag, body, name=name)
|
|
@@ -2282,7 +2368,7 @@ def _docs_uninstall_conflicts(root: Path, forge_id: str, legacy_tags: Iterable[s
|
|
|
2282
2368
|
path = root / name
|
|
2283
2369
|
if not path.exists():
|
|
2284
2370
|
continue
|
|
2285
|
-
text = path
|
|
2371
|
+
text = _read_doc(path)
|
|
2286
2372
|
text, _ = strip_legacy_blocks(text, legacy_tags, name=name)
|
|
2287
2373
|
text = remove_managed_block(text, f"forge:{forge_id}", name=name)
|
|
2288
2374
|
if not keep_shared:
|
|
@@ -2566,7 +2652,7 @@ def _verify_install(root: Path, forge_id: str, *, docs: bool) -> list[str]:
|
|
|
2566
2652
|
verified.append("manifest")
|
|
2567
2653
|
if docs:
|
|
2568
2654
|
agents = root / AGENTS_NAME
|
|
2569
|
-
text = agents
|
|
2655
|
+
text = _read_doc(agents) if agents.exists() else ""
|
|
2570
2656
|
if f"forge:{forge_id}:begin" not in text:
|
|
2571
2657
|
raise ContextError(
|
|
2572
2658
|
E_SCHEMA, f"verify: {AGENTS_NAME} lacks the forge:{forge_id} block"
|