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.
Files changed (659) hide show
  1. platformforge/__init__.py +7 -0
  2. platformforge/__main__.py +5 -0
  3. platformforge/_forge_portal.py +913 -0
  4. platformforge/_graphstudio.py +376 -0
  5. platformforge/_graphview.py +181 -0
  6. platformforge/_installkit.py +1706 -0
  7. platformforge/agents/__init__.py +156 -0
  8. platformforge/agents/bench.py +61 -0
  9. platformforge/agents/contextpack.py +137 -0
  10. platformforge/agents/contracts.py +394 -0
  11. platformforge/agents/coordinators.py +98 -0
  12. platformforge/agents/critic.py +113 -0
  13. platformforge/agents/debate.py +161 -0
  14. platformforge/agents/executors.py +160 -0
  15. platformforge/agents/guardian.py +48 -0
  16. platformforge/agents/mirrors.py +240 -0
  17. platformforge/agents/orchestrator.py +295 -0
  18. platformforge/agents/planner.py +116 -0
  19. platformforge/agents/playbook.py +51 -0
  20. platformforge/agents/referee.py +132 -0
  21. platformforge/agents/reviewers.py +113 -0
  22. platformforge/agents/roster.py +893 -0
  23. platformforge/agents/runledger.py +85 -0
  24. platformforge/agents/runstore.py +74 -0
  25. platformforge/agents/specialists.py +73 -0
  26. platformforge/agents/taskspec.py +94 -0
  27. platformforge/agents/uniqueness.py +115 -0
  28. platformforge/agents/verifier.py +106 -0
  29. platformforge/aiplat/__init__.py +4 -0
  30. platformforge/aiplat/models.py +175 -0
  31. platformforge/analytics/__init__.py +6 -0
  32. platformforge/analytics/capacity.py +109 -0
  33. platformforge/analytics/debt.py +92 -0
  34. platformforge/analytics/dx.py +69 -0
  35. platformforge/analytics/finops_v4.py +171 -0
  36. platformforge/analytics/goldenpath.py +131 -0
  37. platformforge/analytics/history.py +233 -0
  38. platformforge/analytics/measurement.py +149 -0
  39. platformforge/analytics/models.py +127 -0
  40. platformforge/analytics/opsanalytics.py +119 -0
  41. platformforge/analytics/policyintel.py +139 -0
  42. platformforge/analytics/reliability.py +106 -0
  43. platformforge/analytics/soak.py +135 -0
  44. platformforge/analytics/store.py +254 -0
  45. platformforge/bench.py +174 -0
  46. platformforge/cases/__init__.py +13 -0
  47. platformforge/cases/casefile.py +106 -0
  48. platformforge/cases/context_audit.py +134 -0
  49. platformforge/cases/ledgers.py +174 -0
  50. platformforge/cases/replay.py +142 -0
  51. platformforge/cases/routing_audit.py +162 -0
  52. platformforge/caveman/__init__.py +11 -0
  53. platformforge/caveman/compress.py +156 -0
  54. platformforge/cicd/__init__.py +16 -0
  55. platformforge/cicd/backstage.py +51 -0
  56. platformforge/cicd/dockerfile.py +64 -0
  57. platformforge/cicd/github_actions.py +122 -0
  58. platformforge/cicd/gitlab_ci.py +56 -0
  59. platformforge/cicd/gitops.py +130 -0
  60. platformforge/cli/__init__.py +0 -0
  61. platformforge/cli/fleetcmd.py +457 -0
  62. platformforge/cli/main.py +3832 -0
  63. platformforge/cloud/__init__.py +8 -0
  64. platformforge/cloud/aws.py +254 -0
  65. platformforge/cloud/common.py +69 -0
  66. platformforge/cloud/multicloud.py +143 -0
  67. platformforge/collect/__init__.py +11 -0
  68. platformforge/collect/detect.py +254 -0
  69. platformforge/context/__init__.py +10 -0
  70. platformforge/context/capsule.py +60 -0
  71. platformforge/context/gateway.py +227 -0
  72. platformforge/context/refs.py +49 -0
  73. platformforge/context/sufficiency.py +50 -0
  74. platformforge/core/__init__.py +1 -0
  75. platformforge/core/hashing.py +39 -0
  76. platformforge/core/ownership.py +220 -0
  77. platformforge/core/receipts.py +74 -0
  78. platformforge/core/redaction.py +97 -0
  79. platformforge/core/store.py +119 -0
  80. platformforge/core/workspace.py +89 -0
  81. platformforge/data/contracts/agent-handoff.schema.json +26 -0
  82. platformforge/data/contracts/agent-run.schema.json +27 -0
  83. platformforge/data/contracts/agent-spec.schema.json +43 -0
  84. platformforge/data/contracts/capability.schema.json +23 -0
  85. platformforge/data/contracts/change-event.schema.json +22 -0
  86. platformforge/data/contracts/change-intent.schema.json +62 -0
  87. platformforge/data/contracts/change-plan.schema.json +43 -0
  88. platformforge/data/contracts/collector-receipt.schema.json +36 -0
  89. platformforge/data/contracts/context-pack.schema.json +29 -0
  90. platformforge/data/contracts/debate.schema.json +31 -0
  91. platformforge/data/contracts/distribution-manifest-v1.schema.json +81 -0
  92. platformforge/data/contracts/drift-event.schema.json +21 -0
  93. platformforge/data/contracts/fact.schema.json +35 -0
  94. platformforge/data/contracts/finding.schema.json +20 -0
  95. platformforge/data/contracts/graph-v2.schema.json +67 -0
  96. platformforge/data/contracts/graph.schema.json +40 -0
  97. platformforge/data/contracts/install-receipt-v1.schema.json +49 -0
  98. platformforge/data/contracts/observation.schema.json +93 -0
  99. platformforge/data/contracts/receipt.schema.json +21 -0
  100. platformforge/data/contracts/recommendation.schema.json +32 -0
  101. platformforge/data/contracts/refusal.schema.json +16 -0
  102. platformforge/data/contracts/slo-contract.schema.json +25 -0
  103. platformforge/data/contracts/task-spec.schema.json +37 -0
  104. platformforge/data/contracts/workspace-manifest-v1.schema.json +62 -0
  105. platformforge/data/evals/cases/agent-budget-exhaustion/case.yaml +6 -0
  106. platformforge/data/evals/cases/agent-conflicting-specialists/case.yaml +11 -0
  107. platformforge/data/evals/cases/agent-fleet-optimization/case.yaml +13 -0
  108. platformforge/data/evals/cases/agent-host-no-subagents/case.yaml +6 -0
  109. platformforge/data/evals/cases/agent-incident-multi/case.yaml +13 -0
  110. platformforge/data/evals/cases/agent-missing-evidence/case.yaml +6 -0
  111. platformforge/data/evals/cases/agent-multi-domain-audit/case.yaml +14 -0
  112. platformforge/data/evals/cases/agent-production-change/case.yaml +15 -0
  113. platformforge/data/evals/cases/agent-security-mandatory/case.yaml +12 -0
  114. platformforge/data/evals/cases/agent-simple-iac/case.yaml +14 -0
  115. platformforge/data/evals/cases/approval-integrity-seal/case.yaml +6 -0
  116. platformforge/data/evals/cases/capacity-hot/case.yaml +7 -0
  117. platformforge/data/evals/cases/capacity-hot/fixture/capacity.json +5 -0
  118. platformforge/data/evals/cases/catalog-noowner/case.yaml +7 -0
  119. platformforge/data/evals/cases/catalog-noowner/fixture/catalog-info.yaml +6 -0
  120. platformforge/data/evals/cases/contract-fact/case.yaml +5 -0
  121. platformforge/data/evals/cases/contract-fact/fixture/doc.json +2 -0
  122. platformforge/data/evals/cases/cosign-unverified/case.yaml +8 -0
  123. platformforge/data/evals/cases/cosign-unverified/fixture/sig.json +33 -0
  124. platformforge/data/evals/cases/expected-delta-refusal/case.yaml +6 -0
  125. platformforge/data/evals/cases/finops-noattr/case.yaml +9 -0
  126. platformforge/data/evals/cases/finops-noattr/fixture/costs.json +7 -0
  127. platformforge/data/evals/cases/fleet-inv-absent-allocation-unknown/case.yaml +7 -0
  128. platformforge/data/evals/cases/fleet-inv-centrality-not-criticality/case.yaml +7 -0
  129. platformforge/data/evals/cases/fleet-inv-correlation-not-causality/case.yaml +7 -0
  130. platformforge/data/evals/cases/fleet-inv-dx-no-person-metrics/case.yaml +7 -0
  131. platformforge/data/evals/cases/fleet-inv-federation-restricted-denied/case.yaml +7 -0
  132. platformforge/data/evals/cases/fleet-inv-federation-secret-denied/case.yaml +7 -0
  133. platformforge/data/evals/cases/fleet-inv-history-window-deterministic/case.yaml +7 -0
  134. platformforge/data/evals/cases/fleet-inv-low-util-not-deletable/case.yaml +7 -0
  135. platformforge/data/evals/cases/fleet-inv-member-key-deterministic/case.yaml +7 -0
  136. platformforge/data/evals/cases/fleet-inv-missing-denominator/case.yaml +7 -0
  137. platformforge/data/evals/cases/fleet-inv-partial-coverage-visible/case.yaml +7 -0
  138. platformforge/data/evals/cases/fleet-inv-plan-changeintent-only/case.yaml +7 -0
  139. platformforge/data/evals/cases/fleet-inv-report-all-cited/case.yaml +7 -0
  140. platformforge/data/evals/cases/fleet-inv-small-sample-confidence/case.yaml +7 -0
  141. platformforge/data/evals/cases/fleet-inv-uncertain-optimization-suppressed/case.yaml +7 -0
  142. platformforge/data/evals/cases/gha-dangerous/case.yaml +12 -0
  143. platformforge/data/evals/cases/gha-dangerous/fixture/.github/workflows/ci.yaml +11 -0
  144. platformforge/data/evals/cases/gitops-v2/case.yaml +11 -0
  145. platformforge/data/evals/cases/gitops-v2/fixture/argo.yaml +41 -0
  146. platformforge/data/evals/cases/graph-k8s-blast/case.yaml +7 -0
  147. platformforge/data/evals/cases/graph-k8s-blast/fixture/deploy.yaml +15 -0
  148. platformforge/data/evals/cases/iac-module-nopin/case.yaml +8 -0
  149. platformforge/data/evals/cases/iac-module-nopin/fixture/main.tf +3 -0
  150. platformforge/data/evals/cases/iac-plan-replace/case.yaml +8 -0
  151. platformforge/data/evals/cases/iac-plan-replace/fixture/plan.json +12 -0
  152. platformforge/data/evals/cases/iac-sg-open/case.yaml +8 -0
  153. platformforge/data/evals/cases/iac-sg-open/fixture/main.tf +9 -0
  154. platformforge/data/evals/cases/iam-oidc/case.yaml +8 -0
  155. platformforge/data/evals/cases/iam-oidc/fixture/policy.json +11 -0
  156. platformforge/data/evals/cases/iam-wildcard-positive/case.yaml +8 -0
  157. platformforge/data/evals/cases/iam-wildcard-positive/fixture/policy.json +3 -0
  158. platformforge/data/evals/cases/k8s-bad-actor/case.yaml +19 -0
  159. platformforge/data/evals/cases/k8s-bad-actor/fixture/app.yaml +97 -0
  160. platformforge/data/evals/cases/k8s-beta-api/case.yaml +8 -0
  161. platformforge/data/evals/cases/k8s-beta-api/fixture/cr.yaml +7 -0
  162. platformforge/data/evals/cases/k8s-dep-api-boundary/case.yaml +15 -0
  163. platformforge/data/evals/cases/k8s-dep-api-boundary/fixture/app.yaml +25 -0
  164. platformforge/data/evals/cases/k8s-dep-api-clean/case.yaml +12 -0
  165. platformforge/data/evals/cases/k8s-dep-api-clean/fixture/app.yaml +29 -0
  166. platformforge/data/evals/cases/k8s-dep-api-unknown/case.yaml +11 -0
  167. platformforge/data/evals/cases/k8s-dep-api-unknown/fixture/app.yaml +25 -0
  168. platformforge/data/evals/cases/k8s-dep-api-v120/case.yaml +12 -0
  169. platformforge/data/evals/cases/k8s-dep-api-v120/fixture/app.yaml +25 -0
  170. platformforge/data/evals/cases/k8s-dep-api-v129/case.yaml +9 -0
  171. platformforge/data/evals/cases/k8s-dep-api-v129/fixture/app.yaml +25 -0
  172. platformforge/data/evals/cases/k8s-hpa-noreq/case.yaml +8 -0
  173. platformforge/data/evals/cases/k8s-hpa-noreq/fixture/app.yaml +28 -0
  174. platformforge/data/evals/cases/k8s-limits-boundary/case.yaml +10 -0
  175. platformforge/data/evals/cases/k8s-limits-boundary/fixture/app.yaml +15 -0
  176. platformforge/data/evals/cases/k8s-limits-negative/case.yaml +8 -0
  177. platformforge/data/evals/cases/k8s-limits-negative/fixture/deploy.yaml +15 -0
  178. platformforge/data/evals/cases/k8s-limits-positive/case.yaml +8 -0
  179. platformforge/data/evals/cases/k8s-limits-positive/fixture/deploy.yaml +14 -0
  180. platformforge/data/evals/cases/k8s-nopdb/case.yaml +7 -0
  181. platformforge/data/evals/cases/k8s-nopdb/fixture/app.yaml +34 -0
  182. platformforge/data/evals/cases/knowledge-registry/case.yaml +10 -0
  183. platformforge/data/evals/cases/kyverno-dep/case.yaml +10 -0
  184. platformforge/data/evals/cases/kyverno-dep/fixture/pol.yaml +18 -0
  185. platformforge/data/evals/cases/kyverno-legacy/case.yaml +8 -0
  186. platformforge/data/evals/cases/kyverno-legacy/fixture/pol.yaml +7 -0
  187. platformforge/data/evals/cases/live-aws-collect/case.yaml +11 -0
  188. platformforge/data/evals/cases/live-aws-collect/fixture/aws/ec2_describe-vpcs.json +15 -0
  189. platformforge/data/evals/cases/live-aws-collect/fixture/aws/iam_list-users.denied.txt +1 -0
  190. platformforge/data/evals/cases/live-aws-collect/fixture/aws/sts_get-caller-identity.json +5 -0
  191. platformforge/data/evals/cases/live-drift/case.yaml +8 -0
  192. platformforge/data/evals/cases/live-drift/fixture/after.json +22 -0
  193. platformforge/data/evals/cases/live-drift/fixture/before.json +22 -0
  194. platformforge/data/evals/cases/live-incident/case.yaml +7 -0
  195. platformforge/data/evals/cases/live-incident/fixture/changes.json +8 -0
  196. platformforge/data/evals/cases/live-incident/fixture/incident.json +7 -0
  197. platformforge/data/evals/cases/live-k8s-collect/case.yaml +10 -0
  198. platformforge/data/evals/cases/live-k8s-collect/fixture/kubectl/get_configmaps.denied.txt +1 -0
  199. platformforge/data/evals/cases/live-k8s-collect/fixture/kubectl/get_deployments.apps.json +25 -0
  200. platformforge/data/evals/cases/live-k8s-collect/fixture/kubectl/get_pods.json +17 -0
  201. platformforge/data/evals/cases/live-k8s-collect/fixture/kubectl/get_secrets.json +13 -0
  202. platformforge/data/evals/cases/live-multicluster/case.yaml +7 -0
  203. platformforge/data/evals/cases/live-multicluster/fixture/clusters.json +6 -0
  204. platformforge/data/evals/cases/live-plan/case.yaml +7 -0
  205. platformforge/data/evals/cases/live-plan/fixture/drift.json +8 -0
  206. platformforge/data/evals/cases/live-reconcile/case.yaml +7 -0
  207. platformforge/data/evals/cases/live-reconcile/fixture/desired.json +7 -0
  208. platformforge/data/evals/cases/live-reconcile/fixture/observed.json +18 -0
  209. platformforge/data/evals/cases/live-secrets-boundary/case.yaml +8 -0
  210. platformforge/data/evals/cases/live-secrets-boundary/fixture/envelope.json +16 -0
  211. platformforge/data/evals/cases/live-temporal-graph/case.yaml +10 -0
  212. platformforge/data/evals/cases/live-temporal-graph/fixture/graph.json +22 -0
  213. platformforge/data/evals/cases/ops-approval/case.yaml +6 -0
  214. platformforge/data/evals/cases/ops-convergence/case.yaml +6 -0
  215. platformforge/data/evals/cases/ops-execution-safety/case.yaml +6 -0
  216. platformforge/data/evals/cases/ops-intent/case.yaml +6 -0
  217. platformforge/data/evals/cases/ops-planning/case.yaml +6 -0
  218. platformforge/data/evals/cases/ops-policy/case.yaml +6 -0
  219. platformforge/data/evals/cases/ops-rollback/case.yaml +6 -0
  220. platformforge/data/evals/cases/ops-verification/case.yaml +6 -0
  221. platformforge/data/evals/cases/rollback-argocd-revision/case.yaml +6 -0
  222. platformforge/data/evals/cases/rollback-blind-inverse/case.yaml +6 -0
  223. platformforge/data/evals/cases/rollback-git-commit/case.yaml +6 -0
  224. platformforge/data/evals/cases/rollback-impossible/case.yaml +6 -0
  225. platformforge/data/evals/cases/rollback-k8s-annotation-restore/case.yaml +6 -0
  226. platformforge/data/evals/cases/rollback-k8s-scale/case.yaml +6 -0
  227. platformforge/data/evals/cases/rollback-material-tamper/case.yaml +6 -0
  228. platformforge/data/evals/cases/rollback-terraform-replan/case.yaml +6 -0
  229. platformforge/data/evals/cases/rollback-unknown/case.yaml +6 -0
  230. platformforge/data/evals/cases/routing-specialist/case.yaml +9 -0
  231. platformforge/data/evals/cases/rtk-roundtrip/case.yaml +5 -0
  232. platformforge/data/evals/cases/rtk-roundtrip/fixture/verbose.txt +300 -0
  233. platformforge/data/evals/cases/sbom-vuln/case.yaml +9 -0
  234. platformforge/data/evals/cases/sbom-vuln/fixture/sbom.json +9 -0
  235. platformforge/data/evals/cases/secret-prose-mixed/fixture/app.env +1 -0
  236. platformforge/data/evals/cases/secret-prose-mixed/fixture/policy-notes.md +7 -0
  237. platformforge/data/evals/cases/secrets-noleak/case.yaml +5 -0
  238. platformforge/data/evals/cases/secrets-noleak/fixture/app.env +2 -0
  239. platformforge/data/evals/cases/slo-fastburn/case.yaml +8 -0
  240. platformforge/data/evals/cases/slo-fastburn/fixture/events.yaml +2 -0
  241. platformforge/data/evals/cases/slo-fastburn/fixture/slo.yaml +4 -0
  242. platformforge/data/evals/cases/slo-noinput/case.yaml +8 -0
  243. platformforge/data/evals/cases/slo-noinput/fixture/events.yaml +1 -0
  244. platformforge/data/evals/cases/slo-noinput/fixture/slo.yaml +4 -0
  245. platformforge/data/evals/cases/sot-conflict/case.yaml +6 -0
  246. platformforge/data/evals/cases/token-budget/case.yaml +6 -0
  247. platformforge/data/evals/cases/token-budget/fixture/big.py +50 -0
  248. platformforge/data/evals/cases/xr-delete/case.yaml +8 -0
  249. platformforge/data/evals/cases/xr-delete/fixture/xr.yaml +10 -0
  250. platformforge/data/evals/cases/xr-graph-chain/case.yaml +8 -0
  251. platformforge/data/evals/cases/xr-graph-chain/fixture/xrd.yaml +90 -0
  252. platformforge/data/evals/cases/xr-negative-crd/case.yaml +8 -0
  253. platformforge/data/evals/cases/xr-negative-crd/fixture/widget.yaml +19 -0
  254. platformforge/data/evals/cases/xr-upbound-mr/case.yaml +8 -0
  255. platformforge/data/evals/cases/xr-upbound-mr/fixture/bucket.yaml +12 -0
  256. platformforge/data/evals/qpt-bench/change-review/case.yaml +5 -0
  257. platformforge/data/evals/qpt-bench/change-review/fixture/plan.json +9 -0
  258. platformforge/data/evals/qpt-bench/gha-security/case.yaml +5 -0
  259. platformforge/data/evals/qpt-bench/gha-security/fixture/ci.yml +10 -0
  260. platformforge/data/evals/qpt-bench/iam-investigate/case.yaml +5 -0
  261. platformforge/data/evals/qpt-bench/iam-investigate/fixture/policy.json +6 -0
  262. platformforge/data/evals/qpt-bench/incident-analysis/case.yaml +5 -0
  263. platformforge/data/evals/qpt-bench/incident-analysis/fixture/query.json +5 -0
  264. platformforge/data/evals/qpt-bench/incident-analysis/fixture/rules.yaml +6 -0
  265. platformforge/data/evals/qpt-bench/k8s-review/case.yaml +6 -0
  266. platformforge/data/evals/qpt-bench/k8s-review/fixture/deploy.yaml +15 -0
  267. platformforge/data/evals/qpt-bench/tf-security/case.yaml +5 -0
  268. platformforge/data/evals/qpt-bench/tf-security/fixture/main.tf +17 -0
  269. platformforge/data/knowledge/aws/eks.yaml +20 -0
  270. platformforge/data/knowledge/aws/iam.yaml +28 -0
  271. platformforge/data/knowledge/aws/network-exposure.yaml +19 -0
  272. platformforge/data/knowledge/aws/organizations.yaml +19 -0
  273. platformforge/data/knowledge/crossplane/composition-providers.yaml +20 -0
  274. platformforge/data/knowledge/crossplane/managed-resources.yaml +26 -0
  275. platformforge/data/knowledge/crossplane/v1-v2.yaml +25 -0
  276. platformforge/data/knowledge/kubernetes/api-deprecations.yaml +33 -0
  277. platformforge/data/knowledge/kubernetes/autoscaling-rbac.yaml +27 -0
  278. platformforge/data/knowledge/kubernetes/gateway-api.yaml +20 -0
  279. platformforge/data/knowledge/kubernetes/pod-security.yaml +26 -0
  280. platformforge/data/knowledge/sources.yaml +516 -0
  281. platformforge/data/knowledge/terraform/lifecycle.yaml +18 -0
  282. platformforge/data/knowledge/terraform/plan-semantics.yaml +26 -0
  283. platformforge/data/lab/chaos-pod-kill/chaos.yaml +3 -0
  284. platformforge/data/lab/chaos-pod-kill/facts.json +13 -0
  285. platformforge/data/lab/fleets/acme/capacity.yaml +35 -0
  286. platformforge/data/lab/fleets/acme/costs.yaml +25 -0
  287. platformforge/data/lab/fleets/acme/events.yaml +41 -0
  288. platformforge/data/lab/fleets/acme/fleet.yaml +51 -0
  289. platformforge/data/lab/fleets/acme/graph.yaml +45 -0
  290. platformforge/data/lab/fleets/acme/policies.yaml +28 -0
  291. platformforge/data/lab/fleets/acme/requests.yaml +24 -0
  292. platformforge/data/lab/scenarios/argo-bad-rollout/expected.yaml +6 -0
  293. platformforge/data/lab/scenarios/argo-bad-rollout/fixture/app.yaml +9 -0
  294. platformforge/data/lab/scenarios/aws-dump/expected.yaml +19 -0
  295. platformforge/data/lab/scenarios/aws-dump/fixture/compute.json +4 -0
  296. platformforge/data/lab/scenarios/aws-dump/fixture/iam.json +7 -0
  297. platformforge/data/lab/scenarios/aws-dump/fixture/network.json +6 -0
  298. platformforge/data/lab/scenarios/aws-dump/fixture/org.json +4 -0
  299. platformforge/data/lab/scenarios/aws-dump/fixture/storage.json +4 -0
  300. platformforge/data/lab/scenarios/container-unsigned/expected.yaml +5 -0
  301. platformforge/data/lab/scenarios/container-unsigned/fixture/supply.json +11 -0
  302. platformforge/data/lab/scenarios/cost-idle-workload/expected.yaml +5 -0
  303. platformforge/data/lab/scenarios/cost-idle-workload/fixture/costs.json +12 -0
  304. platformforge/data/lab/scenarios/crossplane-platform/expected.yaml +16 -0
  305. platformforge/data/lab/scenarios/crossplane-platform/fixture/negative.yaml +18 -0
  306. platformforge/data/lab/scenarios/crossplane-platform/fixture/xrd.yaml +90 -0
  307. platformforge/data/lab/scenarios/demo-platform/expected.yaml +16 -0
  308. platformforge/data/lab/scenarios/demo-platform/fixture/.github/workflows/ci.yml +10 -0
  309. platformforge/data/lab/scenarios/demo-platform/fixture/deploy.yaml +16 -0
  310. platformforge/data/lab/scenarios/demo-platform/fixture/infra.tf +5 -0
  311. platformforge/data/lab/scenarios/fleet-ai/expected.yaml +12 -0
  312. platformforge/data/lab/scenarios/fleet-capacity/expected.yaml +12 -0
  313. platformforge/data/lab/scenarios/fleet-cost/expected.yaml +18 -0
  314. platformforge/data/lab/scenarios/fleet-federation/expected.yaml +11 -0
  315. platformforge/data/lab/scenarios/fleet-golden-path/expected.yaml +18 -0
  316. platformforge/data/lab/scenarios/fleet-op-hotspot/expected.yaml +11 -0
  317. platformforge/data/lab/scenarios/fleet-ownership/expected.yaml +17 -0
  318. platformforge/data/lab/scenarios/fleet-partial/expected.yaml +10 -0
  319. platformforge/data/lab/scenarios/fleet-policy-friction/expected.yaml +10 -0
  320. platformforge/data/lab/scenarios/fleet-recurring-incident/expected.yaml +12 -0
  321. platformforge/data/lab/scenarios/fleet-report/expected.yaml +13 -0
  322. platformforge/data/lab/scenarios/fleet-risk/expected.yaml +18 -0
  323. platformforge/data/lab/scenarios/gitops-drift/expected.yaml +6 -0
  324. platformforge/data/lab/scenarios/gitops-drift/fixture/app.yaml +12 -0
  325. platformforge/data/lab/scenarios/k8s-bad-readiness/expected.yaml +6 -0
  326. platformforge/data/lab/scenarios/k8s-bad-readiness/fixture/deploy.yaml +23 -0
  327. platformforge/data/lab/scenarios/k8s-bad-readiness/fixture/netpol.yaml +9 -0
  328. platformforge/data/lab/scenarios/k8s-missing-limits/expected.yaml +6 -0
  329. platformforge/data/lab/scenarios/k8s-missing-limits/fixture/deploy.yaml +26 -0
  330. platformforge/data/lab/scenarios/k8s-missing-limits/fixture/netpol.yaml +9 -0
  331. platformforge/data/lab/scenarios/k8s-single-replica/expected.yaml +5 -0
  332. platformforge/data/lab/scenarios/k8s-single-replica/fixture/deploy.yaml +26 -0
  333. platformforge/data/lab/scenarios/k8s-single-replica/fixture/netpol.yaml +4 -0
  334. platformforge/data/lab/scenarios/live-aws-collect/expected.yaml +4 -0
  335. platformforge/data/lab/scenarios/live-aws-collect/fixture/aws/ec2_describe-vpcs.json +15 -0
  336. platformforge/data/lab/scenarios/live-aws-collect/fixture/aws/iam_list-users.denied.txt +1 -0
  337. platformforge/data/lab/scenarios/live-aws-collect/fixture/aws/sts_get-caller-identity.json +5 -0
  338. platformforge/data/lab/scenarios/live-k8s-collect/expected.yaml +4 -0
  339. platformforge/data/lab/scenarios/live-k8s-collect/fixture/kubectl/get_configmaps.denied.txt +1 -0
  340. platformforge/data/lab/scenarios/live-k8s-collect/fixture/kubectl/get_deployments.apps.json +25 -0
  341. platformforge/data/lab/scenarios/live-k8s-collect/fixture/kubectl/get_pods.json +17 -0
  342. platformforge/data/lab/scenarios/live-k8s-collect/fixture/kubectl/get_secrets.json +13 -0
  343. platformforge/data/lab/scenarios/live-kind/expected.yaml +14 -0
  344. platformforge/data/lab/scenarios/live-kind/fixture/kubectl/get_configmaps.denied.txt +1 -0
  345. platformforge/data/lab/scenarios/live-kind/fixture/kubectl/get_deployments.apps.json +25 -0
  346. platformforge/data/lab/scenarios/live-kind/fixture/kubectl/get_pods.json +17 -0
  347. platformforge/data/lab/scenarios/live-kind/fixture/kubectl/get_secrets.json +13 -0
  348. platformforge/data/lab/scenarios/network-policy-missing/expected.yaml +6 -0
  349. platformforge/data/lab/scenarios/network-policy-missing/fixture/deploy.yaml +26 -0
  350. platformforge/data/lab/scenarios/ops-bad-rollout/expected.yaml +3 -0
  351. platformforge/data/lab/scenarios/ops-bad-rollout/fixture/ops.yaml +33 -0
  352. platformforge/data/lab/scenarios/ops-break-glass/expected.yaml +3 -0
  353. platformforge/data/lab/scenarios/ops-break-glass/fixture/ops.yaml +21 -0
  354. platformforge/data/lab/scenarios/ops-broken-selector/expected.yaml +3 -0
  355. platformforge/data/lab/scenarios/ops-broken-selector/fixture/ops.yaml +21 -0
  356. platformforge/data/lab/scenarios/ops-changed-plan-hash/expected.yaml +3 -0
  357. platformforge/data/lab/scenarios/ops-changed-plan-hash/fixture/ops.yaml +20 -0
  358. platformforge/data/lab/scenarios/ops-conflicting-operation/expected.yaml +3 -0
  359. platformforge/data/lab/scenarios/ops-conflicting-operation/fixture/ops.yaml +21 -0
  360. platformforge/data/lab/scenarios/ops-expired-approval/expected.yaml +3 -0
  361. platformforge/data/lab/scenarios/ops-expired-approval/fixture/ops.yaml +20 -0
  362. platformforge/data/lab/scenarios/ops-partial-failure/expected.yaml +3 -0
  363. platformforge/data/lab/scenarios/ops-partial-failure/fixture/ops.yaml +24 -0
  364. platformforge/data/lab/scenarios/ops-policy-denial/expected.yaml +3 -0
  365. platformforge/data/lab/scenarios/ops-policy-denial/fixture/ops.yaml +17 -0
  366. platformforge/data/lab/scenarios/ops-replica-drift/expected.yaml +3 -0
  367. platformforge/data/lab/scenarios/ops-replica-drift/fixture/ops.yaml +28 -0
  368. platformforge/data/lab/scenarios/ops-rollback-annotate/expected.yaml +3 -0
  369. platformforge/data/lab/scenarios/ops-rollback-annotate/fixture/ops.yaml +41 -0
  370. platformforge/data/lab/scenarios/ops-rollback-gitops/expected.yaml +3 -0
  371. platformforge/data/lab/scenarios/ops-rollback-gitops/fixture/ops.yaml +38 -0
  372. platformforge/data/lab/scenarios/ops-rollback-impossible/expected.yaml +3 -0
  373. platformforge/data/lab/scenarios/ops-rollback-impossible/fixture/ops.yaml +34 -0
  374. platformforge/data/lab/scenarios/ops-rollback-scale/expected.yaml +3 -0
  375. platformforge/data/lab/scenarios/ops-rollback-scale/fixture/ops.yaml +40 -0
  376. platformforge/data/lab/scenarios/ops-rollback-terraform/expected.yaml +3 -0
  377. platformforge/data/lab/scenarios/ops-rollback-terraform/fixture/ops.yaml +38 -0
  378. platformforge/data/lab/scenarios/ops-rollback-terraform/fixture/tf/tfplan.bin +1 -0
  379. platformforge/data/lab/scenarios/ops-stale-observation/expected.yaml +3 -0
  380. platformforge/data/lab/scenarios/ops-stale-observation/fixture/ops.yaml +20 -0
  381. platformforge/data/lab/scenarios/secret-exposure/expected.yaml +5 -0
  382. platformforge/data/lab/scenarios/secret-exposure/fixture/app.env +2 -0
  383. platformforge/data/lab/scenarios/slo-burn/expected.yaml +5 -0
  384. platformforge/data/lab/scenarios/slo-burn/fixture/events.yaml +2 -0
  385. platformforge/data/lab/scenarios/slo-burn/fixture/slo.yaml +4 -0
  386. platformforge/data/lab/scenarios/terraform-iam-wildcard/expected.yaml +5 -0
  387. platformforge/data/lab/scenarios/terraform-iam-wildcard/fixture/policy.json +14 -0
  388. platformforge/data/lab/scenarios/terraform-public-bucket/expected.yaml +6 -0
  389. platformforge/data/lab/scenarios/terraform-public-bucket/fixture/main.tf +5 -0
  390. platformforge/data/portable_skills/platformforge-agents/SKILL.md +47 -0
  391. platformforge/data/portable_skills/platformforge-change/SKILL.md +41 -0
  392. platformforge/data/portable_skills/platformforge-core/SKILL.md +62 -0
  393. platformforge/data/portable_skills/platformforge-economy/SKILL.md +42 -0
  394. platformforge/data/portable_skills/platformforge-finops/SKILL.md +34 -0
  395. platformforge/data/portable_skills/platformforge-fleet/SKILL.md +39 -0
  396. platformforge/data/portable_skills/platformforge-governance/SKILL.md +76 -0
  397. platformforge/data/portable_skills/platformforge-graph/SKILL.md +46 -0
  398. platformforge/data/portable_skills/platformforge-lab/SKILL.md +39 -0
  399. platformforge/data/portable_skills/platformforge-sdd/SKILL.md +39 -0
  400. platformforge/data/portable_skills/platformforge-security/SKILL.md +38 -0
  401. platformforge/data/portable_skills/platformforge-sre/SKILL.md +41 -0
  402. platformforge/data/rules/catalog/finops.yaml +26 -0
  403. platformforge/data/rules/catalog/gitops.yaml +161 -0
  404. platformforge/data/rules/catalog/iac.yaml +84 -0
  405. platformforge/data/rules/catalog/k8s.yaml +322 -0
  406. platformforge/data/rules/catalog/orchestration.yaml +99 -0
  407. platformforge/data/rules/catalog/product.yaml +42 -0
  408. platformforge/data/rules/catalog/routing.yaml +122 -0
  409. platformforge/data/rules/catalog/security.yaml +159 -0
  410. platformforge/data/rules/catalog/sre.yaml +67 -0
  411. platformforge/diagnose/__init__.py +75 -0
  412. platformforge/distribution/__init__.py +18 -0
  413. platformforge/distribution/bundle.py +127 -0
  414. platformforge/distribution/hostflow.py +247 -0
  415. platformforge/distribution/models.py +80 -0
  416. platformforge/distribution/service.py +225 -0
  417. platformforge/economy/__init__.py +27 -0
  418. platformforge/economy/bench.py +66 -0
  419. platformforge/economy/budget.py +198 -0
  420. platformforge/economy/cache.py +287 -0
  421. platformforge/economy/checkpoint.py +112 -0
  422. platformforge/economy/collection.py +142 -0
  423. platformforge/economy/doctor.py +207 -0
  424. platformforge/economy/engine.py +158 -0
  425. platformforge/economy/envelope.py +61 -0
  426. platformforge/economy/fleetpack.py +86 -0
  427. platformforge/economy/ledger.py +232 -0
  428. platformforge/economy/plan.py +131 -0
  429. platformforge/economy/pricing.py +101 -0
  430. platformforge/economy/qpt.py +286 -0
  431. platformforge/economy/reconcile.py +86 -0
  432. platformforge/economy/verifyplan.py +107 -0
  433. platformforge/economy/waste.py +123 -0
  434. platformforge/evals/__init__.py +16 -0
  435. platformforge/evals/coverage.py +140 -0
  436. platformforge/evals/fleet_invariants.py +260 -0
  437. platformforge/evals/ops_invariants.py +158 -0
  438. platformforge/evals/runner.py +541 -0
  439. platformforge/federation/__init__.py +4 -0
  440. platformforge/federation/node.py +135 -0
  441. platformforge/finops/__init__.py +14 -0
  442. platformforge/finops/alloc.py +31 -0
  443. platformforge/finops/costs.py +79 -0
  444. platformforge/finops/focus.py +100 -0
  445. platformforge/finops/graph_cost.py +51 -0
  446. platformforge/finops/ingest.py +144 -0
  447. platformforge/finops/insights.py +193 -0
  448. platformforge/finops/unit.py +36 -0
  449. platformforge/fleet/__init__.py +5 -0
  450. platformforge/fleet/loader.py +73 -0
  451. platformforge/fleet/models.py +155 -0
  452. platformforge/fleet/orggraph.py +172 -0
  453. platformforge/fleet/query.py +154 -0
  454. platformforge/forge/__init__.py +9 -0
  455. platformforge/forge/collect.py +88 -0
  456. platformforge/forge/delegate.py +77 -0
  457. platformforge/forge/manifest.py +106 -0
  458. platformforge/freeze/__init__.py +22 -0
  459. platformforge/freeze/exceptions.py +56 -0
  460. platformforge/freeze/manifest.py +167 -0
  461. platformforge/freeze/snapshots.py +108 -0
  462. platformforge/graph/__init__.py +39 -0
  463. platformforge/graph/backend.py +174 -0
  464. platformforge/graph/bench.py +245 -0
  465. platformforge/graph/build.py +130 -0
  466. platformforge/graph/delivery.py +183 -0
  467. platformforge/graph/diff.py +292 -0
  468. platformforge/graph/events.py +116 -0
  469. platformforge/graph/migrate.py +44 -0
  470. platformforge/graph/model.py +264 -0
  471. platformforge/graph/persist.py +97 -0
  472. platformforge/graph/query.py +290 -0
  473. platformforge/graph/temporal.py +78 -0
  474. platformforge/graph/vocab.py +63 -0
  475. platformforge/graphview.py +94 -0
  476. platformforge/iac/__init__.py +7 -0
  477. platformforge/iac/drift.py +53 -0
  478. platformforge/iac/plan.py +84 -0
  479. platformforge/iac/terraform.py +123 -0
  480. platformforge/install/__init__.py +1 -0
  481. platformforge/install/service.py +421 -0
  482. platformforge/k8s/__init__.py +8 -0
  483. platformforge/k8s/helm.py +152 -0
  484. platformforge/k8s/hubble.py +87 -0
  485. platformforge/k8s/manifests.py +513 -0
  486. platformforge/knowledge/__init__.py +1 -0
  487. platformforge/knowledge/packs.py +157 -0
  488. platformforge/knowledge/registry.py +249 -0
  489. platformforge/knowledge/select.py +127 -0
  490. platformforge/lab/__init__.py +5 -0
  491. platformforge/lab/chaos.py +71 -0
  492. platformforge/lab/fleetlab.py +351 -0
  493. platformforge/lab/opslab.py +271 -0
  494. platformforge/lab/runner.py +219 -0
  495. platformforge/live/__init__.py +36 -0
  496. platformforge/live/budget.py +92 -0
  497. platformforge/live/capability.py +80 -0
  498. platformforge/live/collectors/__init__.py +6 -0
  499. platformforge/live/collectors/aws.py +370 -0
  500. platformforge/live/collectors/aws_transport.py +98 -0
  501. platformforge/live/collectors/k8s.py +389 -0
  502. platformforge/live/collectors/k8s_transport.py +85 -0
  503. platformforge/live/cursors.py +48 -0
  504. platformforge/live/drift.py +130 -0
  505. platformforge/live/envelope.py +85 -0
  506. platformforge/live/federation.py +113 -0
  507. platformforge/live/fixtures.py +168 -0
  508. platformforge/live/identity.py +258 -0
  509. platformforge/live/incident.py +200 -0
  510. platformforge/live/models.py +435 -0
  511. platformforge/live/reconcile.py +382 -0
  512. platformforge/live/remediate.py +169 -0
  513. platformforge/live/store.py +256 -0
  514. platformforge/live/topology.py +249 -0
  515. platformforge/mcp/__init__.py +7 -0
  516. platformforge/mcp/parity.py +69 -0
  517. platformforge/mcp/registry.py +427 -0
  518. platformforge/mcp/server.py +84 -0
  519. platformforge/mcp/tools.py +732 -0
  520. platformforge/models/__init__.py +21 -0
  521. platformforge/models/base.py +214 -0
  522. platformforge/observe/__init__.py +26 -0
  523. platformforge/observe/capacity.py +39 -0
  524. platformforge/observe/dr.py +67 -0
  525. platformforge/observe/grafana.py +76 -0
  526. platformforge/observe/incident.py +58 -0
  527. platformforge/observe/otel.py +135 -0
  528. platformforge/observe/postmortem.py +72 -0
  529. platformforge/observe/prometheus.py +88 -0
  530. platformforge/observe/slo.py +125 -0
  531. platformforge/ops/__init__.py +8 -0
  532. platformforge/ops/actions.py +215 -0
  533. platformforge/ops/analytics.py +83 -0
  534. platformforge/ops/approval.py +275 -0
  535. platformforge/ops/autorem.py +101 -0
  536. platformforge/ops/config.py +175 -0
  537. platformforge/ops/engine.py +758 -0
  538. platformforge/ops/envelope.py +135 -0
  539. platformforge/ops/executors/__init__.py +1 -0
  540. platformforge/ops/executors/base.py +211 -0
  541. platformforge/ops/executors/git.py +77 -0
  542. platformforge/ops/executors/gitops.py +134 -0
  543. platformforge/ops/executors/terraform.py +84 -0
  544. platformforge/ops/gates.py +135 -0
  545. platformforge/ops/goldenpath.py +180 -0
  546. platformforge/ops/material.py +181 -0
  547. platformforge/ops/models.py +421 -0
  548. platformforge/ops/operation.py +335 -0
  549. platformforge/ops/opgraph.py +233 -0
  550. platformforge/ops/policy.py +275 -0
  551. platformforge/ops/preconditions.py +109 -0
  552. platformforge/ops/registry.py +101 -0
  553. platformforge/ops/risk.py +216 -0
  554. platformforge/ops/rollback.py +287 -0
  555. platformforge/ops/rollback_builders.py +163 -0
  556. platformforge/ops/runbook.py +269 -0
  557. platformforge/ops/simulate.py +125 -0
  558. platformforge/ops/source_of_truth.py +198 -0
  559. platformforge/ops/store.py +157 -0
  560. platformforge/ops/verify.py +190 -0
  561. platformforge/optimize/__init__.py +4 -0
  562. platformforge/optimize/engine.py +109 -0
  563. platformforge/optimize/models.py +68 -0
  564. platformforge/optimize/scan.py +196 -0
  565. platformforge/plan/__init__.py +107 -0
  566. platformforge/portable_cli.py +199 -0
  567. platformforge/portal_adapter.py +740 -0
  568. platformforge/portal_assets/chunk-7_l-b4Tr.js +1 -0
  569. platformforge/portal_assets/chunk-B0Iad6pD.js +1 -0
  570. platformforge/portal_assets/chunk-B605XnCF.js +1 -0
  571. platformforge/portal_assets/chunk-B7N3TXcn.js +1 -0
  572. platformforge/portal_assets/chunk-BAj6yGem.js +1 -0
  573. platformforge/portal_assets/chunk-BGUitn2r.js +1 -0
  574. platformforge/portal_assets/chunk-BVKnCv85.js +1 -0
  575. platformforge/portal_assets/chunk-BYyM9V_w.js +1 -0
  576. platformforge/portal_assets/chunk-BaQMhq-G.js +1 -0
  577. platformforge/portal_assets/chunk-BavOrxVm.js +1 -0
  578. platformforge/portal_assets/chunk-Bb0C24YV.js +1 -0
  579. platformforge/portal_assets/chunk-BfCFGPzs.js +1 -0
  580. platformforge/portal_assets/chunk-C2t4OUVu.js +1 -0
  581. platformforge/portal_assets/chunk-C3pI4QjU.js +1 -0
  582. platformforge/portal_assets/chunk-C4gpbtbP.js +1 -0
  583. platformforge/portal_assets/chunk-CGWeHhKY.js +1 -0
  584. platformforge/portal_assets/chunk-CJCT86Dr.js +1 -0
  585. platformforge/portal_assets/chunk-CXcsLDPJ.js +1 -0
  586. platformforge/portal_assets/chunk-CcjxoLxw.js +1 -0
  587. platformforge/portal_assets/chunk-D-gBPXHa.js +1 -0
  588. platformforge/portal_assets/chunk-D3eZogIe.js +1 -0
  589. platformforge/portal_assets/chunk-DQU0VyoQ.js +1 -0
  590. platformforge/portal_assets/chunk-DqWNkF1O.js +1 -0
  591. platformforge/portal_assets/chunk-DuPPkSIE.js +3 -0
  592. platformforge/portal_assets/chunk-DyIHOW_a.js +1 -0
  593. platformforge/portal_assets/chunk-Fx4zSGL5.js +1 -0
  594. platformforge/portal_assets/chunk-UBKt05Rg.js +1 -0
  595. platformforge/portal_assets/chunk-htnJDQEY.js +1 -0
  596. platformforge/portal_assets/chunk-kXRFMGqe.js +1 -0
  597. platformforge/portal_assets/chunk-qe3u763a.js +1 -0
  598. platformforge/portal_assets/favicon.ico +0 -0
  599. platformforge/portal_assets/index.html +13 -0
  600. platformforge/portal_assets/main-QDFVZK3T.js +5 -0
  601. platformforge/portal_assets/styles-MQEBDFDX.css +1 -0
  602. platformforge/product/__init__.py +10 -0
  603. platformforge/product/backstage.py +49 -0
  604. platformforge/product/catalog.py +74 -0
  605. platformforge/product/crossplane.py +341 -0
  606. platformforge/product/golden_paths/__init__.py +5 -0
  607. platformforge/product/golden_paths/engine.py +97 -0
  608. platformforge/product/golden_paths/library.yaml +198 -0
  609. platformforge/product/golden_paths/model.py +84 -0
  610. platformforge/product/maturity.py +107 -0
  611. platformforge/product/scorecards.py +84 -0
  612. platformforge/resources.py +36 -0
  613. platformforge/risk/__init__.py +5 -0
  614. platformforge/risk/engine.py +95 -0
  615. platformforge/risk/signals.py +49 -0
  616. platformforge/routing/__init__.py +13 -0
  617. platformforge/routing/decision.py +191 -0
  618. platformforge/routing/router.py +328 -0
  619. platformforge/rtk/__init__.py +9 -0
  620. platformforge/rtk/compact.py +127 -0
  621. platformforge/rtk/parsers.py +199 -0
  622. platformforge/rules/__init__.py +5 -0
  623. platformforge/rules/engine.py +345 -0
  624. platformforge/sandbox/__init__.py +7 -0
  625. platformforge/sandbox/env.py +151 -0
  626. platformforge/sandbox/review.py +92 -0
  627. platformforge/sdd/__init__.py +8 -0
  628. platformforge/sdd/lifecycle.py +239 -0
  629. platformforge/security/__init__.py +19 -0
  630. platformforge/security/cosign.py +67 -0
  631. platformforge/security/iam.py +112 -0
  632. platformforge/security/identity.py +84 -0
  633. platformforge/security/kyverno.py +106 -0
  634. platformforge/security/sbom.py +59 -0
  635. platformforge/security/scan.py +63 -0
  636. platformforge/security/slsa.py +86 -0
  637. platformforge/security/supply.py +62 -0
  638. platformforge/tokensave/__init__.py +20 -0
  639. platformforge/tokensave/budget.py +62 -0
  640. platformforge/tokensave/estimate.py +21 -0
  641. platformforge/tokensave/index.py +172 -0
  642. platformforge/tokensave/ledger.py +121 -0
  643. platformforge/tokensave/packs.py +285 -0
  644. platformforge/ui/__init__.py +28 -0
  645. platformforge/ui/app.py +465 -0
  646. platformforge/ui/home.py +113 -0
  647. platformforge/ui/i18n.py +143 -0
  648. platformforge/ui/kit.py +689 -0
  649. platformforge/ui/screen.py +628 -0
  650. platformforge/ui/tui.py +94 -0
  651. platformforge/ui/wizard.py +309 -0
  652. platformforge/workspace/__init__.py +13 -0
  653. platformforge/workspace/models.py +35 -0
  654. platformforge/workspace/service.py +69 -0
  655. platformforge-0.1.0.dist-info/METADATA +212 -0
  656. platformforge-0.1.0.dist-info/RECORD +659 -0
  657. platformforge-0.1.0.dist-info/WHEEL +4 -0
  658. platformforge-0.1.0.dist-info/entry_points.txt +3 -0
  659. 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,3 @@
