platformforge 0.1.0__py3-none-any.whl
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/__init__.py +7 -0
- platformforge/__main__.py +5 -0
- platformforge/_forge_portal.py +913 -0
- platformforge/_graphstudio.py +376 -0
- platformforge/_graphview.py +181 -0
- platformforge/_installkit.py +1706 -0
- platformforge/agents/__init__.py +156 -0
- platformforge/agents/bench.py +61 -0
- platformforge/agents/contextpack.py +137 -0
- platformforge/agents/contracts.py +394 -0
- platformforge/agents/coordinators.py +98 -0
- platformforge/agents/critic.py +113 -0
- platformforge/agents/debate.py +161 -0
- platformforge/agents/executors.py +160 -0
- platformforge/agents/guardian.py +48 -0
- platformforge/agents/mirrors.py +240 -0
- platformforge/agents/orchestrator.py +295 -0
- platformforge/agents/planner.py +116 -0
- platformforge/agents/playbook.py +51 -0
- platformforge/agents/referee.py +132 -0
- platformforge/agents/reviewers.py +113 -0
- platformforge/agents/roster.py +893 -0
- platformforge/agents/runledger.py +85 -0
- platformforge/agents/runstore.py +74 -0
- platformforge/agents/specialists.py +73 -0
- platformforge/agents/taskspec.py +94 -0
- platformforge/agents/uniqueness.py +115 -0
- platformforge/agents/verifier.py +106 -0
- platformforge/aiplat/__init__.py +4 -0
- platformforge/aiplat/models.py +175 -0
- platformforge/analytics/__init__.py +6 -0
- platformforge/analytics/capacity.py +109 -0
- platformforge/analytics/debt.py +92 -0
- platformforge/analytics/dx.py +69 -0
- platformforge/analytics/finops_v4.py +171 -0
- platformforge/analytics/goldenpath.py +131 -0
- platformforge/analytics/history.py +233 -0
- platformforge/analytics/measurement.py +149 -0
- platformforge/analytics/models.py +127 -0
- platformforge/analytics/opsanalytics.py +119 -0
- platformforge/analytics/policyintel.py +139 -0
- platformforge/analytics/reliability.py +106 -0
- platformforge/analytics/soak.py +135 -0
- platformforge/analytics/store.py +254 -0
- platformforge/bench.py +174 -0
- platformforge/cases/__init__.py +13 -0
- platformforge/cases/casefile.py +106 -0
- platformforge/cases/context_audit.py +134 -0
- platformforge/cases/ledgers.py +174 -0
- platformforge/cases/replay.py +142 -0
- platformforge/cases/routing_audit.py +162 -0
- platformforge/caveman/__init__.py +11 -0
- platformforge/caveman/compress.py +156 -0
- platformforge/cicd/__init__.py +16 -0
- platformforge/cicd/backstage.py +51 -0
- platformforge/cicd/dockerfile.py +64 -0
- platformforge/cicd/github_actions.py +122 -0
- platformforge/cicd/gitlab_ci.py +56 -0
- platformforge/cicd/gitops.py +130 -0
- platformforge/cli/__init__.py +0 -0
- platformforge/cli/fleetcmd.py +457 -0
- platformforge/cli/main.py +3832 -0
- platformforge/cloud/__init__.py +8 -0
- platformforge/cloud/aws.py +254 -0
- platformforge/cloud/common.py +69 -0
- platformforge/cloud/multicloud.py +143 -0
- platformforge/collect/__init__.py +11 -0
- platformforge/collect/detect.py +254 -0
- platformforge/context/__init__.py +10 -0
- platformforge/context/capsule.py +60 -0
- platformforge/context/gateway.py +227 -0
- platformforge/context/refs.py +49 -0
- platformforge/context/sufficiency.py +50 -0
- platformforge/core/__init__.py +1 -0
- platformforge/core/hashing.py +39 -0
- platformforge/core/ownership.py +220 -0
- platformforge/core/receipts.py +74 -0
- platformforge/core/redaction.py +97 -0
- platformforge/core/store.py +119 -0
- platformforge/core/workspace.py +89 -0
- platformforge/data/contracts/agent-handoff.schema.json +26 -0
- platformforge/data/contracts/agent-run.schema.json +27 -0
- platformforge/data/contracts/agent-spec.schema.json +43 -0
- platformforge/data/contracts/capability.schema.json +23 -0
- platformforge/data/contracts/change-event.schema.json +22 -0
- platformforge/data/contracts/change-intent.schema.json +62 -0
- platformforge/data/contracts/change-plan.schema.json +43 -0
- platformforge/data/contracts/collector-receipt.schema.json +36 -0
- platformforge/data/contracts/context-pack.schema.json +29 -0
- platformforge/data/contracts/debate.schema.json +31 -0
- platformforge/data/contracts/distribution-manifest-v1.schema.json +81 -0
- platformforge/data/contracts/drift-event.schema.json +21 -0
- platformforge/data/contracts/fact.schema.json +35 -0
- platformforge/data/contracts/finding.schema.json +20 -0
- platformforge/data/contracts/graph-v2.schema.json +67 -0
- platformforge/data/contracts/graph.schema.json +40 -0
- platformforge/data/contracts/install-receipt-v1.schema.json +49 -0
- platformforge/data/contracts/observation.schema.json +93 -0
- platformforge/data/contracts/receipt.schema.json +21 -0
- platformforge/data/contracts/recommendation.schema.json +32 -0
- platformforge/data/contracts/refusal.schema.json +16 -0
- platformforge/data/contracts/slo-contract.schema.json +25 -0
- platformforge/data/contracts/task-spec.schema.json +37 -0
- platformforge/data/contracts/workspace-manifest-v1.schema.json +62 -0
- platformforge/data/evals/cases/agent-budget-exhaustion/case.yaml +6 -0
- platformforge/data/evals/cases/agent-conflicting-specialists/case.yaml +11 -0
- platformforge/data/evals/cases/agent-fleet-optimization/case.yaml +13 -0
- platformforge/data/evals/cases/agent-host-no-subagents/case.yaml +6 -0
- platformforge/data/evals/cases/agent-incident-multi/case.yaml +13 -0
- platformforge/data/evals/cases/agent-missing-evidence/case.yaml +6 -0
- platformforge/data/evals/cases/agent-multi-domain-audit/case.yaml +14 -0
- platformforge/data/evals/cases/agent-production-change/case.yaml +15 -0
- platformforge/data/evals/cases/agent-security-mandatory/case.yaml +12 -0
- platformforge/data/evals/cases/agent-simple-iac/case.yaml +14 -0
- platformforge/data/evals/cases/approval-integrity-seal/case.yaml +6 -0
- platformforge/data/evals/cases/capacity-hot/case.yaml +7 -0
- platformforge/data/evals/cases/capacity-hot/fixture/capacity.json +5 -0
- platformforge/data/evals/cases/catalog-noowner/case.yaml +7 -0
- platformforge/data/evals/cases/catalog-noowner/fixture/catalog-info.yaml +6 -0
- platformforge/data/evals/cases/contract-fact/case.yaml +5 -0
- platformforge/data/evals/cases/contract-fact/fixture/doc.json +2 -0
- platformforge/data/evals/cases/cosign-unverified/case.yaml +8 -0
- platformforge/data/evals/cases/cosign-unverified/fixture/sig.json +33 -0
- platformforge/data/evals/cases/expected-delta-refusal/case.yaml +6 -0
- platformforge/data/evals/cases/finops-noattr/case.yaml +9 -0
- platformforge/data/evals/cases/finops-noattr/fixture/costs.json +7 -0
- platformforge/data/evals/cases/fleet-inv-absent-allocation-unknown/case.yaml +7 -0
- platformforge/data/evals/cases/fleet-inv-centrality-not-criticality/case.yaml +7 -0
- platformforge/data/evals/cases/fleet-inv-correlation-not-causality/case.yaml +7 -0
- platformforge/data/evals/cases/fleet-inv-dx-no-person-metrics/case.yaml +7 -0
- platformforge/data/evals/cases/fleet-inv-federation-restricted-denied/case.yaml +7 -0
- platformforge/data/evals/cases/fleet-inv-federation-secret-denied/case.yaml +7 -0
- platformforge/data/evals/cases/fleet-inv-history-window-deterministic/case.yaml +7 -0
- platformforge/data/evals/cases/fleet-inv-low-util-not-deletable/case.yaml +7 -0
- platformforge/data/evals/cases/fleet-inv-member-key-deterministic/case.yaml +7 -0
- platformforge/data/evals/cases/fleet-inv-missing-denominator/case.yaml +7 -0
- platformforge/data/evals/cases/fleet-inv-partial-coverage-visible/case.yaml +7 -0
- platformforge/data/evals/cases/fleet-inv-plan-changeintent-only/case.yaml +7 -0
- platformforge/data/evals/cases/fleet-inv-report-all-cited/case.yaml +7 -0
- platformforge/data/evals/cases/fleet-inv-small-sample-confidence/case.yaml +7 -0
- platformforge/data/evals/cases/fleet-inv-uncertain-optimization-suppressed/case.yaml +7 -0
- platformforge/data/evals/cases/gha-dangerous/case.yaml +12 -0
- platformforge/data/evals/cases/gha-dangerous/fixture/.github/workflows/ci.yaml +11 -0
- platformforge/data/evals/cases/gitops-v2/case.yaml +11 -0
- platformforge/data/evals/cases/gitops-v2/fixture/argo.yaml +41 -0
- platformforge/data/evals/cases/graph-k8s-blast/case.yaml +7 -0
- platformforge/data/evals/cases/graph-k8s-blast/fixture/deploy.yaml +15 -0
- platformforge/data/evals/cases/iac-module-nopin/case.yaml +8 -0
- platformforge/data/evals/cases/iac-module-nopin/fixture/main.tf +3 -0
- platformforge/data/evals/cases/iac-plan-replace/case.yaml +8 -0
- platformforge/data/evals/cases/iac-plan-replace/fixture/plan.json +12 -0
- platformforge/data/evals/cases/iac-sg-open/case.yaml +8 -0
- platformforge/data/evals/cases/iac-sg-open/fixture/main.tf +9 -0
- platformforge/data/evals/cases/iam-oidc/case.yaml +8 -0
- platformforge/data/evals/cases/iam-oidc/fixture/policy.json +11 -0
- platformforge/data/evals/cases/iam-wildcard-positive/case.yaml +8 -0
- platformforge/data/evals/cases/iam-wildcard-positive/fixture/policy.json +3 -0
- platformforge/data/evals/cases/k8s-bad-actor/case.yaml +19 -0
- platformforge/data/evals/cases/k8s-bad-actor/fixture/app.yaml +97 -0
- platformforge/data/evals/cases/k8s-beta-api/case.yaml +8 -0
- platformforge/data/evals/cases/k8s-beta-api/fixture/cr.yaml +7 -0
- platformforge/data/evals/cases/k8s-dep-api-boundary/case.yaml +15 -0
- platformforge/data/evals/cases/k8s-dep-api-boundary/fixture/app.yaml +25 -0
- platformforge/data/evals/cases/k8s-dep-api-clean/case.yaml +12 -0
- platformforge/data/evals/cases/k8s-dep-api-clean/fixture/app.yaml +29 -0
- platformforge/data/evals/cases/k8s-dep-api-unknown/case.yaml +11 -0
- platformforge/data/evals/cases/k8s-dep-api-unknown/fixture/app.yaml +25 -0
- platformforge/data/evals/cases/k8s-dep-api-v120/case.yaml +12 -0
- platformforge/data/evals/cases/k8s-dep-api-v120/fixture/app.yaml +25 -0
- platformforge/data/evals/cases/k8s-dep-api-v129/case.yaml +9 -0
- platformforge/data/evals/cases/k8s-dep-api-v129/fixture/app.yaml +25 -0
- platformforge/data/evals/cases/k8s-hpa-noreq/case.yaml +8 -0
- platformforge/data/evals/cases/k8s-hpa-noreq/fixture/app.yaml +28 -0
- platformforge/data/evals/cases/k8s-limits-boundary/case.yaml +10 -0
- platformforge/data/evals/cases/k8s-limits-boundary/fixture/app.yaml +15 -0
- platformforge/data/evals/cases/k8s-limits-negative/case.yaml +8 -0
- platformforge/data/evals/cases/k8s-limits-negative/fixture/deploy.yaml +15 -0
- platformforge/data/evals/cases/k8s-limits-positive/case.yaml +8 -0
- platformforge/data/evals/cases/k8s-limits-positive/fixture/deploy.yaml +14 -0
- platformforge/data/evals/cases/k8s-nopdb/case.yaml +7 -0
- platformforge/data/evals/cases/k8s-nopdb/fixture/app.yaml +34 -0
- platformforge/data/evals/cases/knowledge-registry/case.yaml +10 -0
- platformforge/data/evals/cases/kyverno-dep/case.yaml +10 -0
- platformforge/data/evals/cases/kyverno-dep/fixture/pol.yaml +18 -0
- platformforge/data/evals/cases/kyverno-legacy/case.yaml +8 -0
- platformforge/data/evals/cases/kyverno-legacy/fixture/pol.yaml +7 -0
- platformforge/data/evals/cases/live-aws-collect/case.yaml +11 -0
- platformforge/data/evals/cases/live-aws-collect/fixture/aws/ec2_describe-vpcs.json +15 -0
- platformforge/data/evals/cases/live-aws-collect/fixture/aws/iam_list-users.denied.txt +1 -0
- platformforge/data/evals/cases/live-aws-collect/fixture/aws/sts_get-caller-identity.json +5 -0
- platformforge/data/evals/cases/live-drift/case.yaml +8 -0
- platformforge/data/evals/cases/live-drift/fixture/after.json +22 -0
- platformforge/data/evals/cases/live-drift/fixture/before.json +22 -0
- platformforge/data/evals/cases/live-incident/case.yaml +7 -0
- platformforge/data/evals/cases/live-incident/fixture/changes.json +8 -0
- platformforge/data/evals/cases/live-incident/fixture/incident.json +7 -0
- platformforge/data/evals/cases/live-k8s-collect/case.yaml +10 -0
- platformforge/data/evals/cases/live-k8s-collect/fixture/kubectl/get_configmaps.denied.txt +1 -0
- platformforge/data/evals/cases/live-k8s-collect/fixture/kubectl/get_deployments.apps.json +25 -0
- platformforge/data/evals/cases/live-k8s-collect/fixture/kubectl/get_pods.json +17 -0
- platformforge/data/evals/cases/live-k8s-collect/fixture/kubectl/get_secrets.json +13 -0
- platformforge/data/evals/cases/live-multicluster/case.yaml +7 -0
- platformforge/data/evals/cases/live-multicluster/fixture/clusters.json +6 -0
- platformforge/data/evals/cases/live-plan/case.yaml +7 -0
- platformforge/data/evals/cases/live-plan/fixture/drift.json +8 -0
- platformforge/data/evals/cases/live-reconcile/case.yaml +7 -0
- platformforge/data/evals/cases/live-reconcile/fixture/desired.json +7 -0
- platformforge/data/evals/cases/live-reconcile/fixture/observed.json +18 -0
- platformforge/data/evals/cases/live-secrets-boundary/case.yaml +8 -0
- platformforge/data/evals/cases/live-secrets-boundary/fixture/envelope.json +16 -0
- platformforge/data/evals/cases/live-temporal-graph/case.yaml +10 -0
- platformforge/data/evals/cases/live-temporal-graph/fixture/graph.json +22 -0
- platformforge/data/evals/cases/ops-approval/case.yaml +6 -0
- platformforge/data/evals/cases/ops-convergence/case.yaml +6 -0
- platformforge/data/evals/cases/ops-execution-safety/case.yaml +6 -0
- platformforge/data/evals/cases/ops-intent/case.yaml +6 -0
- platformforge/data/evals/cases/ops-planning/case.yaml +6 -0
- platformforge/data/evals/cases/ops-policy/case.yaml +6 -0
- platformforge/data/evals/cases/ops-rollback/case.yaml +6 -0
- platformforge/data/evals/cases/ops-verification/case.yaml +6 -0
- platformforge/data/evals/cases/rollback-argocd-revision/case.yaml +6 -0
- platformforge/data/evals/cases/rollback-blind-inverse/case.yaml +6 -0
- platformforge/data/evals/cases/rollback-git-commit/case.yaml +6 -0
- platformforge/data/evals/cases/rollback-impossible/case.yaml +6 -0
- platformforge/data/evals/cases/rollback-k8s-annotation-restore/case.yaml +6 -0
- platformforge/data/evals/cases/rollback-k8s-scale/case.yaml +6 -0
- platformforge/data/evals/cases/rollback-material-tamper/case.yaml +6 -0
- platformforge/data/evals/cases/rollback-terraform-replan/case.yaml +6 -0
- platformforge/data/evals/cases/rollback-unknown/case.yaml +6 -0
- platformforge/data/evals/cases/routing-specialist/case.yaml +9 -0
- platformforge/data/evals/cases/rtk-roundtrip/case.yaml +5 -0
- platformforge/data/evals/cases/rtk-roundtrip/fixture/verbose.txt +300 -0
- platformforge/data/evals/cases/sbom-vuln/case.yaml +9 -0
- platformforge/data/evals/cases/sbom-vuln/fixture/sbom.json +9 -0
- platformforge/data/evals/cases/secret-prose-mixed/fixture/app.env +1 -0
- platformforge/data/evals/cases/secret-prose-mixed/fixture/policy-notes.md +7 -0
- platformforge/data/evals/cases/secrets-noleak/case.yaml +5 -0
- platformforge/data/evals/cases/secrets-noleak/fixture/app.env +2 -0
- platformforge/data/evals/cases/slo-fastburn/case.yaml +8 -0
- platformforge/data/evals/cases/slo-fastburn/fixture/events.yaml +2 -0
- platformforge/data/evals/cases/slo-fastburn/fixture/slo.yaml +4 -0
- platformforge/data/evals/cases/slo-noinput/case.yaml +8 -0
- platformforge/data/evals/cases/slo-noinput/fixture/events.yaml +1 -0
- platformforge/data/evals/cases/slo-noinput/fixture/slo.yaml +4 -0
- platformforge/data/evals/cases/sot-conflict/case.yaml +6 -0
- platformforge/data/evals/cases/token-budget/case.yaml +6 -0
- platformforge/data/evals/cases/token-budget/fixture/big.py +50 -0
- platformforge/data/evals/cases/xr-delete/case.yaml +8 -0
- platformforge/data/evals/cases/xr-delete/fixture/xr.yaml +10 -0
- platformforge/data/evals/cases/xr-graph-chain/case.yaml +8 -0
- platformforge/data/evals/cases/xr-graph-chain/fixture/xrd.yaml +90 -0
- platformforge/data/evals/cases/xr-negative-crd/case.yaml +8 -0
- platformforge/data/evals/cases/xr-negative-crd/fixture/widget.yaml +19 -0
- platformforge/data/evals/cases/xr-upbound-mr/case.yaml +8 -0
- platformforge/data/evals/cases/xr-upbound-mr/fixture/bucket.yaml +12 -0
- platformforge/data/evals/qpt-bench/change-review/case.yaml +5 -0
- platformforge/data/evals/qpt-bench/change-review/fixture/plan.json +9 -0
- platformforge/data/evals/qpt-bench/gha-security/case.yaml +5 -0
- platformforge/data/evals/qpt-bench/gha-security/fixture/ci.yml +10 -0
- platformforge/data/evals/qpt-bench/iam-investigate/case.yaml +5 -0
- platformforge/data/evals/qpt-bench/iam-investigate/fixture/policy.json +6 -0
- platformforge/data/evals/qpt-bench/incident-analysis/case.yaml +5 -0
- platformforge/data/evals/qpt-bench/incident-analysis/fixture/query.json +5 -0
- platformforge/data/evals/qpt-bench/incident-analysis/fixture/rules.yaml +6 -0
- platformforge/data/evals/qpt-bench/k8s-review/case.yaml +6 -0
- platformforge/data/evals/qpt-bench/k8s-review/fixture/deploy.yaml +15 -0
- platformforge/data/evals/qpt-bench/tf-security/case.yaml +5 -0
- platformforge/data/evals/qpt-bench/tf-security/fixture/main.tf +17 -0
- platformforge/data/knowledge/aws/eks.yaml +20 -0
- platformforge/data/knowledge/aws/iam.yaml +28 -0
- platformforge/data/knowledge/aws/network-exposure.yaml +19 -0
- platformforge/data/knowledge/aws/organizations.yaml +19 -0
- platformforge/data/knowledge/crossplane/composition-providers.yaml +20 -0
- platformforge/data/knowledge/crossplane/managed-resources.yaml +26 -0
- platformforge/data/knowledge/crossplane/v1-v2.yaml +25 -0
- platformforge/data/knowledge/kubernetes/api-deprecations.yaml +33 -0
- platformforge/data/knowledge/kubernetes/autoscaling-rbac.yaml +27 -0
- platformforge/data/knowledge/kubernetes/gateway-api.yaml +20 -0
- platformforge/data/knowledge/kubernetes/pod-security.yaml +26 -0
- platformforge/data/knowledge/sources.yaml +516 -0
- platformforge/data/knowledge/terraform/lifecycle.yaml +18 -0
- platformforge/data/knowledge/terraform/plan-semantics.yaml +26 -0
- platformforge/data/lab/chaos-pod-kill/chaos.yaml +3 -0
- platformforge/data/lab/chaos-pod-kill/facts.json +13 -0
- platformforge/data/lab/fleets/acme/capacity.yaml +35 -0
- platformforge/data/lab/fleets/acme/costs.yaml +25 -0
- platformforge/data/lab/fleets/acme/events.yaml +41 -0
- platformforge/data/lab/fleets/acme/fleet.yaml +51 -0
- platformforge/data/lab/fleets/acme/graph.yaml +45 -0
- platformforge/data/lab/fleets/acme/policies.yaml +28 -0
- platformforge/data/lab/fleets/acme/requests.yaml +24 -0
- platformforge/data/lab/scenarios/argo-bad-rollout/expected.yaml +6 -0
- platformforge/data/lab/scenarios/argo-bad-rollout/fixture/app.yaml +9 -0
- platformforge/data/lab/scenarios/aws-dump/expected.yaml +19 -0
- platformforge/data/lab/scenarios/aws-dump/fixture/compute.json +4 -0
- platformforge/data/lab/scenarios/aws-dump/fixture/iam.json +7 -0
- platformforge/data/lab/scenarios/aws-dump/fixture/network.json +6 -0
- platformforge/data/lab/scenarios/aws-dump/fixture/org.json +4 -0
- platformforge/data/lab/scenarios/aws-dump/fixture/storage.json +4 -0
- platformforge/data/lab/scenarios/container-unsigned/expected.yaml +5 -0
- platformforge/data/lab/scenarios/container-unsigned/fixture/supply.json +11 -0
- platformforge/data/lab/scenarios/cost-idle-workload/expected.yaml +5 -0
- platformforge/data/lab/scenarios/cost-idle-workload/fixture/costs.json +12 -0
- platformforge/data/lab/scenarios/crossplane-platform/expected.yaml +16 -0
- platformforge/data/lab/scenarios/crossplane-platform/fixture/negative.yaml +18 -0
- platformforge/data/lab/scenarios/crossplane-platform/fixture/xrd.yaml +90 -0
- platformforge/data/lab/scenarios/demo-platform/expected.yaml +16 -0
- platformforge/data/lab/scenarios/demo-platform/fixture/.github/workflows/ci.yml +10 -0
- platformforge/data/lab/scenarios/demo-platform/fixture/deploy.yaml +16 -0
- platformforge/data/lab/scenarios/demo-platform/fixture/infra.tf +5 -0
- platformforge/data/lab/scenarios/fleet-ai/expected.yaml +12 -0
- platformforge/data/lab/scenarios/fleet-capacity/expected.yaml +12 -0
- platformforge/data/lab/scenarios/fleet-cost/expected.yaml +18 -0
- platformforge/data/lab/scenarios/fleet-federation/expected.yaml +11 -0
- platformforge/data/lab/scenarios/fleet-golden-path/expected.yaml +18 -0
- platformforge/data/lab/scenarios/fleet-op-hotspot/expected.yaml +11 -0
- platformforge/data/lab/scenarios/fleet-ownership/expected.yaml +17 -0
- platformforge/data/lab/scenarios/fleet-partial/expected.yaml +10 -0
- platformforge/data/lab/scenarios/fleet-policy-friction/expected.yaml +10 -0
- platformforge/data/lab/scenarios/fleet-recurring-incident/expected.yaml +12 -0
- platformforge/data/lab/scenarios/fleet-report/expected.yaml +13 -0
- platformforge/data/lab/scenarios/fleet-risk/expected.yaml +18 -0
- platformforge/data/lab/scenarios/gitops-drift/expected.yaml +6 -0
- platformforge/data/lab/scenarios/gitops-drift/fixture/app.yaml +12 -0
- platformforge/data/lab/scenarios/k8s-bad-readiness/expected.yaml +6 -0
- platformforge/data/lab/scenarios/k8s-bad-readiness/fixture/deploy.yaml +23 -0
- platformforge/data/lab/scenarios/k8s-bad-readiness/fixture/netpol.yaml +9 -0
- platformforge/data/lab/scenarios/k8s-missing-limits/expected.yaml +6 -0
- platformforge/data/lab/scenarios/k8s-missing-limits/fixture/deploy.yaml +26 -0
- platformforge/data/lab/scenarios/k8s-missing-limits/fixture/netpol.yaml +9 -0
- platformforge/data/lab/scenarios/k8s-single-replica/expected.yaml +5 -0
- platformforge/data/lab/scenarios/k8s-single-replica/fixture/deploy.yaml +26 -0
- platformforge/data/lab/scenarios/k8s-single-replica/fixture/netpol.yaml +4 -0
- platformforge/data/lab/scenarios/live-aws-collect/expected.yaml +4 -0
- platformforge/data/lab/scenarios/live-aws-collect/fixture/aws/ec2_describe-vpcs.json +15 -0
- platformforge/data/lab/scenarios/live-aws-collect/fixture/aws/iam_list-users.denied.txt +1 -0
- platformforge/data/lab/scenarios/live-aws-collect/fixture/aws/sts_get-caller-identity.json +5 -0
- platformforge/data/lab/scenarios/live-k8s-collect/expected.yaml +4 -0
- platformforge/data/lab/scenarios/live-k8s-collect/fixture/kubectl/get_configmaps.denied.txt +1 -0
- platformforge/data/lab/scenarios/live-k8s-collect/fixture/kubectl/get_deployments.apps.json +25 -0
- platformforge/data/lab/scenarios/live-k8s-collect/fixture/kubectl/get_pods.json +17 -0
- platformforge/data/lab/scenarios/live-k8s-collect/fixture/kubectl/get_secrets.json +13 -0
- platformforge/data/lab/scenarios/live-kind/expected.yaml +14 -0
- platformforge/data/lab/scenarios/live-kind/fixture/kubectl/get_configmaps.denied.txt +1 -0
- platformforge/data/lab/scenarios/live-kind/fixture/kubectl/get_deployments.apps.json +25 -0
- platformforge/data/lab/scenarios/live-kind/fixture/kubectl/get_pods.json +17 -0
- platformforge/data/lab/scenarios/live-kind/fixture/kubectl/get_secrets.json +13 -0
- platformforge/data/lab/scenarios/network-policy-missing/expected.yaml +6 -0
- platformforge/data/lab/scenarios/network-policy-missing/fixture/deploy.yaml +26 -0
- platformforge/data/lab/scenarios/ops-bad-rollout/expected.yaml +3 -0
- platformforge/data/lab/scenarios/ops-bad-rollout/fixture/ops.yaml +33 -0
- platformforge/data/lab/scenarios/ops-break-glass/expected.yaml +3 -0
- platformforge/data/lab/scenarios/ops-break-glass/fixture/ops.yaml +21 -0
- platformforge/data/lab/scenarios/ops-broken-selector/expected.yaml +3 -0
- platformforge/data/lab/scenarios/ops-broken-selector/fixture/ops.yaml +21 -0
- platformforge/data/lab/scenarios/ops-changed-plan-hash/expected.yaml +3 -0
- platformforge/data/lab/scenarios/ops-changed-plan-hash/fixture/ops.yaml +20 -0
- platformforge/data/lab/scenarios/ops-conflicting-operation/expected.yaml +3 -0
- platformforge/data/lab/scenarios/ops-conflicting-operation/fixture/ops.yaml +21 -0
- platformforge/data/lab/scenarios/ops-expired-approval/expected.yaml +3 -0
- platformforge/data/lab/scenarios/ops-expired-approval/fixture/ops.yaml +20 -0
- platformforge/data/lab/scenarios/ops-partial-failure/expected.yaml +3 -0
- platformforge/data/lab/scenarios/ops-partial-failure/fixture/ops.yaml +24 -0
- platformforge/data/lab/scenarios/ops-policy-denial/expected.yaml +3 -0
- platformforge/data/lab/scenarios/ops-policy-denial/fixture/ops.yaml +17 -0
- platformforge/data/lab/scenarios/ops-replica-drift/expected.yaml +3 -0
- platformforge/data/lab/scenarios/ops-replica-drift/fixture/ops.yaml +28 -0
- platformforge/data/lab/scenarios/ops-rollback-annotate/expected.yaml +3 -0
- platformforge/data/lab/scenarios/ops-rollback-annotate/fixture/ops.yaml +41 -0
- platformforge/data/lab/scenarios/ops-rollback-gitops/expected.yaml +3 -0
- platformforge/data/lab/scenarios/ops-rollback-gitops/fixture/ops.yaml +38 -0
- platformforge/data/lab/scenarios/ops-rollback-impossible/expected.yaml +3 -0
- platformforge/data/lab/scenarios/ops-rollback-impossible/fixture/ops.yaml +34 -0
- platformforge/data/lab/scenarios/ops-rollback-scale/expected.yaml +3 -0
- platformforge/data/lab/scenarios/ops-rollback-scale/fixture/ops.yaml +40 -0
- platformforge/data/lab/scenarios/ops-rollback-terraform/expected.yaml +3 -0
- platformforge/data/lab/scenarios/ops-rollback-terraform/fixture/ops.yaml +38 -0
- platformforge/data/lab/scenarios/ops-rollback-terraform/fixture/tf/tfplan.bin +1 -0
- platformforge/data/lab/scenarios/ops-stale-observation/expected.yaml +3 -0
- platformforge/data/lab/scenarios/ops-stale-observation/fixture/ops.yaml +20 -0
- platformforge/data/lab/scenarios/secret-exposure/expected.yaml +5 -0
- platformforge/data/lab/scenarios/secret-exposure/fixture/app.env +2 -0
- platformforge/data/lab/scenarios/slo-burn/expected.yaml +5 -0
- platformforge/data/lab/scenarios/slo-burn/fixture/events.yaml +2 -0
- platformforge/data/lab/scenarios/slo-burn/fixture/slo.yaml +4 -0
- platformforge/data/lab/scenarios/terraform-iam-wildcard/expected.yaml +5 -0
- platformforge/data/lab/scenarios/terraform-iam-wildcard/fixture/policy.json +14 -0
- platformforge/data/lab/scenarios/terraform-public-bucket/expected.yaml +6 -0
- platformforge/data/lab/scenarios/terraform-public-bucket/fixture/main.tf +5 -0
- platformforge/data/portable_skills/platformforge-agents/SKILL.md +47 -0
- platformforge/data/portable_skills/platformforge-change/SKILL.md +41 -0
- platformforge/data/portable_skills/platformforge-core/SKILL.md +62 -0
- platformforge/data/portable_skills/platformforge-economy/SKILL.md +42 -0
- platformforge/data/portable_skills/platformforge-finops/SKILL.md +34 -0
- platformforge/data/portable_skills/platformforge-fleet/SKILL.md +39 -0
- platformforge/data/portable_skills/platformforge-governance/SKILL.md +76 -0
- platformforge/data/portable_skills/platformforge-graph/SKILL.md +46 -0
- platformforge/data/portable_skills/platformforge-lab/SKILL.md +39 -0
- platformforge/data/portable_skills/platformforge-sdd/SKILL.md +39 -0
- platformforge/data/portable_skills/platformforge-security/SKILL.md +38 -0
- platformforge/data/portable_skills/platformforge-sre/SKILL.md +41 -0
- platformforge/data/rules/catalog/finops.yaml +26 -0
- platformforge/data/rules/catalog/gitops.yaml +161 -0
- platformforge/data/rules/catalog/iac.yaml +84 -0
- platformforge/data/rules/catalog/k8s.yaml +322 -0
- platformforge/data/rules/catalog/orchestration.yaml +99 -0
- platformforge/data/rules/catalog/product.yaml +42 -0
- platformforge/data/rules/catalog/routing.yaml +122 -0
- platformforge/data/rules/catalog/security.yaml +159 -0
- platformforge/data/rules/catalog/sre.yaml +67 -0
- platformforge/diagnose/__init__.py +75 -0
- platformforge/distribution/__init__.py +18 -0
- platformforge/distribution/bundle.py +127 -0
- platformforge/distribution/hostflow.py +247 -0
- platformforge/distribution/models.py +80 -0
- platformforge/distribution/service.py +225 -0
- platformforge/economy/__init__.py +27 -0
- platformforge/economy/bench.py +66 -0
- platformforge/economy/budget.py +198 -0
- platformforge/economy/cache.py +287 -0
- platformforge/economy/checkpoint.py +112 -0
- platformforge/economy/collection.py +142 -0
- platformforge/economy/doctor.py +207 -0
- platformforge/economy/engine.py +158 -0
- platformforge/economy/envelope.py +61 -0
- platformforge/economy/fleetpack.py +86 -0
- platformforge/economy/ledger.py +232 -0
- platformforge/economy/plan.py +131 -0
- platformforge/economy/pricing.py +101 -0
- platformforge/economy/qpt.py +286 -0
- platformforge/economy/reconcile.py +86 -0
- platformforge/economy/verifyplan.py +107 -0
- platformforge/economy/waste.py +123 -0
- platformforge/evals/__init__.py +16 -0
- platformforge/evals/coverage.py +140 -0
- platformforge/evals/fleet_invariants.py +260 -0
- platformforge/evals/ops_invariants.py +158 -0
- platformforge/evals/runner.py +541 -0
- platformforge/federation/__init__.py +4 -0
- platformforge/federation/node.py +135 -0
- platformforge/finops/__init__.py +14 -0
- platformforge/finops/alloc.py +31 -0
- platformforge/finops/costs.py +79 -0
- platformforge/finops/focus.py +100 -0
- platformforge/finops/graph_cost.py +51 -0
- platformforge/finops/ingest.py +144 -0
- platformforge/finops/insights.py +193 -0
- platformforge/finops/unit.py +36 -0
- platformforge/fleet/__init__.py +5 -0
- platformforge/fleet/loader.py +73 -0
- platformforge/fleet/models.py +155 -0
- platformforge/fleet/orggraph.py +172 -0
- platformforge/fleet/query.py +154 -0
- platformforge/forge/__init__.py +9 -0
- platformforge/forge/collect.py +88 -0
- platformforge/forge/delegate.py +77 -0
- platformforge/forge/manifest.py +106 -0
- platformforge/freeze/__init__.py +22 -0
- platformforge/freeze/exceptions.py +56 -0
- platformforge/freeze/manifest.py +167 -0
- platformforge/freeze/snapshots.py +108 -0
- platformforge/graph/__init__.py +39 -0
- platformforge/graph/backend.py +174 -0
- platformforge/graph/bench.py +245 -0
- platformforge/graph/build.py +130 -0
- platformforge/graph/delivery.py +183 -0
- platformforge/graph/diff.py +292 -0
- platformforge/graph/events.py +116 -0
- platformforge/graph/migrate.py +44 -0
- platformforge/graph/model.py +264 -0
- platformforge/graph/persist.py +97 -0
- platformforge/graph/query.py +290 -0
- platformforge/graph/temporal.py +78 -0
- platformforge/graph/vocab.py +63 -0
- platformforge/graphview.py +94 -0
- platformforge/iac/__init__.py +7 -0
- platformforge/iac/drift.py +53 -0
- platformforge/iac/plan.py +84 -0
- platformforge/iac/terraform.py +123 -0
- platformforge/install/__init__.py +1 -0
- platformforge/install/service.py +421 -0
- platformforge/k8s/__init__.py +8 -0
- platformforge/k8s/helm.py +152 -0
- platformforge/k8s/hubble.py +87 -0
- platformforge/k8s/manifests.py +513 -0
- platformforge/knowledge/__init__.py +1 -0
- platformforge/knowledge/packs.py +157 -0
- platformforge/knowledge/registry.py +249 -0
- platformforge/knowledge/select.py +127 -0
- platformforge/lab/__init__.py +5 -0
- platformforge/lab/chaos.py +71 -0
- platformforge/lab/fleetlab.py +351 -0
- platformforge/lab/opslab.py +271 -0
- platformforge/lab/runner.py +219 -0
- platformforge/live/__init__.py +36 -0
- platformforge/live/budget.py +92 -0
- platformforge/live/capability.py +80 -0
- platformforge/live/collectors/__init__.py +6 -0
- platformforge/live/collectors/aws.py +370 -0
- platformforge/live/collectors/aws_transport.py +98 -0
- platformforge/live/collectors/k8s.py +389 -0
- platformforge/live/collectors/k8s_transport.py +85 -0
- platformforge/live/cursors.py +48 -0
- platformforge/live/drift.py +130 -0
- platformforge/live/envelope.py +85 -0
- platformforge/live/federation.py +113 -0
- platformforge/live/fixtures.py +168 -0
- platformforge/live/identity.py +258 -0
- platformforge/live/incident.py +200 -0
- platformforge/live/models.py +435 -0
- platformforge/live/reconcile.py +382 -0
- platformforge/live/remediate.py +169 -0
- platformforge/live/store.py +256 -0
- platformforge/live/topology.py +249 -0
- platformforge/mcp/__init__.py +7 -0
- platformforge/mcp/parity.py +69 -0
- platformforge/mcp/registry.py +427 -0
- platformforge/mcp/server.py +84 -0
- platformforge/mcp/tools.py +732 -0
- platformforge/models/__init__.py +21 -0
- platformforge/models/base.py +214 -0
- platformforge/observe/__init__.py +26 -0
- platformforge/observe/capacity.py +39 -0
- platformforge/observe/dr.py +67 -0
- platformforge/observe/grafana.py +76 -0
- platformforge/observe/incident.py +58 -0
- platformforge/observe/otel.py +135 -0
- platformforge/observe/postmortem.py +72 -0
- platformforge/observe/prometheus.py +88 -0
- platformforge/observe/slo.py +125 -0
- platformforge/ops/__init__.py +8 -0
- platformforge/ops/actions.py +215 -0
- platformforge/ops/analytics.py +83 -0
- platformforge/ops/approval.py +275 -0
- platformforge/ops/autorem.py +101 -0
- platformforge/ops/config.py +175 -0
- platformforge/ops/engine.py +758 -0
- platformforge/ops/envelope.py +135 -0
- platformforge/ops/executors/__init__.py +1 -0
- platformforge/ops/executors/base.py +211 -0
- platformforge/ops/executors/git.py +77 -0
- platformforge/ops/executors/gitops.py +134 -0
- platformforge/ops/executors/terraform.py +84 -0
- platformforge/ops/gates.py +135 -0
- platformforge/ops/goldenpath.py +180 -0
- platformforge/ops/material.py +181 -0
- platformforge/ops/models.py +421 -0
- platformforge/ops/operation.py +335 -0
- platformforge/ops/opgraph.py +233 -0
- platformforge/ops/policy.py +275 -0
- platformforge/ops/preconditions.py +109 -0
- platformforge/ops/registry.py +101 -0
- platformforge/ops/risk.py +216 -0
- platformforge/ops/rollback.py +287 -0
- platformforge/ops/rollback_builders.py +163 -0
- platformforge/ops/runbook.py +269 -0
- platformforge/ops/simulate.py +125 -0
- platformforge/ops/source_of_truth.py +198 -0
- platformforge/ops/store.py +157 -0
- platformforge/ops/verify.py +190 -0
- platformforge/optimize/__init__.py +4 -0
- platformforge/optimize/engine.py +109 -0
- platformforge/optimize/models.py +68 -0
- platformforge/optimize/scan.py +196 -0
- platformforge/plan/__init__.py +107 -0
- platformforge/portable_cli.py +199 -0
- platformforge/portal_adapter.py +740 -0
- platformforge/portal_assets/chunk-7_l-b4Tr.js +1 -0
- platformforge/portal_assets/chunk-B0Iad6pD.js +1 -0
- platformforge/portal_assets/chunk-B605XnCF.js +1 -0
- platformforge/portal_assets/chunk-B7N3TXcn.js +1 -0
- platformforge/portal_assets/chunk-BAj6yGem.js +1 -0
- platformforge/portal_assets/chunk-BGUitn2r.js +1 -0
- platformforge/portal_assets/chunk-BVKnCv85.js +1 -0
- platformforge/portal_assets/chunk-BYyM9V_w.js +1 -0
- platformforge/portal_assets/chunk-BaQMhq-G.js +1 -0
- platformforge/portal_assets/chunk-BavOrxVm.js +1 -0
- platformforge/portal_assets/chunk-Bb0C24YV.js +1 -0
- platformforge/portal_assets/chunk-BfCFGPzs.js +1 -0
- platformforge/portal_assets/chunk-C2t4OUVu.js +1 -0
- platformforge/portal_assets/chunk-C3pI4QjU.js +1 -0
- platformforge/portal_assets/chunk-C4gpbtbP.js +1 -0
- platformforge/portal_assets/chunk-CGWeHhKY.js +1 -0
- platformforge/portal_assets/chunk-CJCT86Dr.js +1 -0
- platformforge/portal_assets/chunk-CXcsLDPJ.js +1 -0
- platformforge/portal_assets/chunk-CcjxoLxw.js +1 -0
- platformforge/portal_assets/chunk-D-gBPXHa.js +1 -0
- platformforge/portal_assets/chunk-D3eZogIe.js +1 -0
- platformforge/portal_assets/chunk-DQU0VyoQ.js +1 -0
- platformforge/portal_assets/chunk-DqWNkF1O.js +1 -0
- platformforge/portal_assets/chunk-DuPPkSIE.js +3 -0
- platformforge/portal_assets/chunk-DyIHOW_a.js +1 -0
- platformforge/portal_assets/chunk-Fx4zSGL5.js +1 -0
- platformforge/portal_assets/chunk-UBKt05Rg.js +1 -0
- platformforge/portal_assets/chunk-htnJDQEY.js +1 -0
- platformforge/portal_assets/chunk-kXRFMGqe.js +1 -0
- platformforge/portal_assets/chunk-qe3u763a.js +1 -0
- platformforge/portal_assets/favicon.ico +0 -0
- platformforge/portal_assets/index.html +13 -0
- platformforge/portal_assets/main-QDFVZK3T.js +5 -0
- platformforge/portal_assets/styles-MQEBDFDX.css +1 -0
- platformforge/product/__init__.py +10 -0
- platformforge/product/backstage.py +49 -0
- platformforge/product/catalog.py +74 -0
- platformforge/product/crossplane.py +341 -0
- platformforge/product/golden_paths/__init__.py +5 -0
- platformforge/product/golden_paths/engine.py +97 -0
- platformforge/product/golden_paths/library.yaml +198 -0
- platformforge/product/golden_paths/model.py +84 -0
- platformforge/product/maturity.py +107 -0
- platformforge/product/scorecards.py +84 -0
- platformforge/resources.py +36 -0
- platformforge/risk/__init__.py +5 -0
- platformforge/risk/engine.py +95 -0
- platformforge/risk/signals.py +49 -0
- platformforge/routing/__init__.py +13 -0
- platformforge/routing/decision.py +191 -0
- platformforge/routing/router.py +328 -0
- platformforge/rtk/__init__.py +9 -0
- platformforge/rtk/compact.py +127 -0
- platformforge/rtk/parsers.py +199 -0
- platformforge/rules/__init__.py +5 -0
- platformforge/rules/engine.py +345 -0
- platformforge/sandbox/__init__.py +7 -0
- platformforge/sandbox/env.py +151 -0
- platformforge/sandbox/review.py +92 -0
- platformforge/sdd/__init__.py +8 -0
- platformforge/sdd/lifecycle.py +239 -0
- platformforge/security/__init__.py +19 -0
- platformforge/security/cosign.py +67 -0
- platformforge/security/iam.py +112 -0
- platformforge/security/identity.py +84 -0
- platformforge/security/kyverno.py +106 -0
- platformforge/security/sbom.py +59 -0
- platformforge/security/scan.py +63 -0
- platformforge/security/slsa.py +86 -0
- platformforge/security/supply.py +62 -0
- platformforge/tokensave/__init__.py +20 -0
- platformforge/tokensave/budget.py +62 -0
- platformforge/tokensave/estimate.py +21 -0
- platformforge/tokensave/index.py +172 -0
- platformforge/tokensave/ledger.py +121 -0
- platformforge/tokensave/packs.py +285 -0
- platformforge/ui/__init__.py +28 -0
- platformforge/ui/app.py +465 -0
- platformforge/ui/home.py +113 -0
- platformforge/ui/i18n.py +143 -0
- platformforge/ui/kit.py +689 -0
- platformforge/ui/screen.py +628 -0
- platformforge/ui/tui.py +94 -0
- platformforge/ui/wizard.py +309 -0
- platformforge/workspace/__init__.py +13 -0
- platformforge/workspace/models.py +35 -0
- platformforge/workspace/service.py +69 -0
- platformforge-0.1.0.dist-info/METADATA +212 -0
- platformforge-0.1.0.dist-info/RECORD +659 -0
- platformforge-0.1.0.dist-info/WHEEL +4 -0
- platformforge-0.1.0.dist-info/entry_points.txt +3 -0
- platformforge-0.1.0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# §133 — annotation change, rollback restores exact previous metadata
|
|
2
|
+
intent:
|
|
3
|
+
intent_id: lab-rb-ann
|
|
4
|
+
owner: team-a
|
|
5
|
+
requested_by: bob
|
|
6
|
+
reason: {type: compliance}
|
|
7
|
+
target_resources: ["k8s:lab/apps/Deployment/web"]
|
|
8
|
+
desired_change: {annotate: {cost-center: "cc-9", team: "a"}}
|
|
9
|
+
steps:
|
|
10
|
+
- step_id: annotate
|
|
11
|
+
action: kubernetes.annotate
|
|
12
|
+
params: {kind: Deployment, name: web, namespace: apps,
|
|
13
|
+
annotations: {ops.platformforge.io/cost-center: "cc-9"},
|
|
14
|
+
resource_version: "2002"}
|
|
15
|
+
expected_delta:
|
|
16
|
+
changes: {resources: [{id: "dep/web",
|
|
17
|
+
annotations: {ops.platformforge.io/cost-center: "cc-9"}}]}
|
|
18
|
+
observation:
|
|
19
|
+
captured_at: "2999-01-01T00:00:00Z"
|
|
20
|
+
coverage: {complete: true}
|
|
21
|
+
pre_state:
|
|
22
|
+
annotate: {annotations: {ops.platformforge.io/team: "a", ops.platformforge.io/owner: "x"},
|
|
23
|
+
resource_version: "2002"}
|
|
24
|
+
post_rollback:
|
|
25
|
+
annotate: {annotations: {ops.platformforge.io/team: "a", ops.platformforge.io/owner: "x"}}
|
|
26
|
+
approvals:
|
|
27
|
+
- {approval_id: ap1, binds: envelope, actor: alice, role: owner}
|
|
28
|
+
environment: lab
|
|
29
|
+
auto_rollback: true
|
|
30
|
+
transports: {kubernetes: {rc: 0, stdout: "annotated"}}
|
|
31
|
+
verify:
|
|
32
|
+
observations:
|
|
33
|
+
immediate: {changes: {resources: [{id: "dep/web",
|
|
34
|
+
annotations: {ops.platformforge.io/cost-center: "cc-9"}}]}}
|
|
35
|
+
slo: {error_rate_max: 0.01}
|
|
36
|
+
metrics: {error_rate: 0.9}
|
|
37
|
+
expect:
|
|
38
|
+
ok: true
|
|
39
|
+
state: rolled-back
|
|
40
|
+
rollback_status: executable
|
|
41
|
+
rollback_verification: restored
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# §134 — GitOps sync A→B, failed verification, Argo rollback to A
|
|
2
|
+
intent:
|
|
3
|
+
intent_id: lab-rb-gitops
|
|
4
|
+
owner: team-a
|
|
5
|
+
requested_by: bob
|
|
6
|
+
reason: {type: release}
|
|
7
|
+
target_resources: ["argocd:lab/apps/web"]
|
|
8
|
+
desired_change: {revision: "rev-b"}
|
|
9
|
+
steps:
|
|
10
|
+
- step_id: sync
|
|
11
|
+
action: argocd.sync
|
|
12
|
+
params: {app: web, revision: "rev-b"}
|
|
13
|
+
expected_delta:
|
|
14
|
+
changes: {resources: [{id: "app/web", revision: "rev-b"}]}
|
|
15
|
+
observation:
|
|
16
|
+
captured_at: "2999-01-01T00:00:00Z"
|
|
17
|
+
coverage: {complete: true}
|
|
18
|
+
pre_state:
|
|
19
|
+
sync: {history_id: "42", previous_revision: "rev-a"}
|
|
20
|
+
post_rollback:
|
|
21
|
+
sync: {previous_revision: "rev-a", history_id: "42"}
|
|
22
|
+
approvals:
|
|
23
|
+
- {approval_id: ap1, binds: envelope, actor: alice, role: owner}
|
|
24
|
+
environment: lab
|
|
25
|
+
auto_rollback: true
|
|
26
|
+
transports: {argocd: {rc: 0, stdout: "synced"}}
|
|
27
|
+
verify:
|
|
28
|
+
observations:
|
|
29
|
+
immediate: {changes: {resources: [{id: "app/web",
|
|
30
|
+
revision: "rev-b"}]}}
|
|
31
|
+
slo: {error_rate_max: 0.01}
|
|
32
|
+
metrics: {error_rate: 0.6}
|
|
33
|
+
expect:
|
|
34
|
+
ok: true
|
|
35
|
+
state: rolled-back
|
|
36
|
+
rollback_status: executable
|
|
37
|
+
rollback_verification: restored
|
|
38
|
+
ledger_event: rollback.completed
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# §136 — git.push has no executable rollback → human escalation,
|
|
2
|
+
# never an invented action, no automatic rollback
|
|
3
|
+
intent:
|
|
4
|
+
intent_id: lab-rb-imp
|
|
5
|
+
owner: team-a
|
|
6
|
+
requested_by: bob
|
|
7
|
+
reason: {type: release}
|
|
8
|
+
target_resources: ["git:origin/main"]
|
|
9
|
+
desired_change: {push: true}
|
|
10
|
+
steps:
|
|
11
|
+
- step_id: push
|
|
12
|
+
action: git.push
|
|
13
|
+
params: {repo: "platform.git", branch: "main", remote: "origin"}
|
|
14
|
+
expected_delta:
|
|
15
|
+
changes: {resources: [{id: "origin/main", pushed: true}]}
|
|
16
|
+
observation:
|
|
17
|
+
captured_at: "2999-01-01T00:00:00Z"
|
|
18
|
+
coverage: {complete: true}
|
|
19
|
+
approvals:
|
|
20
|
+
- {approval_id: ap1, binds: envelope, actor: alice, role: owner, type: dual-human}
|
|
21
|
+
environment: lab
|
|
22
|
+
auto_rollback: true
|
|
23
|
+
trigger_rollback: true
|
|
24
|
+
transports: {git: {rc: 0, stdout: "pushed"}}
|
|
25
|
+
verify:
|
|
26
|
+
observations:
|
|
27
|
+
immediate: {changes: {resources: [{id: "origin/main", pushed: true}]}}
|
|
28
|
+
slo: {error_rate_max: 0.01}
|
|
29
|
+
metrics: {error_rate: 0.8}
|
|
30
|
+
expect:
|
|
31
|
+
ok: true
|
|
32
|
+
convergence: regressed
|
|
33
|
+
rollback_status: manual-only
|
|
34
|
+
rollback_refusal: PF-OPS-ROLLBACK-NOT-EXECUTABLE
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# §132 — scale 3→5, verification fails, auto-rollback 5→3, restored
|
|
2
|
+
intent:
|
|
3
|
+
intent_id: lab-rb-scale
|
|
4
|
+
owner: team-a
|
|
5
|
+
requested_by: bob
|
|
6
|
+
reason: {type: capacity}
|
|
7
|
+
target_resources: ["k8s:lab/apps/Deployment/web"]
|
|
8
|
+
desired_change: {replicas: 5}
|
|
9
|
+
steps:
|
|
10
|
+
- step_id: scale
|
|
11
|
+
action: kubernetes.scale
|
|
12
|
+
params: {kind: Deployment, name: web, namespace: apps,
|
|
13
|
+
replicas: 5, current_replicas: 3,
|
|
14
|
+
resource_version: "1001"}
|
|
15
|
+
expected_delta:
|
|
16
|
+
changes: {resources: [{id: "dep/web", replicas: 5}]}
|
|
17
|
+
observation:
|
|
18
|
+
captured_at: "2999-01-01T00:00:00Z"
|
|
19
|
+
coverage: {complete: true}
|
|
20
|
+
pre_state:
|
|
21
|
+
scale: {replicas: 3, resource_version: "1001"}
|
|
22
|
+
post_rollback:
|
|
23
|
+
scale: {replicas: 3}
|
|
24
|
+
approvals:
|
|
25
|
+
- {approval_id: ap1, binds: envelope, actor: alice, role: owner}
|
|
26
|
+
environment: lab
|
|
27
|
+
auto_rollback: true
|
|
28
|
+
transports: {kubernetes: {rc: 0, stdout: "scaled"}}
|
|
29
|
+
verify:
|
|
30
|
+
observations:
|
|
31
|
+
immediate: {changes: {resources: [{id: "dep/web", replicas: 5}]}}
|
|
32
|
+
slo: {error_rate_max: 0.01}
|
|
33
|
+
metrics: {error_rate: 0.5}
|
|
34
|
+
expect:
|
|
35
|
+
ok: true
|
|
36
|
+
state: rolled-back
|
|
37
|
+
convergence: regressed
|
|
38
|
+
rollback_status: executable
|
|
39
|
+
rollback_verification: restored
|
|
40
|
+
ledger_event: rollback.completed
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# §135 — terraform saved-plan apply fails → replan-required, never
|
|
2
|
+
# reuse the forward plan as a reverse plan; manual trigger refuses
|
|
3
|
+
intent:
|
|
4
|
+
intent_id: lab-rb-tf
|
|
5
|
+
owner: team-a
|
|
6
|
+
requested_by: bob
|
|
7
|
+
reason: {type: infrastructure}
|
|
8
|
+
target_resources: ["tf:lab/vpc"]
|
|
9
|
+
desired_change: {apply: "tfplan.bin"}
|
|
10
|
+
steps:
|
|
11
|
+
- step_id: apply
|
|
12
|
+
action: terraform.apply_saved_plan
|
|
13
|
+
params: {workdir: "tf", plan_file: "tfplan.bin",
|
|
14
|
+
plan_hash: "sha256:99ded080636eb70e63061ecbc8b563bb23fed1e0201c1b590d7d910b21cec6d4"}
|
|
15
|
+
expected_delta:
|
|
16
|
+
changes: {resources: [{id: "aws_vpc.main", applied: true}]}
|
|
17
|
+
observation:
|
|
18
|
+
captured_at: "2999-01-01T00:00:00Z"
|
|
19
|
+
coverage: {complete: true}
|
|
20
|
+
pre_state:
|
|
21
|
+
apply: {source_ref: "main@abc", workspace: "prod",
|
|
22
|
+
state_serial: "17",
|
|
23
|
+
resource_addresses: ["aws_vpc.main"]}
|
|
24
|
+
approvals:
|
|
25
|
+
- {approval_id: ap1, binds: envelope, actor: alice, role: owner}
|
|
26
|
+
environment: lab
|
|
27
|
+
trigger_rollback: true
|
|
28
|
+
transports: {terraform: {rc: 0, stdout: "applied"}}
|
|
29
|
+
verify:
|
|
30
|
+
observations:
|
|
31
|
+
immediate: {changes: {resources: [{id: "aws_vpc.main", applied: true}]}}
|
|
32
|
+
slo: {error_rate_max: 0.01}
|
|
33
|
+
metrics: {error_rate: 0.7}
|
|
34
|
+
expect:
|
|
35
|
+
ok: true
|
|
36
|
+
convergence: regressed
|
|
37
|
+
rollback_status: requires-replan
|
|
38
|
+
rollback_refusal: PF-OPS-ROLLBACK-NOT-EXECUTABLE
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
simulated-saved-plan-A-to-B
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
intent:
|
|
2
|
+
intent_id: lab-i1
|
|
3
|
+
owner: team-a
|
|
4
|
+
requested_by: bob
|
|
5
|
+
reason: {type: drift, drift_ids: [d1]}
|
|
6
|
+
target_resources: ["k8s:lab/apps/Deployment/web"]
|
|
7
|
+
desired_change: {replicas: 3}
|
|
8
|
+
steps:
|
|
9
|
+
- step_id: scale
|
|
10
|
+
action: kubernetes.scale
|
|
11
|
+
params: {kind: Deployment, name: web, namespace: apps, replicas: 3, current_replicas: 5}
|
|
12
|
+
expected_delta:
|
|
13
|
+
changes: {resources: [{id: "dep/web", replicas: [5, 3]}]}
|
|
14
|
+
observation:
|
|
15
|
+
captured_at: "2000-01-01T00:00:00Z"
|
|
16
|
+
coverage: {complete: true}
|
|
17
|
+
approvals:
|
|
18
|
+
- {approval_id: ap1, binds: envelope, actor: alice, role: owner}
|
|
19
|
+
environment: lab
|
|
20
|
+
expect: {ok: false, stage: preconditions, refusal: PF-OPS-PRECONDITION-FAILED}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: platformforge-agents
|
|
3
|
+
description: "Runtime agentico do Platform Forge (Cycle 5.1) — roster canônico de 41 agentes (orquestração, coordenadores, especialistas, reviewers, executors), Router V2 com DAG + budgets, dispatch bounded, debate bounded com referee, verificação independente, context packs e ledger de runs, mirrors de host gerados e playbook zero-subagent. Use para 'qual agente pega isso', rotear tarefa complexa, sincronizar mirrors de host (.claude/.codex/.devin/.agents), checar drift de mirrors, montar playbook sem subagentes, arbitrar conflito entre especialistas, ou auditar orçamento/independência de agentes. Agentes nunca mutam produção — ação governada fica no host."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Agentic runtime — agentes operam engines, não as substituem
|
|
7
|
+
|
|
8
|
+
Roster canônico: `platformforge/agents/roster.py` (41 agentes).
|
|
9
|
+
Mirrors são **gerados, nunca editados**: `agents/`, `.agents/agents/`,
|
|
10
|
+
`.claude/agents/`, `.codex/agents/`, `.devin/agents/` (205 arquivos).
|
|
11
|
+
|
|
12
|
+
## Verbos
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
platformforge agents list # roster (41)
|
|
16
|
+
platformforge agents lint # contract lint
|
|
17
|
+
platformforge agents sync # regenera os 5 targets
|
|
18
|
+
platformforge agents check # drift: missing/stale/stray
|
|
19
|
+
platformforge agents playbook "<task>" # fallback zero-subagent
|
|
20
|
+
platformforge agents referee --positions p.json # debate bounded
|
|
21
|
+
platformforge agents bench # estratégias comparadas (projeção)
|
|
22
|
+
platformforge route '{"task":"...","risk":"high","production":true}'
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Router V2 modos: `deterministic` (zero agentes) → `single-specialist` →
|
|
26
|
+
`multi-specialist` → `coordinated` → `debate` → `critical-review`.
|
|
27
|
+
|
|
28
|
+
## Regras duras (garantidas por gate/teste)
|
|
29
|
+
|
|
30
|
+
- Produtor nunca é seu próprio verificador (`PF-AGENT-INDEPENDENCE`).
|
|
31
|
+
- Rota crítica/produção exige ops-safety + security reviewers + verifier.
|
|
32
|
+
- Posição de debate sem evidência é recusada; rounds ≤ 3; referee emite
|
|
33
|
+
`winner|tied|unresolved` — e não substitui o verifier.
|
|
34
|
+
- Exaustão de budget → `partial`, nunca sucesso silencioso; resume nunca
|
|
35
|
+
reseta budget gasto.
|
|
36
|
+
- Contexto é pack de grafo+evidência bounded — nunca o repo inteiro;
|
|
37
|
+
follow-up recebe `previous_hash + delta`.
|
|
38
|
+
- Nenhum spec de agente lista verbo de mutação; `change approve|apply`
|
|
39
|
+
continua host-side (`PF-OPS-*`).
|
|
40
|
+
- Rota que referencia agente inexistente falha no `agents-routing` gate.
|
|
41
|
+
|
|
42
|
+
## Boundaries
|
|
43
|
+
|
|
44
|
+
- Mirror não pode conceder permissão que o contrato não declara.
|
|
45
|
+
- `agents playbook` carrega os mesmos requisitos de evidência e
|
|
46
|
+
verificação da rota agentica — degrada paralelismo, não rigor.
|
|
47
|
+
- Verificação e reporte de `unresolved` são isentos de budget.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: platformforge-change
|
|
3
|
+
description: "Revisa mudanças sem tocar a árvore original — sandbox copy → apply patch/files → analyze before/after → compare findings e delta de fatos, depois risco decomposto (blast radius, criticality declarada, produção, identidade, exposição, dados, disponibilidade, custo, reversibilidade, cobertura). Use para revisão de PR/mudança, 'posso aplicar este terraform?', diff de manifests, avaliar risco de uma alteração. O core nunca aplica: approve/apply retornam recusa com boundary host-side."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Change review — §85–86, §130–132
|
|
7
|
+
|
|
8
|
+
Lifecycle: `propose → sandbox → verify → review → approve → apply`.
|
|
9
|
+
O core cobre até `review`; `approve`/`apply` são boundary do host e o CLI
|
|
10
|
+
responde `platform.change.core_read_only` com o unlock.
|
|
11
|
+
|
|
12
|
+
## Fluxo
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
platformforge change verify --patch change.diff # sandbox: antes×depois
|
|
16
|
+
platformforge change verify --file infra/main.tf=novo.tf
|
|
17
|
+
platformforge change review <intent.json> # verdict + evidence
|
|
18
|
+
platformforge risk --node <grafo-id> # sinais derivados do blast
|
|
19
|
+
platformforge risk --signals '{"production":true,"reversibility":false}'
|
|
20
|
+
platformforge explain findings.json --name PF-IAC-010 # cadeia de evidência
|
|
21
|
+
platformforge recommend findings.json # Recommendations válidas
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Leitura do output
|
|
25
|
+
|
|
26
|
+
- `delta.fact_kinds_added/removed/changed_count` + `facts_added/removed`.
|
|
27
|
+
- `risk.level` ∈ low|medium|high|critical com `decomposition` por sinal —
|
|
28
|
+
sinais ausentes entram em `unresolved` e reduzem confiança, nunca
|
|
29
|
+
segurança.
|
|
30
|
+
- `criticality` vem só de attrs declarados (`criticality`, `tier`,
|
|
31
|
+
`tier0..3`); tecnologia não infere criticalidade de negócio (§131).
|
|
32
|
+
- Recomendação sem evidência é recusada pelo contrato (`refused[]`).
|
|
33
|
+
|
|
34
|
+
## Nunca
|
|
35
|
+
|
|
36
|
+
- Aplicar patch na árvore original — tudo acontece numa cópia em tmp.
|
|
37
|
+
- Afirmar efeito quantificado sem `benchmark_ref` (Recommendation rejeita).
|
|
38
|
+
- Apresentar recusa de approve/apply como erro — é o boundary desenhado.
|
|
39
|
+
- Deixar um agente executar `change approve|apply` — rota crítica exige
|
|
40
|
+
operations-safety reviewer + verifier + gate humano (→
|
|
41
|
+
platformforge-agents).
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: platformforge-core
|
|
3
|
+
description: "Ponto de entrada do Platform Forge para 'analise minha plataforma' e qualquer pergunta cross-domain — inventário de artefatos, fatos com tiers de evidência, findings por catálogo de regras, grafo com proveniência, recusas nomeadas e recibos. Use para auditoria de plataforma, onboarding a um workspace desconhecido, ou quando ainda não está claro qual especialista assume. Roteia para as skills de domínio (graph, change, sre, finops, security, sdd, lab, economy, fleet, agents, governance) assim que a área ficar clara. Não substitui as especializadas."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Platform Forge — core
|
|
7
|
+
|
|
8
|
+
Protocolo determinístico, offline-first, read-only. Toda resposta cita
|
|
9
|
+
`fact_id`/`rule_id`; sem evidência, devolva recusa nomeada — nunca prosa
|
|
10
|
+
evasiva.
|
|
11
|
+
|
|
12
|
+
## Rota canônica
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
platformforge doctor # ambiente OK?
|
|
16
|
+
platformforge init --repo <root> # scaffold .platformforge/ + workspace.yaml
|
|
17
|
+
platformforge inspect --repo <root> # inventário (workspace-aware, §126)
|
|
18
|
+
platformforge analyze <dom> <path> # iac|plan|state|drift|k8s|gitops|gha|iam|sbom|
|
|
19
|
+
# secrets|supply|catalog|crossplane|helm|kustomize|
|
|
20
|
+
# hubble|kyverno|cosign|slsa|ownership|contradictions|
|
|
21
|
+
# cloud-aws|cloud-azure|cloud-gcp
|
|
22
|
+
platformforge judge facts.json # regras → findings
|
|
23
|
+
platformforge graph build facts.json # grafo com proveniência
|
|
24
|
+
platformforge graph blast --node <id> # raio de explosão por classe
|
|
25
|
+
platformforge risk --node <id> # risco decomposto (§130)
|
|
26
|
+
platformforge diagnose <node> --facts f.json --findings f.json # fatos+findings+blast de um nó
|
|
27
|
+
platformforge impact --node <id> # blast radius direto
|
|
28
|
+
platformforge plan findings.json # findings → plano de remediação ordenado
|
|
29
|
+
platformforge explain <findings.json> --name <rule_id>
|
|
30
|
+
platformforge recommend <findings.json>
|
|
31
|
+
platformforge forge manifest # capacidades publicáveis
|
|
32
|
+
platformforge capability check --domain <d> --version <v>
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Disciplina
|
|
36
|
+
|
|
37
|
+
- Fatos têm tier 0–7; tiers 6–7 (LLM/conjectura) nunca viram `Fact`.
|
|
38
|
+
- Arestas do grafo herdam proveniência (`observed`/`declared`/`inferred`);
|
|
39
|
+
proximidade no grafo não é causalidade.
|
|
40
|
+
- `planned ≠ observed` — contradições mostram os dois estados.
|
|
41
|
+
- Sem segredo em output — `core/redaction.py` roda antes de qualquer pack.
|
|
42
|
+
- Multi-repo: apontar para a raiz do `workspace.yaml` faz fan-out pelos
|
|
43
|
+
membros e tagueia `attrs.workspace_member`.
|
|
44
|
+
- Mutação real nunca acontece no core — ver `platformforge-change`;
|
|
45
|
+
`ops`/`live` são namespaces de boundary do host.
|
|
46
|
+
|
|
47
|
+
## Quando rotear
|
|
48
|
+
|
|
49
|
+
- "o que isso afeta / quem depende" → **platformforge-graph**
|
|
50
|
+
- mudança, PR, diff, terraform plan, aplicação → **platformforge-change**
|
|
51
|
+
- SLO, incidente, capacity, OTel → **platformforge-sre**
|
|
52
|
+
- custo, alocação, FOCUS → **platformforge-finops**
|
|
53
|
+
- IAM, secrets, SBOM, supply chain → **platformforge-security**
|
|
54
|
+
- feature/mudança no próprio platform-forge → **platformforge-sdd**
|
|
55
|
+
- cenário de avaliação, fixture dourada → **platformforge-lab**
|
|
56
|
+
- tokens, packs, roteamento adaptativo → **platformforge-economy**
|
|
57
|
+
- frota, multi-cluster, optimize, federation, AI platform →
|
|
58
|
+
**platformforge-fleet**
|
|
59
|
+
- dispatch de agentes, rota Router V2, mirrors, debate, verificação →
|
|
60
|
+
**platformforge-agents**
|
|
61
|
+
- freeze, cases/evals, policy check, maturity/golden paths →
|
|
62
|
+
**platformforge-governance**
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: platformforge-economy
|
|
3
|
+
description: "Economia de tokens do Platform Forge — TokenSave (conteúdo endereçável, FTS5, context packs bounded), RTK para comandos verbosos, Caveman (compressão lossless), roteamento adaptativo cheap→premium, context packs de agentes e ledger de custo. Use para 'gastei muito contexto', montar context pack para subagente, decidir barato vs premium, ou auditar gasto de tokens. Não substitui análise de plataforma (→ platformforge-core) nem dispatch de agentes (→ platformforge-agents)."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Economy kernel — tokens como recurso contábil
|
|
7
|
+
|
|
8
|
+
Módulos: `platformforge/tokensave/` (index FTS5, budget, packs),
|
|
9
|
+
`platformforge/economy/` (rtk, caveman, routing, engine),
|
|
10
|
+
`platformforge/knowledge/` (source registry com freshness) e
|
|
11
|
+
`platformforge/agents/contextpack.py` (packs por escopo de grafo).
|
|
12
|
+
|
|
13
|
+
## Verbos
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
platformforge knowledge # freshness do source registry
|
|
17
|
+
platformforge tokens index # indexa árvore em .platformforge/index.db
|
|
18
|
+
platformforge tokens search "<termo>" # FTS5
|
|
19
|
+
platformforge tokens pack --task "<t>" --input-budget 4000
|
|
20
|
+
platformforge tokens delta --since <hash> # pack incremental p/ follow-up
|
|
21
|
+
platformforge tokens stats | tokens ledger # uso e ledger
|
|
22
|
+
platformforge rtk compact --command "cmd" < saida.txt # spans colapsados
|
|
23
|
+
platformforge rtk expand --start S --end E # lazy expand
|
|
24
|
+
platformforge caveman <file> --mode off|lite|full|auto # compressão lossless
|
|
25
|
+
platformforge route '{"task":"...","risk":"low"}' # TaskSignal → classe
|
|
26
|
+
platformforge economy # relatório do engine
|
|
27
|
+
platformforge agents bench # estratégias de rota comparadas (projeção)
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Disciplina
|
|
31
|
+
|
|
32
|
+
- Context pack é byte-bounded (`--input-budget`) — excedente vira
|
|
33
|
+
`truncated`, nunca estoura silenciosamente.
|
|
34
|
+
- RTK nunca perde dados: spans colapsados restauram via `rtk expand`.
|
|
35
|
+
- Route é recomendação de classe, não enforce — `tokens ledger` registra a
|
|
36
|
+
escolha real pra calibrar.
|
|
37
|
+
- Dedupe é por content hash — mesmo fato observado duas vezes = um slot.
|
|
38
|
+
- Pack de agente nunca carrega o repo inteiro: `Task → Graph scope →
|
|
39
|
+
Evidence → ContextPack` (budget classes tiny→critical; exaustão vira
|
|
40
|
+
`partial`, nunca sucesso silencioso).
|
|
41
|
+
- Follow-up recebe `previous_hash + delta` — reuse conta como
|
|
42
|
+
`cache_reuse` no ledger.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: platformforge-finops
|
|
3
|
+
description: "Analisa custos de plataforma a partir de dados FOCUS/billing — ingestão, resumo por serviço/conta, alocação, economia unitária, anomalias, forecast e custo por nó do grafo. Use para 'quanto custa', fatura, identificar recurso ocioso/caro, alocar custo a serviço/team, preparar ou validar FOCUS, custo unitário. Não use para provisioning (→ analyze iac) nem para SLO (→ platformforge-sre)."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# FinOps — custo como cidadão de 1ª classe
|
|
7
|
+
|
|
8
|
+
Input: billing JSON (FOCUS-prep shape), CSV agregado, ou dumps de
|
|
9
|
+
CUR/Azure/GCP/OpenCost/Kubecost via `finops ingest`. Sem API de billing —
|
|
10
|
+
analisar dumps, nunca consultar provider.
|
|
11
|
+
|
|
12
|
+
## Verbos
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
platformforge finops costs billing.json # resumo + findings PF-FIN-*
|
|
16
|
+
platformforge finops costs billing.json --by service|account
|
|
17
|
+
platformforge finops allocate billing.json # alocação por declaração
|
|
18
|
+
platformforge finops focus billing.json # pré-normalização FOCUS
|
|
19
|
+
platformforge finops focus-validate f.json # valida spec_version conhecida
|
|
20
|
+
platformforge finops unit billing.json # economia unitária (denominador!)
|
|
21
|
+
platformforge finops ingest <dir> # CUR/Azure/GCP/OpenCost/Kubecost
|
|
22
|
+
platformforge finops report <dir> # relatório composto
|
|
23
|
+
platformforge finops graph facts.json # custo por nó do grafo
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Disciplina
|
|
27
|
+
|
|
28
|
+
- `unallocated` é output legítimo — nunca inventar serviço para fechar 100%.
|
|
29
|
+
- Regras PF-FIN-* (ZOMBIE, UNALLOCATED, SPIKE) têm thresholds declarados no
|
|
30
|
+
catálogo; não ajustar pra passar.
|
|
31
|
+
- Custo estimado ≠ custo medido — tier da evidência carrega isso.
|
|
32
|
+
- Unit economics sem denominador real = recusa, não número fracionado.
|
|
33
|
+
- `focus-validate`: `spec_version` desconhecido → `PF-FINOPS-FOCUS-VERSION`
|
|
34
|
+
— versões novas são detectadas, não conformadas.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: platformforge-fleet
|
|
3
|
+
description: "Inteligência de frota multi-cluster/membro do Platform Forge — Fleet/FleetMember/FleetSnapshot com cobertura first-class, 9 perguntas determinísticas, grafo organizacional (8 camadas), history windows, analytics por dimensão, otimização (oportunidade → recomendação → ChangeIntent, nunca executa), federation (inteligência cruza, autoridade nunca) e consciência de plataforma AI (GPU/MIG, unit economics com denominador). Use para 'como está a frota', riscos/custos/capacidade/drift por membro, 'onde investir', cruzar clusters, ou comparar nós federados. Não use para um único repo/artefato (→ platformforge-core) nem para mutação (→ platformforge-change)."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Fleet & enterprise analytics — cobertura sempre reportada
|
|
7
|
+
|
|
8
|
+
Input: diretório de frota no shape `lab/fleets/acme` (fleet.yaml,
|
|
9
|
+
policies, capacity, requests, graph…). Coverage é first-class: resposta
|
|
10
|
+
sem cobertura declarada é inválida. Tudo read-only.
|
|
11
|
+
|
|
12
|
+
## Verbos
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
platformforge fleet list|status|coverage <dir>
|
|
16
|
+
platformforge fleet graph|risks|costs|capacity|incidents|operations|drift <dir>
|
|
17
|
+
platformforge fleet golden-path|policies|recommendations <dir>
|
|
18
|
+
platformforge fleet risks <dir> --question "<q>" # pergunta única
|
|
19
|
+
platformforge fleet report <dir> # north-star receipt
|
|
20
|
+
platformforge analytics summary|metric|maturity <path>
|
|
21
|
+
platformforge optimize scan|list|explain|portfolio <dir>
|
|
22
|
+
platformforge optimize plan <rec.json> [--out f.json] # emite ChangeIntent só
|
|
23
|
+
platformforge ai workloads|gpu|economics <path>
|
|
24
|
+
platformforge federation manifest|export|query
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Disciplina
|
|
28
|
+
|
|
29
|
+
- `planned ≠ observed`; drift mostra os dois estados.
|
|
30
|
+
- Otimização produz `ChangeIntent` — nunca executa; o pipeline Cycle-4
|
|
31
|
+
governa (boundary §303).
|
|
32
|
+
- Federation troca inteligência: `export` nega secrets/restricted em toda
|
|
33
|
+
classificação; credenciais e execução nunca cruzam.
|
|
34
|
+
- AI unit economics exige denominador real — sem, é recusa.
|
|
35
|
+
- DX metrics são team-level only; nunca individuais.
|
|
36
|
+
- History windows são estritos (24h/7d/30d/90d) — dados stale não semeiam
|
|
37
|
+
padrão.
|
|
38
|
+
- Contexto de frota é bounded: fanout por membro, nunca dump integral
|
|
39
|
+
(→ platformforge-agents para o policy de contexto).
|