1
+ kind: ops
2
+ tier: standard
3
+ description: "§134 argocd sync A→B → failed verify → Argo history rollback"
@@ -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,3 @@
1
+ kind: ops
2
+ tier: standard
3
+ description: "§136 manual-only rollback → honest refusal + escalation"
@@ -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,3 @@
1
+ kind: ops
2
+ tier: standard
3
+ description: "§132 scale 3→5 → regressed → auto-rollback restores 3"
@@ -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,3 @@
1
+ kind: ops
2
+ tier: standard
3
+ description: "§135 terraform forward plan → requires-replan, no auto-reverse"
@@ -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,3 @@
1
+ kind: ops
2
+ tier: standard
3
+ description: "stale obs → PF-OPS-PRECONDITION-FAILED"
@@ -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,5 @@
1
+ tier: smoke
2
+ description: "Credential patterns committed to a file in the repo."
3
+ analyzers: [secrets]
4
+ violated_rules: [PF-SEC-010]
5
+ fact_kinds: [security.secret_leak]
@@ -0,0 +1,2 @@
1
+ DATABASE_URL=postgres://user:hunter2pass@db.internal:5432/app
2
+ GITHUB_TOKEN=ghp_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8
@@ -0,0 +1,5 @@
1
+ tier: smoke
2
+ description: "SLO burn exceeds the 30d budget — status exhausted."
3
+ analyzers: [slo]
4
+ violated_rules: [PF-SLO-001]
5
+ fact_kinds: [sre.error_budget]
@@ -0,0 +1,2 @@
1
+ total_events: 1000000
2
+ bad_events: 1100
@@ -0,0 +1,4 @@
1
+ service: payments
2
+ sli: availability
3
+ target: 99.9
4
+ window: 30d
@@ -0,0 +1,5 @@
1
+ tier: smoke
2
+ description: "IAM policy granting * on * to a public principal."
3
+ analyzers: [iam]
4
+ violated_rules: [PF-SEC-001, PF-SEC-002, PF-SEC-003]
5
+ fact_kinds: [security.iam_policy]
@@ -0,0 +1,14 @@
1
+ {
2
+ "Version": "2012-10-17",
3
+ "Statement": [
4
+ {
5
+ "Sid": "AdminForEverything",
6
+ "Effect": "Allow",
7
+ "Action": "*",
8
+ "Resource": "*",
9
+ "Principal": {
10
+ "AWS": "*"
11
+ }
12
+ }
13
+ ]
14
+ }
@@ -0,0 +1,6 @@
1
+ tier: smoke
2
+ description: "S3 bucket with public-read ACL."
3
+ analyzers: [iac]
4
+ violated_rules: [PF-IAC-001]
5
+ absent_rules: [PF-IAC-003]
6
+ fact_kinds: [iac.resource]
@@ -0,0 +1,5 @@
1
+ resource "aws_s3_bucket" "public_assets" {
2
+ bucket = "acme-public-assets"
3
+ acl = "public-read"
4
+ tags = { team = "web", cost_center = "web" }
5
+ }
@@ -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).