skillgate 1.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (941) hide show
  1. skillgate-1.1.0/.codex/skills/local-ci-gate-pack/SKILL.md +43 -0
  2. skillgate-1.1.0/.codex/skills/production-hardening-gate/SKILL.md +141 -0
  3. skillgate-1.1.0/.env.example +442 -0
  4. skillgate-1.1.0/.github/workflows/ci-matrix.yml +111 -0
  5. skillgate-1.1.0/.github/workflows/ci.full.backup.yml +161 -0
  6. skillgate-1.1.0/.github/workflows/ci.yml +263 -0
  7. skillgate-1.1.0/.github/workflows/npm-shim-release.yml +59 -0
  8. skillgate-1.1.0/.github/workflows/release-safety.yml +122 -0
  9. skillgate-1.1.0/.gitignore +82 -0
  10. skillgate-1.1.0/=0.25.0 +0 -0
  11. skillgate-1.1.0/AGENTS.md +131 -0
  12. skillgate-1.1.0/CHANGELOG.md +27 -0
  13. skillgate-1.1.0/CLAUDE.md +143 -0
  14. skillgate-1.1.0/CONTRIBUTING.md +690 -0
  15. skillgate-1.1.0/Dockerfile +82 -0
  16. skillgate-1.1.0/Dockerfile.api +37 -0
  17. skillgate-1.1.0/Dockerfile.worker +31 -0
  18. skillgate-1.1.0/LICENSE +50 -0
  19. skillgate-1.1.0/PKG-INFO +219 -0
  20. skillgate-1.1.0/README.md +143 -0
  21. skillgate-1.1.0/alembic/env.py +61 -0
  22. skillgate-1.1.0/alembic/versions/20260216_0001_initial_hosted_schema.py +165 -0
  23. skillgate-1.1.0/alembic/versions/20260216_0002_auth_and_stripe_resilience.py +126 -0
  24. skillgate-1.1.0/alembic/versions/20260218_0003_add_billing_interval.py +39 -0
  25. skillgate-1.1.0/alembic/versions/20260218_0004_email_verification_tokens.py +68 -0
  26. skillgate-1.1.0/alembic/versions/20260222_0006_supabase_ownership_split.py +99 -0
  27. skillgate-1.1.0/alembic.ini +38 -0
  28. skillgate-1.1.0/deploy.sh +116 -0
  29. skillgate-1.1.0/docker-compose.yml +89 -0
  30. skillgate-1.1.0/docs/API-MIGRATIONS.md +44 -0
  31. skillgate-1.1.0/docs/ARCHITECTURE.md +948 -0
  32. skillgate-1.1.0/docs/ARTIFACT-COVERAGE.md +57 -0
  33. skillgate-1.1.0/docs/CLAIM-LEDGER.yaml +261 -0
  34. skillgate-1.1.0/docs/CLI-API-SPEC.md +573 -0
  35. skillgate-1.1.0/docs/DOCS-SITE-ENTERPRISE-REPO-BLUEPRINT.md +103 -0
  36. skillgate-1.1.0/docs/ENTERPRISE-PRIVATE-DEPLOYMENT.md +59 -0
  37. skillgate-1.1.0/docs/ENTERPRISE-READINESS-CHECKLIST.md +52 -0
  38. skillgate-1.1.0/docs/ENTITLEMENT-GUIDE.md +699 -0
  39. skillgate-1.1.0/docs/EXPLAINER-PROVIDER-MIGRATION.md +127 -0
  40. skillgate-1.1.0/docs/FEATURE-INVENTORY-BASIC-COMPLEX-MOAT.md +456 -0
  41. skillgate-1.1.0/docs/GITHUB-ACTION-QUICKSTART.md +54 -0
  42. skillgate-1.1.0/docs/IMPLEMENTATION-PLAN.md +1953 -0
  43. skillgate-1.1.0/docs/INSTALLATION-GUIDE.md +197 -0
  44. skillgate-1.1.0/docs/INSTALLATION-INDIVIDUALS.md +56 -0
  45. skillgate-1.1.0/docs/INSTALLATION-LAUNCH-CHECKLIST.md +38 -0
  46. skillgate-1.1.0/docs/INSTALLATION-TEAMS-ORGS.md +46 -0
  47. skillgate-1.1.0/docs/LAUNCH-GUARDRAILS.md +33 -0
  48. skillgate-1.1.0/docs/LEGAL-REVIEW-CHECKLIST.md +81 -0
  49. skillgate-1.1.0/docs/LOCAL-E2E-TESTING.md +157 -0
  50. skillgate-1.1.0/docs/MARKETING-IMPLEMENTATION-BACKLOG.md +36 -0
  51. skillgate-1.1.0/docs/OBSERVABILITY-RUNBOOK.md +61 -0
  52. skillgate-1.1.0/docs/POLICY-REFERENCE.md +577 -0
  53. skillgate-1.1.0/docs/PRD.md +548 -0
  54. skillgate-1.1.0/docs/PRICING-MIGRATION-PLAN.md +34 -0
  55. skillgate-1.1.0/docs/PRICING-ROLLOUT-LAUNCH-GATE.md +42 -0
  56. skillgate-1.1.0/docs/PRICING-VALIDATION-LOG.md +26 -0
  57. skillgate-1.1.0/docs/PROD-SETUP-NETLIFY-RAILWAY.md +166 -0
  58. skillgate-1.1.0/docs/RELEASE-CHECKLIST-PYPI-NPM.md +123 -0
  59. skillgate-1.1.0/docs/RELEASE-SAFETY.md +62 -0
  60. skillgate-1.1.0/docs/RFC-AGENT-GATEWAY.md +546 -0
  61. skillgate-1.1.0/docs/RULE-CATALOG.md +419 -0
  62. skillgate-1.1.0/docs/SALES-CONTROL-PLANE-PLAYBOOK.md +36 -0
  63. skillgate-1.1.0/docs/SALES-ONE-PAGER-CONTROL-PLANE.md +35 -0
  64. skillgate-1.1.0/docs/SECURITY-COMPLIANCE.md +430 -0
  65. skillgate-1.1.0/docs/SECURITY-HARDENING-SPRINT.md +242 -0
  66. skillgate-1.1.0/docs/STABLE-LAUNCH-RUNBOOK.md +229 -0
  67. skillgate-1.1.0/docs/STANDOUT-ROADMAP.md +175 -0
  68. skillgate-1.1.0/docs/TEAM-BOOTSTRAP.md +42 -0
  69. skillgate-1.1.0/docs/TECHNICAL-SPEC.md +642 -0
  70. skillgate-1.1.0/docs/TESTING-STRATEGY.md +1090 -0
  71. skillgate-1.1.0/docs/initial-requirements-discussion.txt +2859 -0
  72. skillgate-1.1.0/docs/install-spec.json +65 -0
  73. skillgate-1.1.0/docs/open-core/PUBLIC_PRIVATE_MATRIX_v1.md +56 -0
  74. skillgate-1.1.0/docs/open-core/ci-parity-matrix.json +36 -0
  75. skillgate-1.1.0/docs/open-core/deployment-profile-lock.json +45 -0
  76. skillgate-1.1.0/docs/open-core/dual-repo-release-contract.json +91 -0
  77. skillgate-1.1.0/docs/open-core/public-export-policy.json +51 -0
  78. skillgate-1.1.0/docs/openapi/skillgate-openapi.json +163 -0
  79. skillgate-1.1.0/docs/section-11-risk-mitigation/AGENT-SKILLS-MANDATORY.md +21 -0
  80. skillgate-1.1.0/docs/section-11-risk-mitigation/BOUNDARIES.md +18 -0
  81. skillgate-1.1.0/docs/section-11-risk-mitigation/PER-TASK-RECORDS.md +16 -0
  82. skillgate-1.1.0/docs/section-11-risk-mitigation/PR-DESCRIPTION-SECTION11.md +26 -0
  83. skillgate-1.1.0/docs/section-11-risk-mitigation/RALPH-LOOP.md +8 -0
  84. skillgate-1.1.0/docs/section-11-risk-mitigation/READINESS-GATES.md +21 -0
  85. skillgate-1.1.0/docs/section-11-risk-mitigation/README.md +36 -0
  86. skillgate-1.1.0/docs/section-11-risk-mitigation/RELEASE-DECISION.md +24 -0
  87. skillgate-1.1.0/docs/section-11-risk-mitigation/SPECS.md +30 -0
  88. skillgate-1.1.0/docs/section-11-risk-mitigation/TASKS.md +55 -0
  89. skillgate-1.1.0/docs/section-11-risk-mitigation/VALIDATION-CHECKS.md +41 -0
  90. skillgate-1.1.0/docs/section-11-risk-mitigation/artifacts/.gitkeep +0 -0
  91. skillgate-1.1.0/docs/section-11-risk-mitigation/artifacts/adoption-kpi-baseline.json +30 -0
  92. skillgate-1.1.0/docs/section-11-risk-mitigation/artifacts/consolidated-release-audit-2026-02-21.json +50 -0
  93. skillgate-1.1.0/docs/section-11-risk-mitigation/artifacts/consolidated-release-audit-2026-02-21.md +22 -0
  94. skillgate-1.1.0/docs/section-11-risk-mitigation/artifacts/consolidated-release-audit-2026-02-23.json +52 -0
  95. skillgate-1.1.0/docs/section-11-risk-mitigation/artifacts/consolidated-release-audit-2026-02-23.md +23 -0
  96. skillgate-1.1.0/docs/section-11-risk-mitigation/artifacts/contractor-trigger-checklist.md +24 -0
  97. skillgate-1.1.0/docs/section-11-risk-mitigation/artifacts/corrective-action-plan.md +29 -0
  98. skillgate-1.1.0/docs/section-11-risk-mitigation/artifacts/delegation-matrix.md +14 -0
  99. skillgate-1.1.0/docs/section-11-risk-mitigation/artifacts/residual-risk-thresholds-2026-02-21.md +24 -0
  100. skillgate-1.1.0/docs/section-11-risk-mitigation/artifacts/risk-register.json +117 -0
  101. skillgate-1.1.0/docs/section-11-risk-mitigation/artifacts/weekly-risk-review.md +47 -0
  102. skillgate-1.1.0/docs/section-11-risk-mitigation/artifacts/wip-cap-policy.md +18 -0
  103. skillgate-1.1.0/docs/section-12-explanation-provider-extensibility/AGENT-SKILLS-MANDATORY.md +49 -0
  104. skillgate-1.1.0/docs/section-12-explanation-provider-extensibility/BOUNDARIES.md +25 -0
  105. skillgate-1.1.0/docs/section-12-explanation-provider-extensibility/PER-TASK-RECORDS.md +15 -0
  106. skillgate-1.1.0/docs/section-12-explanation-provider-extensibility/PR-DESCRIPTION-SECTION12.md +26 -0
  107. skillgate-1.1.0/docs/section-12-explanation-provider-extensibility/RALPH-LOOP.md +9 -0
  108. skillgate-1.1.0/docs/section-12-explanation-provider-extensibility/READINESS-GATES.md +27 -0
  109. skillgate-1.1.0/docs/section-12-explanation-provider-extensibility/README.md +44 -0
  110. skillgate-1.1.0/docs/section-12-explanation-provider-extensibility/RELEASE-DECISION.md +23 -0
  111. skillgate-1.1.0/docs/section-12-explanation-provider-extensibility/SPECS.md +43 -0
  112. skillgate-1.1.0/docs/section-12-explanation-provider-extensibility/TASKS.md +49 -0
  113. skillgate-1.1.0/docs/section-12-explanation-provider-extensibility/VALIDATION-CHECKS.md +27 -0
  114. skillgate-1.1.0/docs/section-12-explanation-provider-extensibility/artifacts/.gitkeep +0 -0
  115. skillgate-1.1.0/docs/section-12-explanation-provider-extensibility/artifacts/cli-contract-snapshots/scan-help.txt +0 -0
  116. skillgate-1.1.0/docs/section-12-explanation-provider-extensibility/artifacts/provider-contract-results.json +12 -0
  117. skillgate-1.1.0/docs/section-12-explanation-provider-extensibility/artifacts/provider-network-policy-results.json +15 -0
  118. skillgate-1.1.0/docs/section-13-installation-ux/AGENT-SKILLS-MANDATORY.md +48 -0
  119. skillgate-1.1.0/docs/section-13-installation-ux/BOUNDARIES.md +37 -0
  120. skillgate-1.1.0/docs/section-13-installation-ux/PER-TASK-RECORDS.md +24 -0
  121. skillgate-1.1.0/docs/section-13-installation-ux/PR-DESCRIPTION-SECTION13.md +38 -0
  122. skillgate-1.1.0/docs/section-13-installation-ux/RALPH-LOOP.md +15 -0
  123. skillgate-1.1.0/docs/section-13-installation-ux/READINESS-GATES.md +39 -0
  124. skillgate-1.1.0/docs/section-13-installation-ux/README.md +47 -0
  125. skillgate-1.1.0/docs/section-13-installation-ux/RELEASE-DECISION.md +25 -0
  126. skillgate-1.1.0/docs/section-13-installation-ux/SPECS.md +80 -0
  127. skillgate-1.1.0/docs/section-13-installation-ux/TASKS.md +82 -0
  128. skillgate-1.1.0/docs/section-13-installation-ux/VALIDATION-CHECKS.md +42 -0
  129. skillgate-1.1.0/docs/section-13-installation-ux/artifacts/.gitkeep +0 -0
  130. skillgate-1.1.0/docs/section-13-installation-ux/artifacts/docs-version-drift-check.json +4 -0
  131. skillgate-1.1.0/docs/section-13-installation-ux/artifacts/install-matrix.json +11 -0
  132. skillgate-1.1.0/docs/section-13-installation-ux/artifacts/install-spec.json +65 -0
  133. skillgate-1.1.0/docs/section-13-installation-ux/artifacts/release-manifest-verification.json +5 -0
  134. skillgate-1.1.0/docs/section-13-installation-ux/artifacts/release-manifest.json +1 -0
  135. skillgate-1.1.0/docs/section-13-installation-ux/artifacts/section13-gate-run.md +67 -0
  136. skillgate-1.1.0/docs/section-14-governed-pipeline/AGENT-SKILLS-MANDATORY.md +59 -0
  137. skillgate-1.1.0/docs/section-14-governed-pipeline/BOUNDARIES.md +42 -0
  138. skillgate-1.1.0/docs/section-14-governed-pipeline/PER-TASK-RECORDS.md +25 -0
  139. skillgate-1.1.0/docs/section-14-governed-pipeline/PR-DESCRIPTION-SECTION14.md +47 -0
  140. skillgate-1.1.0/docs/section-14-governed-pipeline/RALPH-LOOP.md +52 -0
  141. skillgate-1.1.0/docs/section-14-governed-pipeline/READINESS-GATES.md +42 -0
  142. skillgate-1.1.0/docs/section-14-governed-pipeline/README.md +47 -0
  143. skillgate-1.1.0/docs/section-14-governed-pipeline/RELEASE-DECISION.md +46 -0
  144. skillgate-1.1.0/docs/section-14-governed-pipeline/SPECS.md +152 -0
  145. skillgate-1.1.0/docs/section-14-governed-pipeline/TASKS.md +123 -0
  146. skillgate-1.1.0/docs/section-14-governed-pipeline/VALIDATION-CHECKS.md +50 -0
  147. skillgate-1.1.0/docs/section-14-governed-pipeline/artifacts/.gitignore +2 -0
  148. skillgate-1.1.0/docs/section-14-governed-pipeline/artifacts/.gitkeep +1 -0
  149. skillgate-1.1.0/docs/section-15-web-ui-content-humanization/README.md +15 -0
  150. skillgate-1.1.0/docs/section-15-web-ui-content-humanization/SPECS.md +21 -0
  151. skillgate-1.1.0/docs/section-15-web-ui-content-humanization/TASKS.md +8 -0
  152. skillgate-1.1.0/docs/section-15-web-ui-content-humanization/artifacts/conversion-copy-qa-2026-02-21.md +64 -0
  153. skillgate-1.1.0/docs/section-15-web-ui-content-humanization/artifacts/cta-hierarchy-recommendation-diff-2026-02-21.md +50 -0
  154. skillgate-1.1.0/docs/section-15-web-ui-content-humanization/artifacts/install-ux-python-npx-pass-2026-02-21.md +43 -0
  155. skillgate-1.1.0/docs/section-16-open-core-split-governance/AGENT-SKILLS-MANDATORY.md +48 -0
  156. skillgate-1.1.0/docs/section-16-open-core-split-governance/BOUNDARIES.md +23 -0
  157. skillgate-1.1.0/docs/section-16-open-core-split-governance/PER-TASK-RECORDS.md +109 -0
  158. skillgate-1.1.0/docs/section-16-open-core-split-governance/READINESS-GATES.md +18 -0
  159. skillgate-1.1.0/docs/section-16-open-core-split-governance/README.md +49 -0
  160. skillgate-1.1.0/docs/section-16-open-core-split-governance/RELEASE-DECISION.md +33 -0
  161. skillgate-1.1.0/docs/section-16-open-core-split-governance/SPECS.md +60 -0
  162. skillgate-1.1.0/docs/section-16-open-core-split-governance/TASKS.md +47 -0
  163. skillgate-1.1.0/docs/section-16-open-core-split-governance/VALIDATION-CHECKS.md +41 -0
  164. skillgate-1.1.0/docs/section-16-open-core-split-governance/artifacts/ci-parity-matrix-2026-02-21.md +19 -0
  165. skillgate-1.1.0/docs/section-16-open-core-split-governance/artifacts/ci-parity-validation-2026-02-21.json +6 -0
  166. skillgate-1.1.0/docs/section-16-open-core-split-governance/artifacts/cutover-env-contract-production-2026-02-21.md +6 -0
  167. skillgate-1.1.0/docs/section-16-open-core-split-governance/artifacts/cutover-env-contract-staging-2026-02-21.md +6 -0
  168. skillgate-1.1.0/docs/section-16-open-core-split-governance/artifacts/cutover-rehearsal-2026-02-21.md +31 -0
  169. skillgate-1.1.0/docs/section-16-open-core-split-governance/artifacts/cutover-rollback-rehearsal-2026-02-21.md +4 -0
  170. skillgate-1.1.0/docs/section-16-open-core-split-governance/artifacts/cutover-smoke-production-2026-02-21.md +3 -0
  171. skillgate-1.1.0/docs/section-16-open-core-split-governance/artifacts/cutover-smoke-staging-2026-02-21.md +3 -0
  172. skillgate-1.1.0/docs/section-16-open-core-split-governance/artifacts/deployment-profile-lock-2026-02-21.md +14 -0
  173. skillgate-1.1.0/docs/section-16-open-core-split-governance/artifacts/deployment-profile-lock-validation-2026-02-21.json +5 -0
  174. skillgate-1.1.0/docs/section-16-open-core-split-governance/artifacts/dual-repo-release-contract-2026-02-21.md +39 -0
  175. skillgate-1.1.0/docs/section-16-open-core-split-governance/artifacts/dual-repo-release-contract-validation-2026-02-21.json +6 -0
  176. skillgate-1.1.0/docs/section-16-open-core-split-governance/artifacts/dual-repo-release-sequence-2026-02-21.md +26 -0
  177. skillgate-1.1.0/docs/section-16-open-core-split-governance/artifacts/local-gate-pack-2026-02-21.md +54 -0
  178. skillgate-1.1.0/docs/section-16-open-core-split-governance/artifacts/physical-extraction-run-2026-02-21.md +24 -0
  179. skillgate-1.1.0/docs/section-16-open-core-split-governance/artifacts/private-ee-manifest-2026-02-21.json +43 -0
  180. skillgate-1.1.0/docs/section-16-open-core-split-governance/artifacts/public-ce-manifest-2026-02-21.json +233 -0
  181. skillgate-1.1.0/docs/section-16-open-core-split-governance/artifacts/public-export-gate-2026-02-21.json +7 -0
  182. skillgate-1.1.0/docs/section-16-open-core-split-governance/artifacts/public-export-negative-fixture-2026-02-21.json +12 -0
  183. skillgate-1.1.0/docs/section-16-open-core-split-governance/artifacts/split-readiness-manifest-2026-02-21.json +1 -0
  184. skillgate-1.1.0/docs/section-16-open-core-split-governance/artifacts/split-readiness-manifest-verify-2026-02-21.json +5 -0
  185. skillgate-1.1.0/docs/section-16-open-core-split-governance/artifacts/split-readiness-report-2026-02-21.md +36 -0
  186. skillgate-1.1.0/docs/section-17-supabase-auth-migration/AGENT-SKILLS-MANDATORY.md +40 -0
  187. skillgate-1.1.0/docs/section-17-supabase-auth-migration/BOUNDARIES.md +38 -0
  188. skillgate-1.1.0/docs/section-17-supabase-auth-migration/CACHE-STRATEGY.md +52 -0
  189. skillgate-1.1.0/docs/section-17-supabase-auth-migration/CUTOVER-ROLLBACK-RUNBOOK.md +104 -0
  190. skillgate-1.1.0/docs/section-17-supabase-auth-migration/EGRESS-CONTROLS.md +40 -0
  191. skillgate-1.1.0/docs/section-17-supabase-auth-migration/FRONTEND-AUTH-QUERY-CONTRACT.md +39 -0
  192. skillgate-1.1.0/docs/section-17-supabase-auth-migration/PER-TASK-RECORDS.md +332 -0
  193. skillgate-1.1.0/docs/section-17-supabase-auth-migration/PERFORMANCE-CAPACITY-PLAN.md +43 -0
  194. skillgate-1.1.0/docs/section-17-supabase-auth-migration/RALPH-LOOP.md +52 -0
  195. skillgate-1.1.0/docs/section-17-supabase-auth-migration/READINESS-GATES.md +43 -0
  196. skillgate-1.1.0/docs/section-17-supabase-auth-migration/README.md +53 -0
  197. skillgate-1.1.0/docs/section-17-supabase-auth-migration/RELEASE-DECISION.md +57 -0
  198. skillgate-1.1.0/docs/section-17-supabase-auth-migration/RLS-POLICY-CATALOG.md +50 -0
  199. skillgate-1.1.0/docs/section-17-supabase-auth-migration/SPECS.md +140 -0
  200. skillgate-1.1.0/docs/section-17-supabase-auth-migration/SUPABASE-RPC-CONTRACT.md +67 -0
  201. skillgate-1.1.0/docs/section-17-supabase-auth-migration/TASKS.md +78 -0
  202. skillgate-1.1.0/docs/section-17-supabase-auth-migration/VALIDATION-CHECKS.md +65 -0
  203. skillgate-1.1.0/docs/section-17-supabase-auth-migration/artifacts/cache-verification-report.md +17 -0
  204. skillgate-1.1.0/docs/section-17-supabase-auth-migration/artifacts/data-ownership-migration-dry-run-report.md +19 -0
  205. skillgate-1.1.0/docs/section-17-supabase-auth-migration/artifacts/egress-policy-validation-report.md +20 -0
  206. skillgate-1.1.0/docs/section-17-supabase-auth-migration/artifacts/final-gate-validation-summary.md +96 -0
  207. skillgate-1.1.0/docs/section-17-supabase-auth-migration/artifacts/frontend-auth-hook-contract-test-report.md +20 -0
  208. skillgate-1.1.0/docs/section-17-supabase-auth-migration/artifacts/full-ci-mypy-output.txt +1 -0
  209. skillgate-1.1.0/docs/section-17-supabase-auth-migration/artifacts/full-ci-pytest-output.txt +2288 -0
  210. skillgate-1.1.0/docs/section-17-supabase-auth-migration/artifacts/full-ci-ruff-output.txt +1 -0
  211. skillgate-1.1.0/docs/section-17-supabase-auth-migration/artifacts/jwt-verifier-validation-report.md +16 -0
  212. skillgate-1.1.0/docs/section-17-supabase-auth-migration/artifacts/performance-benchmark-report.md +19 -0
  213. skillgate-1.1.0/docs/section-17-supabase-auth-migration/artifacts/provider-matrix-test-summary.md +17 -0
  214. skillgate-1.1.0/docs/section-17-supabase-auth-migration/artifacts/rls-policy-matrix-and-negative-access-report.md +17 -0
  215. skillgate-1.1.0/docs/section-17-supabase-auth-migration/artifacts/rollback-drill-log.md +20 -0
  216. skillgate-1.1.0/docs/section-17-supabase-auth-migration/artifacts/rpc-function-contract-report.md +18 -0
  217. skillgate-1.1.0/docs/section-17-supabase-auth-migration/artifacts/security-regression-summary.md +12 -0
  218. skillgate-1.1.0/docs/section-17-supabase-auth-migration/artifacts/staging-cutover-rehearsal-log.md +17 -0
  219. skillgate-1.1.0/docs/sprint-7.2-runbook.md +343 -0
  220. skillgate-1.1.0/docs/sprint-7.3-hybrid-enforcement-runbook.md +58 -0
  221. skillgate-1.1.0/docs/templates/team/bootstrap.env.example +10 -0
  222. skillgate-1.1.0/docs/templates/team/skillgate.team-baseline.yml +16 -0
  223. skillgate-1.1.0/homebrew/skillgate.rb +59 -0
  224. skillgate-1.1.0/k6/load_test.js +196 -0
  225. skillgate-1.1.0/netlify.toml +26 -0
  226. skillgate-1.1.0/npm-shim/README.md +72 -0
  227. skillgate-1.1.0/npm-shim/bin/skillgate.js +74 -0
  228. skillgate-1.1.0/npm-shim/package.json +24 -0
  229. skillgate-1.1.0/pyproject.toml +173 -0
  230. skillgate-1.1.0/scripts/deploy/.env.cloud-cli.example +28 -0
  231. skillgate-1.1.0/scripts/deploy/canary_gate.sh +42 -0
  232. skillgate-1.1.0/scripts/deploy/check-env-contract.sh +25 -0
  233. skillgate-1.1.0/scripts/deploy/local_production_go_deploy.sh +157 -0
  234. skillgate-1.1.0/scripts/deploy/rollback_rehearsal.sh +23 -0
  235. skillgate-1.1.0/scripts/deploy/rollback_trigger.sh +14 -0
  236. skillgate-1.1.0/scripts/deploy/smoke.sh +26 -0
  237. skillgate-1.1.0/scripts/deploy/smoke_api.sh +14 -0
  238. skillgate-1.1.0/scripts/deploy/smoke_web.sh +14 -0
  239. skillgate-1.1.0/scripts/install/install.ps1 +199 -0
  240. skillgate-1.1.0/scripts/install/install.sh +288 -0
  241. skillgate-1.1.0/scripts/install/skillgate.rb +64 -0
  242. skillgate-1.1.0/scripts/migration/supabase_compat_migration.py +527 -0
  243. skillgate-1.1.0/scripts/quality/check_claim_ledger.py +362 -0
  244. skillgate-1.1.0/scripts/quality/check_deployment_profile_lock.py +113 -0
  245. skillgate-1.1.0/scripts/quality/check_dual_repo_release_contract.py +172 -0
  246. skillgate-1.1.0/scripts/quality/check_governance_scope_gate.py +134 -0
  247. skillgate-1.1.0/scripts/quality/check_install_docs_freshness.py +123 -0
  248. skillgate-1.1.0/scripts/quality/check_split_ci_parity.py +67 -0
  249. skillgate-1.1.0/scripts/quality/check_wrapper_enforcement.py +70 -0
  250. skillgate-1.1.0/scripts/quality/generate_release_manifest.py +129 -0
  251. skillgate-1.1.0/scripts/quality/generate_reliability_scorecard.py +209 -0
  252. skillgate-1.1.0/scripts/quality/recall_report.py +87 -0
  253. skillgate-1.1.0/scripts/quality/run_local_ci_gate.py +215 -0
  254. skillgate-1.1.0/scripts/quality/verify_release_manifest.py +132 -0
  255. skillgate-1.1.0/scripts/release/check_public_export.py +135 -0
  256. skillgate-1.1.0/scripts/release/run_physical_extraction.py +179 -0
  257. skillgate-1.1.0/scripts/test/rollback_high_privilege_user.sql +66 -0
  258. skillgate-1.1.0/scripts/test/seed_high_privilege_user.sql +340 -0
  259. skillgate-1.1.0/scripts/test/upgrade_user.sql +58 -0
  260. skillgate-1.1.0/scripts/test_package_release.sh +57 -0
  261. skillgate-1.1.0/setup.cfg +4 -0
  262. skillgate-1.1.0/skillgate/__init__.py +5 -0
  263. skillgate-1.1.0/skillgate/__main__.py +5 -0
  264. skillgate-1.1.0/skillgate/api/__init__.py +1 -0
  265. skillgate-1.1.0/skillgate/api/app.py +249 -0
  266. skillgate-1.1.0/skillgate/api/auth_observability.py +141 -0
  267. skillgate-1.1.0/skillgate/api/db.py +127 -0
  268. skillgate-1.1.0/skillgate/api/device_codes.py +188 -0
  269. skillgate-1.1.0/skillgate/api/entitlement.py +76 -0
  270. skillgate-1.1.0/skillgate/api/entitlement_teams.py +91 -0
  271. skillgate-1.1.0/skillgate/api/errors.py +83 -0
  272. skillgate-1.1.0/skillgate/api/middleware/__init__.py +5 -0
  273. skillgate-1.1.0/skillgate/api/middleware/bot_mitigation.py +75 -0
  274. skillgate-1.1.0/skillgate/api/migrations/0001_initial.sql +96 -0
  275. skillgate-1.1.0/skillgate/api/migrations/supabase/001_rpc_contract_v1.sql +96 -0
  276. skillgate-1.1.0/skillgate/api/migrations/supabase/002_rls_policies_v1.sql +63 -0
  277. skillgate-1.1.0/skillgate/api/migrations/supabase/email_templates/confirm_signup.html +102 -0
  278. skillgate-1.1.0/skillgate/api/migrations/supabase/email_templates/magic_link.html +101 -0
  279. skillgate-1.1.0/skillgate/api/migrations/supabase/email_templates/password_reset.html +113 -0
  280. skillgate-1.1.0/skillgate/api/models.py +272 -0
  281. skillgate-1.1.0/skillgate/api/pricing_catalog.py +371 -0
  282. skillgate-1.1.0/skillgate/api/rate_limit.py +68 -0
  283. skillgate-1.1.0/skillgate/api/redis_circuit_breaker.py +137 -0
  284. skillgate-1.1.0/skillgate/api/redis_rate_limit.py +61 -0
  285. skillgate-1.1.0/skillgate/api/resilience.py +94 -0
  286. skillgate-1.1.0/skillgate/api/roadmap_catalog.py +136 -0
  287. skillgate-1.1.0/skillgate/api/routes/__init__.py +1 -0
  288. skillgate-1.1.0/skillgate/api/routes/alerts.py +180 -0
  289. skillgate-1.1.0/skillgate/api/routes/api_keys.py +267 -0
  290. skillgate-1.1.0/skillgate/api/routes/audit.py +100 -0
  291. skillgate-1.1.0/skillgate/api/routes/auth.py +1376 -0
  292. skillgate-1.1.0/skillgate/api/routes/entitlements.py +381 -0
  293. skillgate-1.1.0/skillgate/api/routes/health.py +15 -0
  294. skillgate-1.1.0/skillgate/api/routes/hunt.py +117 -0
  295. skillgate-1.1.0/skillgate/api/routes/license.py +57 -0
  296. skillgate-1.1.0/skillgate/api/routes/payments.py +1213 -0
  297. skillgate-1.1.0/skillgate/api/routes/pricing.py +15 -0
  298. skillgate-1.1.0/skillgate/api/routes/retroscan.py +179 -0
  299. skillgate-1.1.0/skillgate/api/routes/roadmap.py +15 -0
  300. skillgate-1.1.0/skillgate/api/routes/scans.py +192 -0
  301. skillgate-1.1.0/skillgate/api/routes/teams.py +256 -0
  302. skillgate-1.1.0/skillgate/api/routes/usage.py +139 -0
  303. skillgate-1.1.0/skillgate/api/routes/verify.py +54 -0
  304. skillgate-1.1.0/skillgate/api/security.py +149 -0
  305. skillgate-1.1.0/skillgate/api/settings.py +164 -0
  306. skillgate-1.1.0/skillgate/api/supabase_auth_provider.py +514 -0
  307. skillgate-1.1.0/skillgate/api/supabase_client.py +296 -0
  308. skillgate-1.1.0/skillgate/api/supabase_egress.py +74 -0
  309. skillgate-1.1.0/skillgate/api/supabase_jwt.py +197 -0
  310. skillgate-1.1.0/skillgate/api/telemetry.py +153 -0
  311. skillgate-1.1.0/skillgate/api/worker.py +72 -0
  312. skillgate-1.1.0/skillgate/assets/logo.ansi +73 -0
  313. skillgate-1.1.0/skillgate/assets/logo_compact_16.ansi +21 -0
  314. skillgate-1.1.0/skillgate/assets/logo_compact_16_light.ansi +21 -0
  315. skillgate-1.1.0/skillgate/assets/logo_compact_20.ansi +26 -0
  316. skillgate-1.1.0/skillgate/assets/logo_compact_20_light.ansi +26 -0
  317. skillgate-1.1.0/skillgate/assets/logo_compact_24.ansi +31 -0
  318. skillgate-1.1.0/skillgate/assets/logo_compact_24_light.ansi +31 -0
  319. skillgate-1.1.0/skillgate/assets/logo_compact_28.ansi +36 -0
  320. skillgate-1.1.0/skillgate/assets/logo_compact_28_light.ansi +36 -0
  321. skillgate-1.1.0/skillgate/assets/logo_compact_32.ansi +41 -0
  322. skillgate-1.1.0/skillgate/assets/logo_compact_32_light.ansi +41 -0
  323. skillgate-1.1.0/skillgate/assets/logo_small_48.ansi +62 -0
  324. skillgate-1.1.0/skillgate/assets/logo_small_48_light.ansi +62 -0
  325. skillgate-1.1.0/skillgate/assets/logo_small_48_light_old.ansi +49 -0
  326. skillgate-1.1.0/skillgate/assets/logo_small_48_old.ansi +49 -0
  327. skillgate-1.1.0/skillgate/ci/__init__.py +1 -0
  328. skillgate-1.1.0/skillgate/ci/bitbucket/__init__.py +0 -0
  329. skillgate-1.1.0/skillgate/ci/bitbucket/template.yml +75 -0
  330. skillgate-1.1.0/skillgate/ci/github/__init__.py +1 -0
  331. skillgate-1.1.0/skillgate/ci/github/action.yml +150 -0
  332. skillgate-1.1.0/skillgate/ci/github/annotations.py +112 -0
  333. skillgate-1.1.0/skillgate/ci/gitlab/__init__.py +1 -0
  334. skillgate-1.1.0/skillgate/ci/gitlab/template.yml +68 -0
  335. skillgate-1.1.0/skillgate/ci/noise.py +155 -0
  336. skillgate-1.1.0/skillgate/cli/__init__.py +1 -0
  337. skillgate-1.1.0/skillgate/cli/app.py +158 -0
  338. skillgate-1.1.0/skillgate/cli/branding.py +175 -0
  339. skillgate-1.1.0/skillgate/cli/commands/__init__.py +1 -0
  340. skillgate-1.1.0/skillgate/cli/commands/approval.py +88 -0
  341. skillgate-1.1.0/skillgate/cli/commands/auth.py +365 -0
  342. skillgate-1.1.0/skillgate/cli/commands/bom.py +106 -0
  343. skillgate-1.1.0/skillgate/cli/commands/dag.py +124 -0
  344. skillgate-1.1.0/skillgate/cli/commands/doctor.py +146 -0
  345. skillgate-1.1.0/skillgate/cli/commands/drift.py +314 -0
  346. skillgate-1.1.0/skillgate/cli/commands/gateway.py +381 -0
  347. skillgate-1.1.0/skillgate/cli/commands/hooks.py +141 -0
  348. skillgate-1.1.0/skillgate/cli/commands/hunt.py +186 -0
  349. skillgate-1.1.0/skillgate/cli/commands/init.py +43 -0
  350. skillgate-1.1.0/skillgate/cli/commands/keys.py +59 -0
  351. skillgate-1.1.0/skillgate/cli/commands/reputation.py +146 -0
  352. skillgate-1.1.0/skillgate/cli/commands/retroscan.py +214 -0
  353. skillgate-1.1.0/skillgate/cli/commands/rules_cmd.py +81 -0
  354. skillgate-1.1.0/skillgate/cli/commands/run.py +415 -0
  355. skillgate-1.1.0/skillgate/cli/commands/scan.py +1097 -0
  356. skillgate-1.1.0/skillgate/cli/commands/simulate.py +414 -0
  357. skillgate-1.1.0/skillgate/cli/commands/submit_scan.py +49 -0
  358. skillgate-1.1.0/skillgate/cli/commands/verify.py +55 -0
  359. skillgate-1.1.0/skillgate/cli/formatters/__init__.py +7 -0
  360. skillgate-1.1.0/skillgate/cli/formatters/human.py +440 -0
  361. skillgate-1.1.0/skillgate/cli/formatters/json_fmt.py +19 -0
  362. skillgate-1.1.0/skillgate/cli/formatters/sarif.py +173 -0
  363. skillgate-1.1.0/skillgate/cli/main.py +6 -0
  364. skillgate-1.1.0/skillgate/cli/remote.py +341 -0
  365. skillgate-1.1.0/skillgate/cli/scan_submit.py +90 -0
  366. skillgate-1.1.0/skillgate/config/__init__.py +1 -0
  367. skillgate-1.1.0/skillgate/config/entitlement.py +188 -0
  368. skillgate-1.1.0/skillgate/config/license.py +75 -0
  369. skillgate-1.1.0/skillgate/config/secrets.py +107 -0
  370. skillgate-1.1.0/skillgate/core/__init__.py +0 -0
  371. skillgate-1.1.0/skillgate/core/analyzer/__init__.py +33 -0
  372. skillgate-1.1.0/skillgate/core/analyzer/correlation.py +248 -0
  373. skillgate-1.1.0/skillgate/core/analyzer/engine.py +140 -0
  374. skillgate-1.1.0/skillgate/core/analyzer/perf_guard.py +199 -0
  375. skillgate-1.1.0/skillgate/core/analyzer/rules/__init__.py +59 -0
  376. skillgate-1.1.0/skillgate/core/analyzer/rules/base.py +159 -0
  377. skillgate-1.1.0/skillgate/core/analyzer/rules/command.py +305 -0
  378. skillgate-1.1.0/skillgate/core/analyzer/rules/config.py +299 -0
  379. skillgate-1.1.0/skillgate/core/analyzer/rules/credential.py +185 -0
  380. skillgate-1.1.0/skillgate/core/analyzer/rules/eval.py +131 -0
  381. skillgate-1.1.0/skillgate/core/analyzer/rules/filesystem.py +167 -0
  382. skillgate-1.1.0/skillgate/core/analyzer/rules/go.py +281 -0
  383. skillgate-1.1.0/skillgate/core/analyzer/rules/injection.py +119 -0
  384. skillgate-1.1.0/skillgate/core/analyzer/rules/js_ast.py +92 -0
  385. skillgate-1.1.0/skillgate/core/analyzer/rules/network.py +141 -0
  386. skillgate-1.1.0/skillgate/core/analyzer/rules/obfuscation.py +146 -0
  387. skillgate-1.1.0/skillgate/core/analyzer/rules/prompt.py +220 -0
  388. skillgate-1.1.0/skillgate/core/analyzer/rules/ruby.py +329 -0
  389. skillgate-1.1.0/skillgate/core/analyzer/rules/rust.py +278 -0
  390. skillgate-1.1.0/skillgate/core/analyzer/rules/shell.py +201 -0
  391. skillgate-1.1.0/skillgate/core/analyzer/rules/shell_ast.py +86 -0
  392. skillgate-1.1.0/skillgate/core/analyzer/treesitter.py +156 -0
  393. skillgate-1.1.0/skillgate/core/analyzer/unicode_normalizer.py +232 -0
  394. skillgate-1.1.0/skillgate/core/connectors/__init__.py +35 -0
  395. skillgate-1.1.0/skillgate/core/connectors/base.py +57 -0
  396. skillgate-1.1.0/skillgate/core/connectors/file_tip.py +111 -0
  397. skillgate-1.1.0/skillgate/core/connectors/manager.py +159 -0
  398. skillgate-1.1.0/skillgate/core/connectors/models.py +66 -0
  399. skillgate-1.1.0/skillgate/core/connectors/registry.py +69 -0
  400. skillgate-1.1.0/skillgate/core/enricher/__init__.py +9 -0
  401. skillgate-1.1.0/skillgate/core/enricher/catalog.py +944 -0
  402. skillgate-1.1.0/skillgate/core/enricher/engine.py +45 -0
  403. skillgate-1.1.0/skillgate/core/enricher/models.py +23 -0
  404. skillgate-1.1.0/skillgate/core/entitlement/__init__.py +65 -0
  405. skillgate-1.1.0/skillgate/core/entitlement/airgap.py +194 -0
  406. skillgate-1.1.0/skillgate/core/entitlement/cache.py +63 -0
  407. skillgate-1.1.0/skillgate/core/entitlement/enterprise.py +72 -0
  408. skillgate-1.1.0/skillgate/core/entitlement/enterprise_adapter.py +137 -0
  409. skillgate-1.1.0/skillgate/core/entitlement/gates.py +75 -0
  410. skillgate-1.1.0/skillgate/core/entitlement/mode.py +83 -0
  411. skillgate-1.1.0/skillgate/core/entitlement/models.py +139 -0
  412. skillgate-1.1.0/skillgate/core/entitlement/quota.py +102 -0
  413. skillgate-1.1.0/skillgate/core/entitlement/resilience.py +47 -0
  414. skillgate-1.1.0/skillgate/core/entitlement/resolver.py +401 -0
  415. skillgate-1.1.0/skillgate/core/entitlement/usage_authority.py +228 -0
  416. skillgate-1.1.0/skillgate/core/errors.py +40 -0
  417. skillgate-1.1.0/skillgate/core/explainer/__init__.py +9 -0
  418. skillgate-1.1.0/skillgate/core/explainer/engine.py +458 -0
  419. skillgate-1.1.0/skillgate/core/explainer/templates.py +122 -0
  420. skillgate-1.1.0/skillgate/core/gateway/__init__.py +94 -0
  421. skillgate-1.1.0/skillgate/core/gateway/allowlist.py +96 -0
  422. skillgate-1.1.0/skillgate/core/gateway/approval.py +194 -0
  423. skillgate-1.1.0/skillgate/core/gateway/bom_gate.py +192 -0
  424. skillgate-1.1.0/skillgate/core/gateway/budget.py +363 -0
  425. skillgate-1.1.0/skillgate/core/gateway/executor.py +43 -0
  426. skillgate-1.1.0/skillgate/core/gateway/lineage.py +246 -0
  427. skillgate-1.1.0/skillgate/core/gateway/runtime.py +67 -0
  428. skillgate-1.1.0/skillgate/core/gateway/runtime_engine.py +147 -0
  429. skillgate-1.1.0/skillgate/core/gateway/sandbox.py +90 -0
  430. skillgate-1.1.0/skillgate/core/gateway/scope.py +100 -0
  431. skillgate-1.1.0/skillgate/core/gateway/session.py +202 -0
  432. skillgate-1.1.0/skillgate/core/gateway/top_guard.py +168 -0
  433. skillgate-1.1.0/skillgate/core/hunt/__init__.py +25 -0
  434. skillgate-1.1.0/skillgate/core/hunt/engine.py +290 -0
  435. skillgate-1.1.0/skillgate/core/hunt/models.py +127 -0
  436. skillgate-1.1.0/skillgate/core/hunt/parser.py +150 -0
  437. skillgate-1.1.0/skillgate/core/models/__init__.py +34 -0
  438. skillgate-1.1.0/skillgate/core/models/artifact.py +96 -0
  439. skillgate-1.1.0/skillgate/core/models/bundle.py +48 -0
  440. skillgate-1.1.0/skillgate/core/models/enums.py +40 -0
  441. skillgate-1.1.0/skillgate/core/models/finding.py +81 -0
  442. skillgate-1.1.0/skillgate/core/models/report.py +99 -0
  443. skillgate-1.1.0/skillgate/core/orchestrator/__init__.py +59 -0
  444. skillgate-1.1.0/skillgate/core/orchestrator/approval.py +80 -0
  445. skillgate-1.1.0/skillgate/core/orchestrator/engine.py +166 -0
  446. skillgate-1.1.0/skillgate/core/orchestrator/evidence.py +102 -0
  447. skillgate-1.1.0/skillgate/core/orchestrator/models.py +78 -0
  448. skillgate-1.1.0/skillgate/core/orchestrator/pipeline.py +166 -0
  449. skillgate-1.1.0/skillgate/core/orchestrator/triage.py +167 -0
  450. skillgate-1.1.0/skillgate/core/orchestrator/write_path.py +92 -0
  451. skillgate-1.1.0/skillgate/core/parser/__init__.py +26 -0
  452. skillgate-1.1.0/skillgate/core/parser/archive.py +672 -0
  453. skillgate-1.1.0/skillgate/core/parser/bundle.py +100 -0
  454. skillgate-1.1.0/skillgate/core/parser/document.py +366 -0
  455. skillgate-1.1.0/skillgate/core/parser/fleet.py +115 -0
  456. skillgate-1.1.0/skillgate/core/parser/manifest.py +188 -0
  457. skillgate-1.1.0/skillgate/core/parser/markdown.py +352 -0
  458. skillgate-1.1.0/skillgate/core/parser/source.py +90 -0
  459. skillgate-1.1.0/skillgate/core/policy/__init__.py +36 -0
  460. skillgate-1.1.0/skillgate/core/policy/engine.py +501 -0
  461. skillgate-1.1.0/skillgate/core/policy/loader.py +148 -0
  462. skillgate-1.1.0/skillgate/core/policy/presets.py +148 -0
  463. skillgate-1.1.0/skillgate/core/policy/schema.py +276 -0
  464. skillgate-1.1.0/skillgate/core/reputation/__init__.py +17 -0
  465. skillgate-1.1.0/skillgate/core/reputation/models.py +49 -0
  466. skillgate-1.1.0/skillgate/core/reputation/policy.py +147 -0
  467. skillgate-1.1.0/skillgate/core/reputation/redaction.py +13 -0
  468. skillgate-1.1.0/skillgate/core/reputation/store.py +116 -0
  469. skillgate-1.1.0/skillgate/core/reputation/verifier.py +96 -0
  470. skillgate-1.1.0/skillgate/core/retroscan/__init__.py +24 -0
  471. skillgate-1.1.0/skillgate/core/retroscan/engine.py +222 -0
  472. skillgate-1.1.0/skillgate/core/retroscan/models.py +80 -0
  473. skillgate-1.1.0/skillgate/core/retroscan/store.py +138 -0
  474. skillgate-1.1.0/skillgate/core/scorer/__init__.py +6 -0
  475. skillgate-1.1.0/skillgate/core/scorer/engine.py +85 -0
  476. skillgate-1.1.0/skillgate/core/scorer/severity.py +31 -0
  477. skillgate-1.1.0/skillgate/core/scorer/weights.py +15 -0
  478. skillgate-1.1.0/skillgate/core/signer/__init__.py +22 -0
  479. skillgate-1.1.0/skillgate/core/signer/canonical.py +44 -0
  480. skillgate-1.1.0/skillgate/core/signer/engine.py +150 -0
  481. skillgate-1.1.0/skillgate/core/signer/keys.py +120 -0
  482. skillgate-1.1.0/skillgate/py.typed +0 -0
  483. skillgate-1.1.0/skillgate/version.py +3 -0
  484. skillgate-1.1.0/skillgate-docs/node_modules/flatted/python/flatted.py +149 -0
  485. skillgate-1.1.0/skillgate.egg-info/PKG-INFO +219 -0
  486. skillgate-1.1.0/skillgate.egg-info/SOURCES.txt +939 -0
  487. skillgate-1.1.0/skillgate.egg-info/dependency_links.txt +1 -0
  488. skillgate-1.1.0/skillgate.egg-info/entry_points.txt +2 -0
  489. skillgate-1.1.0/skillgate.egg-info/requires.txt +55 -0
  490. skillgate-1.1.0/skillgate.egg-info/top_level.txt +2 -0
  491. skillgate-1.1.0/tests/__init__.py +0 -0
  492. skillgate-1.1.0/tests/conftest.py +101 -0
  493. skillgate-1.1.0/tests/defense/__init__.py +5 -0
  494. skillgate-1.1.0/tests/defense/corpus/__init__.py +1 -0
  495. skillgate-1.1.0/tests/defense/corpus/backdoor-skill/SKILL.md +10 -0
  496. skillgate-1.1.0/tests/defense/corpus/backdoor-skill/agent.py +20 -0
  497. skillgate-1.1.0/tests/defense/corpus/credential-harvester/SKILL.md +10 -0
  498. skillgate-1.1.0/tests/defense/corpus/credential-harvester/harvester.py +54 -0
  499. skillgate-1.1.0/tests/defense/corpus/eval-injection/SKILL.md +10 -0
  500. skillgate-1.1.0/tests/defense/corpus/eval-injection/main.py +25 -0
  501. skillgate-1.1.0/tests/defense/corpus/obfuscated-malware/SKILL.md +10 -0
  502. skillgate-1.1.0/tests/defense/corpus/obfuscated-malware/agent.py +33 -0
  503. skillgate-1.1.0/tests/defense/corpus/rce-skill/SKILL.md +10 -0
  504. skillgate-1.1.0/tests/defense/corpus/rce-skill/skill.py +25 -0
  505. skillgate-1.1.0/tests/defense/test_false_negative_corpus.py +143 -0
  506. skillgate-1.1.0/tests/defense/test_mutation_detection.py +257 -0
  507. skillgate-1.1.0/tests/defense/test_security_fixes_16_29_35.py +446 -0
  508. skillgate-1.1.0/tests/docs/__init__.py +1 -0
  509. skillgate-1.1.0/tests/docs/test_docs_exist.py +285 -0
  510. skillgate-1.1.0/tests/docs/test_explainer_provider_migration.py +25 -0
  511. skillgate-1.1.0/tests/docs/test_hybrid_runbook.py +14 -0
  512. skillgate-1.1.0/tests/docs/test_installation_org_enterprise_contract.py +36 -0
  513. skillgate-1.1.0/tests/docs/test_installation_spec_contract.py +82 -0
  514. skillgate-1.1.0/tests/docs/test_installation_tracks.py +30 -0
  515. skillgate-1.1.0/tests/docs/test_npm_shim_contract.py +40 -0
  516. skillgate-1.1.0/tests/docs/test_pricing_launch_controls.py +46 -0
  517. skillgate-1.1.0/tests/e2e/__init__.py +0 -0
  518. skillgate-1.1.0/tests/e2e/test_agent_mode.py +95 -0
  519. skillgate-1.1.0/tests/e2e/test_api_command_matrix.py +255 -0
  520. skillgate-1.1.0/tests/e2e/test_cli_command_matrix.py +616 -0
  521. skillgate-1.1.0/tests/e2e/test_cli_policy.py +178 -0
  522. skillgate-1.1.0/tests/e2e/test_cli_sarif.py +150 -0
  523. skillgate-1.1.0/tests/e2e/test_cli_scan.py +88 -0
  524. skillgate-1.1.0/tests/e2e/test_cli_verify.py +189 -0
  525. skillgate-1.1.0/tests/e2e/test_npm_shim_wrapper.py +86 -0
  526. skillgate-1.1.0/tests/e2e/test_packaging_build_install.py +66 -0
  527. skillgate-1.1.0/tests/e2e/test_packaging_release.py +301 -0
  528. skillgate-1.1.0/tests/fixtures/bom_unknown_skills.jsonl +5 -0
  529. skillgate-1.1.0/tests/fixtures/injection_corpus_v1.jsonl +520 -0
  530. skillgate-1.1.0/tests/fixtures/policies/custom_overrides.yml +32 -0
  531. skillgate-1.1.0/tests/fixtures/policies/development.yml +22 -0
  532. skillgate-1.1.0/tests/fixtures/policies/invalid_version.yml +6 -0
  533. skillgate-1.1.0/tests/fixtures/policies/invalid_yaml.yml +2 -0
  534. skillgate-1.1.0/tests/fixtures/policies/production.yml +27 -0
  535. skillgate-1.1.0/tests/fixtures/policies/strict.yml +24 -0
  536. skillgate-1.1.0/tests/fixtures/runtime/efficacy_corpus.json +34 -0
  537. skillgate-1.1.0/tests/fixtures/skills/malicious/evil-skill/SKILL.md +6 -0
  538. skillgate-1.1.0/tests/fixtures/skills/malicious/evil-skill/handler.py +61 -0
  539. skillgate-1.1.0/tests/fixtures/skills/malicious/go-evil-skill/handler.go +57 -0
  540. skillgate-1.1.0/tests/fixtures/skills/malicious/go-evil-skill/skill.json +1 -0
  541. skillgate-1.1.0/tests/fixtures/skills/malicious/js-evil-skill/index.js +25 -0
  542. skillgate-1.1.0/tests/fixtures/skills/malicious/js-evil-skill/package.json +6 -0
  543. skillgate-1.1.0/tests/fixtures/skills/malicious/ruby-evil-skill/handler.rb +45 -0
  544. skillgate-1.1.0/tests/fixtures/skills/malicious/ruby-evil-skill/skill.json +1 -0
  545. skillgate-1.1.0/tests/fixtures/skills/malicious/rust-evil-skill/skill.json +1 -0
  546. skillgate-1.1.0/tests/fixtures/skills/malicious/rust-evil-skill/src/lib.rs +60 -0
  547. skillgate-1.1.0/tests/fixtures/skills/safe/datetime-skill/SKILL.md +6 -0
  548. skillgate-1.1.0/tests/fixtures/skills/safe/datetime-skill/handler.py +18 -0
  549. skillgate-1.1.0/tests/fixtures/skills/safe/go-skill/handler.go +13 -0
  550. skillgate-1.1.0/tests/fixtures/skills/safe/go-skill/skill.json +1 -0
  551. skillgate-1.1.0/tests/fixtures/skills/safe/hello-skill/SKILL.md +6 -0
  552. skillgate-1.1.0/tests/fixtures/skills/safe/hello-skill/handler.py +15 -0
  553. skillgate-1.1.0/tests/fixtures/skills/safe/hello-skill/utils.py +11 -0
  554. skillgate-1.1.0/tests/fixtures/skills/safe/json-skill/SKILL.md +6 -0
  555. skillgate-1.1.0/tests/fixtures/skills/safe/json-skill/handler.py +19 -0
  556. skillgate-1.1.0/tests/fixtures/skills/safe/logging-skill/SKILL.md +6 -0
  557. skillgate-1.1.0/tests/fixtures/skills/safe/logging-skill/handler.py +19 -0
  558. skillgate-1.1.0/tests/fixtures/skills/safe/math-skill/SKILL.md +6 -0
  559. skillgate-1.1.0/tests/fixtures/skills/safe/math-skill/handler.py +16 -0
  560. skillgate-1.1.0/tests/fixtures/skills/safe/node-skill/index.js +11 -0
  561. skillgate-1.1.0/tests/fixtures/skills/safe/node-skill/package.json +9 -0
  562. skillgate-1.1.0/tests/fixtures/skills/safe/ruby-skill/handler.rb +11 -0
  563. skillgate-1.1.0/tests/fixtures/skills/safe/ruby-skill/skill.json +1 -0
  564. skillgate-1.1.0/tests/fixtures/skills/safe/rust-skill/skill.json +1 -0
  565. skillgate-1.1.0/tests/fixtures/skills/safe/rust-skill/src/lib.rs +19 -0
  566. skillgate-1.1.0/tests/fixtures/skills/safe/text-skill/SKILL.md +6 -0
  567. skillgate-1.1.0/tests/fixtures/skills/safe/text-skill/handler.py +16 -0
  568. skillgate-1.1.0/tests/fixtures/skills/safe/validator-skill/SKILL.md +6 -0
  569. skillgate-1.1.0/tests/fixtures/skills/safe/validator-skill/handler.py +21 -0
  570. skillgate-1.1.0/tests/integration/__init__.py +0 -0
  571. skillgate-1.1.0/tests/integration/test_bom_gate.py +84 -0
  572. skillgate-1.1.0/tests/integration/test_ci_output.py +201 -0
  573. skillgate-1.1.0/tests/integration/test_ci_templates.py +123 -0
  574. skillgate-1.1.0/tests/integration/test_enrichment_pipeline.py +83 -0
  575. skillgate-1.1.0/tests/integration/test_gateway_runtime_efficacy_corpus.py +34 -0
  576. skillgate-1.1.0/tests/integration/test_multilang_pipeline.py +106 -0
  577. skillgate-1.1.0/tests/integration/test_performance.py +127 -0
  578. skillgate-1.1.0/tests/integration/test_policy_enforcement.py +138 -0
  579. skillgate-1.1.0/tests/integration/test_scan_pipeline.py +100 -0
  580. skillgate-1.1.0/tests/integration/test_security_audit.py +178 -0
  581. skillgate-1.1.0/tests/integration/test_signed_reports.py +104 -0
  582. skillgate-1.1.0/tests/integration/test_top_guard.py +78 -0
  583. skillgate-1.1.0/tests/slo/__init__.py +5 -0
  584. skillgate-1.1.0/tests/slo/test_false_positive_rate.py +354 -0
  585. skillgate-1.1.0/tests/slo/test_latency_budget.py +213 -0
  586. skillgate-1.1.0/tests/unit/__init__.py +0 -0
  587. skillgate-1.1.0/tests/unit/test_analyzer/__init__.py +0 -0
  588. skillgate-1.1.0/tests/unit/test_analyzer/test_base_ast_rule.py +90 -0
  589. skillgate-1.1.0/tests/unit/test_analyzer/test_correlation.py +219 -0
  590. skillgate-1.1.0/tests/unit/test_analyzer/test_engine.py +117 -0
  591. skillgate-1.1.0/tests/unit/test_analyzer/test_engine_extended.py +182 -0
  592. skillgate-1.1.0/tests/unit/test_analyzer/test_fn_fp_harness.py +142 -0
  593. skillgate-1.1.0/tests/unit/test_analyzer/test_perf_guard.py +171 -0
  594. skillgate-1.1.0/tests/unit/test_analyzer/test_rules/__init__.py +0 -0
  595. skillgate-1.1.0/tests/unit/test_analyzer/test_rules/test_base_language_filter.py +50 -0
  596. skillgate-1.1.0/tests/unit/test_analyzer/test_rules/test_credential.py +96 -0
  597. skillgate-1.1.0/tests/unit/test_analyzer/test_rules/test_eval.py +73 -0
  598. skillgate-1.1.0/tests/unit/test_analyzer/test_rules/test_filesystem.py +84 -0
  599. skillgate-1.1.0/tests/unit/test_analyzer/test_rules/test_go.py +178 -0
  600. skillgate-1.1.0/tests/unit/test_analyzer/test_rules/test_injection.py +58 -0
  601. skillgate-1.1.0/tests/unit/test_analyzer/test_rules/test_js_ast.py +110 -0
  602. skillgate-1.1.0/tests/unit/test_analyzer/test_rules/test_network.py +87 -0
  603. skillgate-1.1.0/tests/unit/test_analyzer/test_rules/test_obfuscation.py +86 -0
  604. skillgate-1.1.0/tests/unit/test_analyzer/test_rules/test_ruby.py +212 -0
  605. skillgate-1.1.0/tests/unit/test_analyzer/test_rules/test_rust.py +172 -0
  606. skillgate-1.1.0/tests/unit/test_analyzer/test_rules/test_shell.py +135 -0
  607. skillgate-1.1.0/tests/unit/test_analyzer/test_rules/test_shell_ast.py +89 -0
  608. skillgate-1.1.0/tests/unit/test_analyzer/test_treesitter.py +31 -0
  609. skillgate-1.1.0/tests/unit/test_analyzer/test_treesitter_extended.py +258 -0
  610. skillgate-1.1.0/tests/unit/test_analyzer/test_unicode_normalizer.py +182 -0
  611. skillgate-1.1.0/tests/unit/test_api/__init__.py +0 -0
  612. skillgate-1.1.0/tests/unit/test_api/conftest.py +68 -0
  613. skillgate-1.1.0/tests/unit/test_api/test_alerts_api.py +165 -0
  614. skillgate-1.1.0/tests/unit/test_api/test_app_lifespan.py +59 -0
  615. skillgate-1.1.0/tests/unit/test_api/test_audit_api.py +90 -0
  616. skillgate-1.1.0/tests/unit/test_api/test_auth_api_keys.py +553 -0
  617. skillgate-1.1.0/tests/unit/test_api/test_auth_contract_migration_modes.py +195 -0
  618. skillgate-1.1.0/tests/unit/test_api/test_auth_edges.py +170 -0
  619. skillgate-1.1.0/tests/unit/test_api/test_auth_observability.py +52 -0
  620. skillgate-1.1.0/tests/unit/test_api/test_bot_mitigation.py +114 -0
  621. skillgate-1.1.0/tests/unit/test_api/test_db.py +99 -0
  622. skillgate-1.1.0/tests/unit/test_api/test_device_codes.py +110 -0
  623. skillgate-1.1.0/tests/unit/test_api/test_entitlement_api.py +180 -0
  624. skillgate-1.1.0/tests/unit/test_api/test_entitlement_teams.py +64 -0
  625. skillgate-1.1.0/tests/unit/test_api/test_entitlements_api.py +193 -0
  626. skillgate-1.1.0/tests/unit/test_api/test_error_envelope.py +44 -0
  627. skillgate-1.1.0/tests/unit/test_api/test_health.py +19 -0
  628. skillgate-1.1.0/tests/unit/test_api/test_hunt_api.py +166 -0
  629. skillgate-1.1.0/tests/unit/test_api/test_license_api.py +59 -0
  630. skillgate-1.1.0/tests/unit/test_api/test_payments_annual_billing.py +411 -0
  631. skillgate-1.1.0/tests/unit/test_api/test_payments_resilience.py +870 -0
  632. skillgate-1.1.0/tests/unit/test_api/test_pricing_api.py +54 -0
  633. skillgate-1.1.0/tests/unit/test_api/test_rate_limit.py +119 -0
  634. skillgate-1.1.0/tests/unit/test_api/test_redis_circuit_breaker.py +87 -0
  635. skillgate-1.1.0/tests/unit/test_api/test_redis_rate_limit.py +113 -0
  636. skillgate-1.1.0/tests/unit/test_api/test_resilience.py +70 -0
  637. skillgate-1.1.0/tests/unit/test_api/test_retroscan_api.py +70 -0
  638. skillgate-1.1.0/tests/unit/test_api/test_roadmap_api.py +35 -0
  639. skillgate-1.1.0/tests/unit/test_api/test_scan_rate_limit.py +124 -0
  640. skillgate-1.1.0/tests/unit/test_api/test_scans_api.py +102 -0
  641. skillgate-1.1.0/tests/unit/test_api/test_security_headers.py +85 -0
  642. skillgate-1.1.0/tests/unit/test_api/test_security_utils.py +123 -0
  643. skillgate-1.1.0/tests/unit/test_api/test_settings.py +161 -0
  644. skillgate-1.1.0/tests/unit/test_api/test_supabase_auth_provider.py +405 -0
  645. skillgate-1.1.0/tests/unit/test_api/test_supabase_client.py +195 -0
  646. skillgate-1.1.0/tests/unit/test_api/test_supabase_egress.py +60 -0
  647. skillgate-1.1.0/tests/unit/test_api/test_supabase_jwt.py +119 -0
  648. skillgate-1.1.0/tests/unit/test_api/test_supabase_settings.py +216 -0
  649. skillgate-1.1.0/tests/unit/test_api/test_teams_api.py +229 -0
  650. skillgate-1.1.0/tests/unit/test_api/test_telemetry.py +115 -0
  651. skillgate-1.1.0/tests/unit/test_api/test_verify_api.py +74 -0
  652. skillgate-1.1.0/tests/unit/test_api/test_worker.py +94 -0
  653. skillgate-1.1.0/tests/unit/test_ci/__init__.py +0 -0
  654. skillgate-1.1.0/tests/unit/test_ci/test_annotations.py +117 -0
  655. skillgate-1.1.0/tests/unit/test_ci/test_noise.py +263 -0
  656. skillgate-1.1.0/tests/unit/test_ci/test_wrapper_enforcement.py +40 -0
  657. skillgate-1.1.0/tests/unit/test_claim_ledger.py +103 -0
  658. skillgate-1.1.0/tests/unit/test_cli/__init__.py +0 -0
  659. skillgate-1.1.0/tests/unit/test_cli/test_approval_commands.py +64 -0
  660. skillgate-1.1.0/tests/unit/test_cli/test_auth.py +345 -0
  661. skillgate-1.1.0/tests/unit/test_cli/test_branding.py +106 -0
  662. skillgate-1.1.0/tests/unit/test_cli/test_command_tree.py +99 -0
  663. skillgate-1.1.0/tests/unit/test_cli/test_doctor_command.py +60 -0
  664. skillgate-1.1.0/tests/unit/test_cli/test_drift_commands.py +100 -0
  665. skillgate-1.1.0/tests/unit/test_cli/test_entitlement_gates.py +569 -0
  666. skillgate-1.1.0/tests/unit/test_cli/test_formatters/__init__.py +0 -0
  667. skillgate-1.1.0/tests/unit/test_cli/test_formatters/test_human.py +64 -0
  668. skillgate-1.1.0/tests/unit/test_cli/test_formatters/test_human_color.py +372 -0
  669. skillgate-1.1.0/tests/unit/test_cli/test_formatters/test_human_extended.py +133 -0
  670. skillgate-1.1.0/tests/unit/test_cli/test_formatters/test_json.py +66 -0
  671. skillgate-1.1.0/tests/unit/test_cli/test_formatters/test_provenance_enrichment.py +282 -0
  672. skillgate-1.1.0/tests/unit/test_cli/test_formatters/test_sarif.py +257 -0
  673. skillgate-1.1.0/tests/unit/test_cli/test_gateway_commands.py +319 -0
  674. skillgate-1.1.0/tests/unit/test_cli/test_gateway_native_commands.py +370 -0
  675. skillgate-1.1.0/tests/unit/test_cli/test_hooks.py +96 -0
  676. skillgate-1.1.0/tests/unit/test_cli/test_init_command.py +58 -0
  677. skillgate-1.1.0/tests/unit/test_cli/test_keys_command.py +48 -0
  678. skillgate-1.1.0/tests/unit/test_cli/test_remote.py +241 -0
  679. skillgate-1.1.0/tests/unit/test_cli/test_reputation_commands.py +107 -0
  680. skillgate-1.1.0/tests/unit/test_cli/test_scan_command.py +483 -0
  681. skillgate-1.1.0/tests/unit/test_cli/test_scan_extended.py +107 -0
  682. skillgate-1.1.0/tests/unit/test_cli/test_simulate_command.py +194 -0
  683. skillgate-1.1.0/tests/unit/test_cli/test_submit_scan_command.py +56 -0
  684. skillgate-1.1.0/tests/unit/test_cli/test_verify_command.py +86 -0
  685. skillgate-1.1.0/tests/unit/test_cli/test_watch_mode.py +34 -0
  686. skillgate-1.1.0/tests/unit/test_config/__init__.py +0 -0
  687. skillgate-1.1.0/tests/unit/test_config/test_license.py +97 -0
  688. skillgate-1.1.0/tests/unit/test_config/test_secrets.py +213 -0
  689. skillgate-1.1.0/tests/unit/test_connectors/__init__.py +0 -0
  690. skillgate-1.1.0/tests/unit/test_connectors/test_file_tip.py +125 -0
  691. skillgate-1.1.0/tests/unit/test_connectors/test_manager.py +261 -0
  692. skillgate-1.1.0/tests/unit/test_connectors/test_models.py +104 -0
  693. skillgate-1.1.0/tests/unit/test_connectors/test_registry.py +131 -0
  694. skillgate-1.1.0/tests/unit/test_enricher/__init__.py +0 -0
  695. skillgate-1.1.0/tests/unit/test_enricher/test_catalog.py +81 -0
  696. skillgate-1.1.0/tests/unit/test_enricher/test_engine.py +87 -0
  697. skillgate-1.1.0/tests/unit/test_enricher/test_models.py +76 -0
  698. skillgate-1.1.0/tests/unit/test_entitlement/__init__.py +128 -0
  699. skillgate-1.1.0/tests/unit/test_entitlement/test_airgap_pack.py +85 -0
  700. skillgate-1.1.0/tests/unit/test_entitlement/test_cache.py +99 -0
  701. skillgate-1.1.0/tests/unit/test_entitlement/test_enterprise.py +88 -0
  702. skillgate-1.1.0/tests/unit/test_entitlement/test_enterprise_adapter.py +244 -0
  703. skillgate-1.1.0/tests/unit/test_entitlement/test_gates.py +134 -0
  704. skillgate-1.1.0/tests/unit/test_entitlement/test_mode.py +70 -0
  705. skillgate-1.1.0/tests/unit/test_entitlement/test_quota.py +95 -0
  706. skillgate-1.1.0/tests/unit/test_entitlement/test_resilience.py +54 -0
  707. skillgate-1.1.0/tests/unit/test_entitlement/test_resolver.py +437 -0
  708. skillgate-1.1.0/tests/unit/test_entitlement/test_usage_authority.py +243 -0
  709. skillgate-1.1.0/tests/unit/test_explainer/__init__.py +0 -0
  710. skillgate-1.1.0/tests/unit/test_explainer/test_engine.py +338 -0
  711. skillgate-1.1.0/tests/unit/test_explainer/test_templates.py +97 -0
  712. skillgate-1.1.0/tests/unit/test_gateway/test_approval.py +53 -0
  713. skillgate-1.1.0/tests/unit/test_gateway/test_bom_gate.py +30 -0
  714. skillgate-1.1.0/tests/unit/test_gateway/test_budget.py +131 -0
  715. skillgate-1.1.0/tests/unit/test_gateway/test_executor.py +39 -0
  716. skillgate-1.1.0/tests/unit/test_gateway/test_lineage.py +52 -0
  717. skillgate-1.1.0/tests/unit/test_gateway/test_runtime_engine.py +135 -0
  718. skillgate-1.1.0/tests/unit/test_gateway/test_scope_and_session.py +52 -0
  719. skillgate-1.1.0/tests/unit/test_gateway/test_top_guard.py +28 -0
  720. skillgate-1.1.0/tests/unit/test_hunt/__init__.py +0 -0
  721. skillgate-1.1.0/tests/unit/test_hunt/test_cli.py +167 -0
  722. skillgate-1.1.0/tests/unit/test_hunt/test_engine.py +331 -0
  723. skillgate-1.1.0/tests/unit/test_hunt/test_models.py +101 -0
  724. skillgate-1.1.0/tests/unit/test_hunt/test_parser.py +137 -0
  725. skillgate-1.1.0/tests/unit/test_models/__init__.py +0 -0
  726. skillgate-1.1.0/tests/unit/test_models/test_finding.py +127 -0
  727. skillgate-1.1.0/tests/unit/test_models/test_report.py +90 -0
  728. skillgate-1.1.0/tests/unit/test_orchestrator/test_approval_evidence.py +109 -0
  729. skillgate-1.1.0/tests/unit/test_orchestrator/test_engine.py +99 -0
  730. skillgate-1.1.0/tests/unit/test_orchestrator/test_pipeline.py +119 -0
  731. skillgate-1.1.0/tests/unit/test_orchestrator/test_triage.py +73 -0
  732. skillgate-1.1.0/tests/unit/test_orchestrator/test_write_path.py +81 -0
  733. skillgate-1.1.0/tests/unit/test_packaging/test_pyproject_contract.py +40 -0
  734. skillgate-1.1.0/tests/unit/test_parser/__init__.py +0 -0
  735. skillgate-1.1.0/tests/unit/test_parser/test_archive.py +505 -0
  736. skillgate-1.1.0/tests/unit/test_parser/test_bundle.py +82 -0
  737. skillgate-1.1.0/tests/unit/test_parser/test_document.py +269 -0
  738. skillgate-1.1.0/tests/unit/test_parser/test_fleet.py +61 -0
  739. skillgate-1.1.0/tests/unit/test_parser/test_manifest.py +87 -0
  740. skillgate-1.1.0/tests/unit/test_parser/test_manifest_extended.py +94 -0
  741. skillgate-1.1.0/tests/unit/test_parser/test_markdown.py +428 -0
  742. skillgate-1.1.0/tests/unit/test_parser/test_source.py +99 -0
  743. skillgate-1.1.0/tests/unit/test_parser/test_source_extended.py +39 -0
  744. skillgate-1.1.0/tests/unit/test_policy/__init__.py +0 -0
  745. skillgate-1.1.0/tests/unit/test_policy/test_confidence.py +254 -0
  746. skillgate-1.1.0/tests/unit/test_policy/test_engine.py +307 -0
  747. skillgate-1.1.0/tests/unit/test_policy/test_loader.py +140 -0
  748. skillgate-1.1.0/tests/unit/test_policy/test_origin_policy.py +195 -0
  749. skillgate-1.1.0/tests/unit/test_policy/test_presets.py +90 -0
  750. skillgate-1.1.0/tests/unit/test_policy/test_schema.py +225 -0
  751. skillgate-1.1.0/tests/unit/test_quality/test_claim_ledger.py +33 -0
  752. skillgate-1.1.0/tests/unit/test_quality/test_deployment_profile_lock.py +10 -0
  753. skillgate-1.1.0/tests/unit/test_quality/test_dual_repo_release_contract.py +132 -0
  754. skillgate-1.1.0/tests/unit/test_quality/test_governance_scope_gate.py +60 -0
  755. skillgate-1.1.0/tests/unit/test_quality/test_install_docs_freshness.py +78 -0
  756. skillgate-1.1.0/tests/unit/test_quality/test_physical_extraction_workflow.py +58 -0
  757. skillgate-1.1.0/tests/unit/test_quality/test_public_export_gate.py +56 -0
  758. skillgate-1.1.0/tests/unit/test_quality/test_release_manifest.py +81 -0
  759. skillgate-1.1.0/tests/unit/test_quality/test_reliability_scorecard.py +41 -0
  760. skillgate-1.1.0/tests/unit/test_quality/test_split_ci_parity.py +10 -0
  761. skillgate-1.1.0/tests/unit/test_quality/test_supabase_compat_migration.py +207 -0
  762. skillgate-1.1.0/tests/unit/test_quality/test_supabase_sql_contracts.py +35 -0
  763. skillgate-1.1.0/tests/unit/test_reputation/__init__.py +0 -0
  764. skillgate-1.1.0/tests/unit/test_reputation/test_models.py +104 -0
  765. skillgate-1.1.0/tests/unit/test_reputation/test_policy.py +68 -0
  766. skillgate-1.1.0/tests/unit/test_reputation/test_store.py +165 -0
  767. skillgate-1.1.0/tests/unit/test_reputation/test_verifier.py +119 -0
  768. skillgate-1.1.0/tests/unit/test_retroscan/__init__.py +0 -0
  769. skillgate-1.1.0/tests/unit/test_retroscan/test_cli.py +165 -0
  770. skillgate-1.1.0/tests/unit/test_retroscan/test_engine.py +174 -0
  771. skillgate-1.1.0/tests/unit/test_retroscan/test_models.py +120 -0
  772. skillgate-1.1.0/tests/unit/test_retroscan/test_store.py +153 -0
  773. skillgate-1.1.0/tests/unit/test_rules/test_command.py +294 -0
  774. skillgate-1.1.0/tests/unit/test_rules/test_config.py +349 -0
  775. skillgate-1.1.0/tests/unit/test_rules/test_prompt.py +273 -0
  776. skillgate-1.1.0/tests/unit/test_scorer/__init__.py +0 -0
  777. skillgate-1.1.0/tests/unit/test_scorer/test_engine.py +113 -0
  778. skillgate-1.1.0/tests/unit/test_scorer/test_severity.py +44 -0
  779. skillgate-1.1.0/tests/unit/test_scorer/test_weights.py +31 -0
  780. skillgate-1.1.0/tests/unit/test_signer/__init__.py +0 -0
  781. skillgate-1.1.0/tests/unit/test_signer/test_canonical.py +69 -0
  782. skillgate-1.1.0/tests/unit/test_signer/test_engine.py +181 -0
  783. skillgate-1.1.0/tests/unit/test_signer/test_keys.py +142 -0
  784. skillgate-1.1.0/tests/unit/test_signer/test_signing_scope.py +139 -0
  785. skillgate-1.1.0/tests/unit/test_version.py +85 -0
  786. skillgate-1.1.0/web-ui/.env.example +22 -0
  787. skillgate-1.1.0/web-ui/.eslintrc.json +7 -0
  788. skillgate-1.1.0/web-ui/.gitignore +36 -0
  789. skillgate-1.1.0/web-ui/.pa11yci.json +22 -0
  790. skillgate-1.1.0/web-ui/docs/README.md +7 -0
  791. skillgate-1.1.0/web-ui/e2e/a11y.spec.ts +58 -0
  792. skillgate-1.1.0/web-ui/e2e/docs.spec.ts +28 -0
  793. skillgate-1.1.0/web-ui/e2e/marketing.spec.ts +172 -0
  794. skillgate-1.1.0/web-ui/e2e/pricing-a11y-hardening.spec.ts +44 -0
  795. skillgate-1.1.0/web-ui/e2e/pricing-analytics.spec.ts +49 -0
  796. skillgate-1.1.0/web-ui/e2e/pricing-hardening.spec.ts +67 -0
  797. skillgate-1.1.0/web-ui/e2e/pricing-hardening.spec.ts-snapshots/pricing-desktop-runtime-chromium-darwin.png +0 -0
  798. skillgate-1.1.0/web-ui/e2e/pricing-hardening.spec.ts-snapshots/pricing-mobile-peek-mobile-darwin.png +0 -0
  799. skillgate-1.1.0/web-ui/lighthouserc.json +29 -0
  800. skillgate-1.1.0/web-ui/next.config.js +109 -0
  801. skillgate-1.1.0/web-ui/package-lock.json +12788 -0
  802. skillgate-1.1.0/web-ui/package.json +61 -0
  803. skillgate-1.1.0/web-ui/playwright.config.ts +38 -0
  804. skillgate-1.1.0/web-ui/postcss.config.js +6 -0
  805. skillgate-1.1.0/web-ui/public/favicon.svg +18 -0
  806. skillgate-1.1.0/web-ui/public/images/brandname.jpg +0 -0
  807. skillgate-1.1.0/web-ui/public/images/hero-shield.svg +50 -0
  808. skillgate-1.1.0/web-ui/public/images/logo.jpg +0 -0
  809. skillgate-1.1.0/web-ui/public/manifest.json +21 -0
  810. skillgate-1.1.0/web-ui/scripts/check-api-docs-sync.mjs +34 -0
  811. skillgate-1.1.0/web-ui/scripts/check-doc-links.mjs +59 -0
  812. skillgate-1.1.0/web-ui/scripts/check-doc-snippets.mjs +51 -0
  813. skillgate-1.1.0/web-ui/scripts/check-docs-health.mjs +64 -0
  814. skillgate-1.1.0/web-ui/scripts/generate-api-docs.mjs +49 -0
  815. skillgate-1.1.0/web-ui/scripts/lint-markdown.mjs +59 -0
  816. skillgate-1.1.0/web-ui/scripts/run-pa11y.sh +32 -0
  817. skillgate-1.1.0/web-ui/src/__tests__/analytics.test.ts +138 -0
  818. skillgate-1.1.0/web-ui/src/__tests__/api-client.test.ts +243 -0
  819. skillgate-1.1.0/web-ui/src/__tests__/auth-contract.test.ts +102 -0
  820. skillgate-1.1.0/web-ui/src/__tests__/pricing-experiment.test.ts +42 -0
  821. skillgate-1.1.0/web-ui/src/__tests__/pricing.test.ts +110 -0
  822. skillgate-1.1.0/web-ui/src/__tests__/seo.test.ts +45 -0
  823. skillgate-1.1.0/web-ui/src/__tests__/setup.ts +1 -0
  824. skillgate-1.1.0/web-ui/src/app/about/page.tsx +48 -0
  825. skillgate-1.1.0/web-ui/src/app/cancel/page.tsx +45 -0
  826. skillgate-1.1.0/web-ui/src/app/contact/page.tsx +137 -0
  827. skillgate-1.1.0/web-ui/src/app/dashboard/api-keys/page.tsx +256 -0
  828. skillgate-1.1.0/web-ui/src/app/dashboard/billing/page.tsx +167 -0
  829. skillgate-1.1.0/web-ui/src/app/dashboard/layout.tsx +16 -0
  830. skillgate-1.1.0/web-ui/src/app/dashboard/page.tsx +151 -0
  831. skillgate-1.1.0/web-ui/src/app/dashboard/profile/page.tsx +196 -0
  832. skillgate-1.1.0/web-ui/src/app/dashboard/scans/[scanId]/page.tsx +187 -0
  833. skillgate-1.1.0/web-ui/src/app/dashboard/scans/page.tsx +223 -0
  834. skillgate-1.1.0/web-ui/src/app/dashboard/usage/page.tsx +109 -0
  835. skillgate-1.1.0/web-ui/src/app/docs/agent-gateway/page.tsx +150 -0
  836. skillgate-1.1.0/web-ui/src/app/docs/api/page.tsx +47 -0
  837. skillgate-1.1.0/web-ui/src/app/docs/artifacts/page.tsx +43 -0
  838. skillgate-1.1.0/web-ui/src/app/docs/cli/page.tsx +76 -0
  839. skillgate-1.1.0/web-ui/src/app/docs/enterprise/compliance/page.tsx +34 -0
  840. skillgate-1.1.0/web-ui/src/app/docs/enterprise/deployment/page.tsx +35 -0
  841. skillgate-1.1.0/web-ui/src/app/docs/enterprise/page.tsx +52 -0
  842. skillgate-1.1.0/web-ui/src/app/docs/enterprise/procurement/page.tsx +36 -0
  843. skillgate-1.1.0/web-ui/src/app/docs/enterprise/security/page.tsx +28 -0
  844. skillgate-1.1.0/web-ui/src/app/docs/get-started/page.tsx +60 -0
  845. skillgate-1.1.0/web-ui/src/app/docs/governance/page.tsx +74 -0
  846. skillgate-1.1.0/web-ui/src/app/docs/integrations/page.tsx +49 -0
  847. skillgate-1.1.0/web-ui/src/app/docs/intelligence/page.tsx +67 -0
  848. skillgate-1.1.0/web-ui/src/app/docs/layout.tsx +16 -0
  849. skillgate-1.1.0/web-ui/src/app/docs/legal/page.tsx +37 -0
  850. skillgate-1.1.0/web-ui/src/app/docs/migrations/page.tsx +43 -0
  851. skillgate-1.1.0/web-ui/src/app/docs/operations/page.tsx +42 -0
  852. skillgate-1.1.0/web-ui/src/app/docs/page.tsx +53 -0
  853. skillgate-1.1.0/web-ui/src/app/docs/product/page.tsx +98 -0
  854. skillgate-1.1.0/web-ui/src/app/docs/runtime-control/page.tsx +73 -0
  855. skillgate-1.1.0/web-ui/src/app/docs/security/page.tsx +40 -0
  856. skillgate-1.1.0/web-ui/src/app/docs/skillgate/commands/page.tsx +107 -0
  857. skillgate-1.1.0/web-ui/src/app/docs/skillgate/configuration/page.tsx +48 -0
  858. skillgate-1.1.0/web-ui/src/app/docs/skillgate/enforcement-boundaries/page.tsx +111 -0
  859. skillgate-1.1.0/web-ui/src/app/docs/skillgate/page.tsx +63 -0
  860. skillgate-1.1.0/web-ui/src/app/docs/skillgate/runtime-integrations/page.tsx +132 -0
  861. skillgate-1.1.0/web-ui/src/app/error.tsx +57 -0
  862. skillgate-1.1.0/web-ui/src/app/features/page.tsx +91 -0
  863. skillgate-1.1.0/web-ui/src/app/layout.tsx +66 -0
  864. skillgate-1.1.0/web-ui/src/app/legal/dpa-template/page.tsx +113 -0
  865. skillgate-1.1.0/web-ui/src/app/legal/incident-notice-template/page.tsx +69 -0
  866. skillgate-1.1.0/web-ui/src/app/legal/security-addendum-template/page.tsx +118 -0
  867. skillgate-1.1.0/web-ui/src/app/legal/subprocessors/page.tsx +75 -0
  868. skillgate-1.1.0/web-ui/src/app/login/page.tsx +19 -0
  869. skillgate-1.1.0/web-ui/src/app/not-found.tsx +30 -0
  870. skillgate-1.1.0/web-ui/src/app/og/route.tsx +171 -0
  871. skillgate-1.1.0/web-ui/src/app/page.tsx +19 -0
  872. skillgate-1.1.0/web-ui/src/app/pricing/page.tsx +88 -0
  873. skillgate-1.1.0/web-ui/src/app/privacy/page.tsx +109 -0
  874. skillgate-1.1.0/web-ui/src/app/roadmap/page.tsx +21 -0
  875. skillgate-1.1.0/web-ui/src/app/robots.ts +16 -0
  876. skillgate-1.1.0/web-ui/src/app/signup/page.tsx +19 -0
  877. skillgate-1.1.0/web-ui/src/app/sitemap.ts +82 -0
  878. skillgate-1.1.0/web-ui/src/app/success/page.tsx +53 -0
  879. skillgate-1.1.0/web-ui/src/app/terms/page.tsx +121 -0
  880. skillgate-1.1.0/web-ui/src/app/verify-email/page.tsx +18 -0
  881. skillgate-1.1.0/web-ui/src/components/auth/LoginForm.tsx +122 -0
  882. skillgate-1.1.0/web-ui/src/components/auth/SignupForm.tsx +147 -0
  883. skillgate-1.1.0/web-ui/src/components/auth/VerifyEmailPanel.tsx +133 -0
  884. skillgate-1.1.0/web-ui/src/components/dashboard/Card.tsx +37 -0
  885. skillgate-1.1.0/web-ui/src/components/dashboard/DashboardShell.tsx +34 -0
  886. skillgate-1.1.0/web-ui/src/components/dashboard/DashboardTopbar.tsx +49 -0
  887. skillgate-1.1.0/web-ui/src/components/dashboard/DataTable.tsx +104 -0
  888. skillgate-1.1.0/web-ui/src/components/dashboard/EmptyState.tsx +24 -0
  889. skillgate-1.1.0/web-ui/src/components/dashboard/InviteLinkCard.tsx +67 -0
  890. skillgate-1.1.0/web-ui/src/components/dashboard/PageHeader.tsx +22 -0
  891. skillgate-1.1.0/web-ui/src/components/dashboard/Sidebar.tsx +130 -0
  892. skillgate-1.1.0/web-ui/src/components/dashboard/StatCard.tsx +31 -0
  893. skillgate-1.1.0/web-ui/src/components/dashboard/TierGate.tsx +48 -0
  894. skillgate-1.1.0/web-ui/src/components/dashboard/api-keys/CreateKeyForm.tsx +117 -0
  895. skillgate-1.1.0/web-ui/src/components/docs/CodeBlock.tsx +79 -0
  896. skillgate-1.1.0/web-ui/src/components/docs/DocsPage.tsx +62 -0
  897. skillgate-1.1.0/web-ui/src/components/docs/DocsSidebar.tsx +80 -0
  898. skillgate-1.1.0/web-ui/src/components/docs/DocsToc.tsx +96 -0
  899. skillgate-1.1.0/web-ui/src/components/docs/InstallWizard.test.tsx +82 -0
  900. skillgate-1.1.0/web-ui/src/components/docs/InstallWizard.tsx +275 -0
  901. skillgate-1.1.0/web-ui/src/components/docs/IntegrationTabs.tsx +61 -0
  902. skillgate-1.1.0/web-ui/src/components/hero/ThreatTear.tsx +193 -0
  903. skillgate-1.1.0/web-ui/src/components/layout/Footer.tsx +127 -0
  904. skillgate-1.1.0/web-ui/src/components/layout/Header.tsx +385 -0
  905. skillgate-1.1.0/web-ui/src/components/providers/AnalyticsProvider.tsx +18 -0
  906. skillgate-1.1.0/web-ui/src/components/providers/AuthProvider.tsx +179 -0
  907. skillgate-1.1.0/web-ui/src/components/providers/ErrorBoundary.tsx +82 -0
  908. skillgate-1.1.0/web-ui/src/components/providers/QueryProvider.tsx +30 -0
  909. skillgate-1.1.0/web-ui/src/components/sections/CTASection.tsx +63 -0
  910. skillgate-1.1.0/web-ui/src/components/sections/FeaturesSection.tsx +179 -0
  911. skillgate-1.1.0/web-ui/src/components/sections/HeroSection.tsx +125 -0
  912. skillgate-1.1.0/web-ui/src/components/sections/PricingSection.test.tsx +228 -0
  913. skillgate-1.1.0/web-ui/src/components/sections/PricingSection.tsx +1080 -0
  914. skillgate-1.1.0/web-ui/src/components/sections/RoadmapSection.tsx +293 -0
  915. skillgate-1.1.0/web-ui/src/components/sections/SocialProofSection.tsx +50 -0
  916. skillgate-1.1.0/web-ui/src/components/ui/Badge.tsx +31 -0
  917. skillgate-1.1.0/web-ui/src/components/ui/Button.tsx +56 -0
  918. skillgate-1.1.0/web-ui/src/components/ui/Input.tsx +59 -0
  919. skillgate-1.1.0/web-ui/src/components/ui/Modal.tsx +69 -0
  920. skillgate-1.1.0/web-ui/src/components/ui/Skeleton.tsx +18 -0
  921. skillgate-1.1.0/web-ui/src/generated/api-reference.ts +94 -0
  922. skillgate-1.1.0/web-ui/src/lib/analytics.ts +150 -0
  923. skillgate-1.1.0/web-ui/src/lib/api-client.ts +579 -0
  924. skillgate-1.1.0/web-ui/src/lib/auth.ts +64 -0
  925. skillgate-1.1.0/web-ui/src/lib/docs-links.ts +60 -0
  926. skillgate-1.1.0/web-ui/src/lib/docs-nav.ts +170 -0
  927. skillgate-1.1.0/web-ui/src/lib/hooks/use-auth-contract.ts +58 -0
  928. skillgate-1.1.0/web-ui/src/lib/hooks/use-dashboard.ts +164 -0
  929. skillgate-1.1.0/web-ui/src/lib/install-spec.ts +35 -0
  930. skillgate-1.1.0/web-ui/src/lib/pricing-experiment.ts +83 -0
  931. skillgate-1.1.0/web-ui/src/lib/pricing.ts +370 -0
  932. skillgate-1.1.0/web-ui/src/lib/roadmap-fallback.ts +55 -0
  933. skillgate-1.1.0/web-ui/src/lib/seo.ts +200 -0
  934. skillgate-1.1.0/web-ui/src/lib/types/dashboard.ts +98 -0
  935. skillgate-1.1.0/web-ui/src/lib/utils.ts +7 -0
  936. skillgate-1.1.0/web-ui/src/middleware.ts +52 -0
  937. skillgate-1.1.0/web-ui/src/styles/globals.css +159 -0
  938. skillgate-1.1.0/web-ui/tailwind.config.js +67 -0
  939. skillgate-1.1.0/web-ui/tsconfig.json +24 -0
  940. skillgate-1.1.0/web-ui/vercel.json +30 -0
  941. skillgate-1.1.0/web-ui/vitest.config.ts +25 -0
@@ -0,0 +1,43 @@
1
+ ---
2
+ name: local-ci-gate-pack
3
+ description: Run local production-go gate validation for SkillGate with consolidated artifacts (lint, typecheck, tests, packaging, migrations, security, and governance decision gates) in fail-closed mode.
4
+ ---
5
+
6
+ # Local CI Gate Pack
7
+
8
+ Use this skill when asked to validate production readiness locally or reproduce CI-equivalent checks end-to-end.
9
+
10
+ ## Command
11
+
12
+ From repo root:
13
+
14
+ ```bash
15
+ ./venv/bin/python scripts/quality/run_local_ci_gate.py --offline-safe
16
+ ```
17
+
18
+ ## What It Validates
19
+
20
+ 1. Lint + formatting + quality script gates
21
+ 2. Strict typing (`mypy --strict`)
22
+ 3. Test suite
23
+ 4. SLO gates
24
+ 5. Reliability scorecard generation
25
+ 6. Packaging smoke + build + twine metadata check (`--no-isolation`)
26
+ 7. API command matrix
27
+ 8. Web UI check/build
28
+ 9. Alembic upgrade/downgrade/upgrade against local DB URL
29
+ 10. Security checks (`pip-audit`, `detect-secrets`)
30
+ 11. Governance decision-gate checks
31
+
32
+ ## Artifacts
33
+
34
+ - `docs/section-11-risk-mitigation/artifacts/consolidated-release-audit-<YYYY-MM-DD>.log`
35
+ - `docs/section-11-risk-mitigation/artifacts/consolidated-release-audit-<YYYY-MM-DD>.json`
36
+ - `docs/section-11-risk-mitigation/artifacts/consolidated-release-audit-<YYYY-MM-DD>.md`
37
+
38
+ ## Fail-Closed Rules
39
+
40
+ - Do not skip a failing step and continue.
41
+ - Do not install missing tools inside the gate command.
42
+ - If offline/tooling constraints block `pip-audit` or `detect-secrets`, treat as gate failure and resolve prerequisites first.
43
+ - Use `--skip-web-ui` only for scoped backend iteration, not production-go adjudication.
@@ -0,0 +1,141 @@
1
+ ---
2
+ name: production-hardening-gate
3
+ description: Run a strict production hardening and product-outcome gate for SkillGate: governance enforcement proof, evidence-backed claims, conversion path readiness, moat clarity, and GO/NO-GO verdict based on product trust and revenue-aligned signals.
4
+ ---
5
+
6
+ # Production Hardening Gate
7
+
8
+ Use this skill when asked for production readiness, release adjudication, or strict GO/NO-GO.
9
+
10
+ Decision posture:
11
+
12
+ - Optimize for product outcomes, not owner preference and not agent convenience.
13
+ - Prefer decisions that increase defensible moat, trust, and conversion.
14
+ - Reject work that adds features without strengthening enforcement, evidence, or distribution.
15
+
16
+ ## Scope
17
+
18
+ Validate these gates in order (fail-closed):
19
+ 1. Claim-ledger hard gate + docs launch controls
20
+ 2. Tier-gating proof paths (`hunt`/`retroscan` CLI + API)
21
+ 3. Enterprise trust controls (signed token presence, subject binding, mode/authority lock abuse tests)
22
+ 4. Performance & latency SLO gates (p50/p95/p99 + cold-start where applicable)
23
+ 5. Resilience & degradation gates (timeouts, retries, circuit breakers, backpressure, graceful failure)
24
+ 6. Observability & supportability gates (structured logs, traces, metrics, runbooks, on-call debug flow)
25
+ 7. CLI/API matrix (including `saas`, `private_relay`, `airgap` coverage)
26
+ 8. Data integrity & migration gates (schema migrations, idempotency, replay safety)
27
+ 9. Packaging/release hardening (wheel + sdist + install smoke + publish rehearsal)
28
+ 10. Lint/type checks
29
+ 11. Product-outcome gates (moat clarity, SEO intent fit, CTA conversion path)
30
+ 12. Final self-review + reflection + GO/NO-GO checklist
31
+
32
+ ### Product-Outcome Gates (mandatory)
33
+
34
+ 1. Moat gate:
35
+ - Messaging must define SkillGate as governance/enforcement/evidence control plane, not scanner clone.
36
+ - Write-path approvals and signed evidence must be visibly central in product narrative.
37
+
38
+ 2. SEO intent gate:
39
+ - Core pages must target high-intent phrases:
40
+ `AI code security governance`, `secure AI coding pipeline`, `AI coding policy enforcement`, `audit evidence for AI-generated code`.
41
+ - Claims on these pages must map to proof artifacts.
42
+
43
+ 3. CTA gate:
44
+ - Primary CTA must point to runnable first proof flow:
45
+ `scan -> policy decision -> approval (if required) -> signed evidence pack`.
46
+ - CTA path must be testable and reproducible from docs.
47
+
48
+ 4. Revenue proxy gate:
49
+ - Track and report:
50
+ `proof-pack generation rate`, `high-risk write block rate`, `approval-gated write rate`, `claim-to-proof coverage`.
51
+ - If metrics are missing, release is `NO-GO`.
52
+
53
+ ## Required Commands (minimum)
54
+
55
+ Run from repo root:
56
+
57
+ ```bash
58
+ ./venv/bin/pytest -m slow tests/slo/ -q
59
+
60
+ # Performance & latency: require repeatable benchmarks (no network noise)
61
+ ./venv/bin/pytest -m perf tests/perf/ -q -rs
62
+ python scripts/perf/bench_cli.py --runs 10 --json /tmp/skillgate-perf-cli.json
63
+ python scripts/perf/bench_api.py --runs 10 --json /tmp/skillgate-perf-api.json
64
+
65
+ # Resilience: failure-mode tests (timeouts/retries/backpressure)
66
+ ./venv/bin/pytest -m resilience tests/resilience/ -q -rs
67
+
68
+ # Observability: log/trace/metrics schema checks
69
+ ./venv/bin/pytest tests/observability/ -q
70
+
71
+ python scripts/quality/check_claim_ledger.py
72
+ ./venv/bin/pytest tests/docs/test_pricing_launch_controls.py -q
73
+ ./venv/bin/pytest tests/unit/test_hunt/test_cli.py tests/unit/test_retroscan/test_cli.py -q
74
+ ./venv/bin/pytest tests/unit/test_api/test_hunt_api.py tests/unit/test_api/test_retroscan_api.py -q
75
+ ./venv/bin/pytest tests/unit/test_api/test_entitlements_api.py tests/unit/test_entitlement/test_usage_authority.py tests/unit/test_cli/test_entitlement_gates.py -q
76
+ ./venv/bin/pytest tests/e2e/test_cli_command_matrix.py -q
77
+ ./venv/bin/pytest tests/e2e/test_api_command_matrix.py -q
78
+
79
+ # Debuggability/support: verify runbooks & operational docs exist and render
80
+ ./venv/bin/pytest tests/docs/test_runbooks_present.py -q
81
+ ./venv/bin/pytest tests/docs/test_troubleshooting_render.py -q
82
+
83
+ ./venv/bin/pytest -m slow tests/e2e/test_packaging_release.py -q -rs
84
+ python -m build --sdist --wheel --outdir /tmp/skillgate-dist-check
85
+ python -m twine check /tmp/skillgate-dist-check/*
86
+ ./venv/bin/ruff check .
87
+ ./venv/bin/mypy --strict skillgate/
88
+ ```
89
+
90
+ ## Fail-Closed Rules
91
+
92
+ - Any skipped test in packaging/perf/resilience gates is a red flag unless explicitly documented and approved.
93
+ - `sdist` must produce a tarball; do not allow skip-based pass.
94
+ - Matrix coverage must include positive + negative + regression paths.
95
+ - Non-local runtime paths must fail-close when signed entitlement token/subject checks fail.
96
+ - Do not mark GO if any required gate is missing from CI.
97
+ - Do not mark GO if moat messaging is scanner-like or if CTA lacks proof-backed flow.
98
+ - Do not mark GO if claims exist without artifact links.
99
+
100
+ ### Performance/Latency
101
+ - Require baseline benchmarks to be reproducible (≥ 10 runs) and stored as artifacts.
102
+ - Require explicit thresholds for p95 latency and error rate (documented in repo); failing thresholds is NO-GO.
103
+ - Any performance regression vs last release baseline must be explained (root cause + mitigation or rollback plan).
104
+
105
+ ### Resilience
106
+ - Verify timeouts are set (no unbounded waits) and retries are bounded with jitter/backoff.
107
+ - Verify graceful degradation paths exist (partial results, cached reads, fail-open is NOT allowed for security gates).
108
+ - Any single point of failure in critical paths must have mitigation (redundancy, circuit breaker, or clear operational workaround).
109
+
110
+ ### Observability/Supportability
111
+ - Logs must be structured and include correlation IDs for all request/command executions.
112
+ - Tracing must identify top-level operations (`hunt`, `retroscan`, entitlements verification) with spans.
113
+ - Metrics must include: request rate, error rate, latency (p50/p95/p99), saturation signals, and queue depth where applicable.
114
+ - A runbook must exist for each critical service/worker, including: how to reproduce, how to collect evidence, and rollback steps.
115
+
116
+ ## Self-Review + Reflection (required)
117
+
118
+ Before issuing GO/NO-GO, perform a brief self-audit and record it in the output:
119
+
120
+ 1. **Correctness:** Did we validate the intended invariants (entitlements, tier gating, claim-ledger) with negative tests?
121
+ 2. **Performance:** What are the p50/p95/p99 numbers for CLI and API? Any regression vs baseline? Why?
122
+ 3. **Resilience:** What happens under dependency failure (timeouts, 5xx, slow downstream)? Do we degrade safely?
123
+ 4. **Supportability:** Could on-call debug this in < 15 minutes using logs/traces/runbooks? What evidence proves it?
124
+ 5. **Scalability:** What is the scaling bottleneck (CPU/memory/IO/queue/db)? What is the mitigation plan?
125
+ 6. **Maintainability:** Are modules cohesive, interfaces stable, and configuration explicit? Any tech debt that blocks GA?
126
+ 7. **Product Advantage:** Why is this hard for scanner-first competitors to copy quickly?
127
+ 8. **Distribution Readiness:** Are SEO intent pages + CTA flow aligned to the shipped proof path?
128
+
129
+ If any answer is unclear, assume NO-GO until clarified with evidence.
130
+
131
+ ## Output Contract
132
+
133
+ Return:
134
+ 1. Findings ordered by severity with `file:line` and a one-line impact.
135
+ 2. GO/NO-GO checklist with explicit green/red status per gate (Scope items 1–12).
136
+ 3. Performance snapshot table (p50/p95/p99, error rate, baseline comparison, environment notes).
137
+ 4. Resilience snapshot (tested failure modes + observed behavior + any gaps).
138
+ 5. Supportability snapshot (log/trace evidence, runbook links/paths, and fastest debug path).
139
+ 6. Product-outcome snapshot (`moat`, `SEO intent fit`, `CTA readiness`, `revenue proxies`) with pass/fail.
140
+ 7. One-line final verdict: `GO` or `NO-GO`.
141
+ 8. No mandatory environment variables to be placed in code; all to be mentioned in .env or .env.example with clear instructions. No fallbacks for mandatory environment variables that bypass checks.
@@ -0,0 +1,442 @@
1
+ # SkillGate Environment Configuration
2
+ # Copy this file to .env and fill in your values
3
+ # DO NOT commit .env to version control
4
+
5
+ # ============================================================================
6
+ # DEPLOYMENT ENVIRONMENT
7
+ # ============================================================================
8
+
9
+ # Environment: development, staging, production
10
+ # CRITICAL: production/staging enforces security invariants (signed keys, no demo OAuth, etc.)
11
+ # MANDATORY
12
+ SKILLGATE_ENV=development
13
+
14
+ # Authentication provider mode
15
+ # Allowed: local | supabase
16
+ # MANDATORY
17
+ SKILLGATE_AUTH_PROVIDER=local
18
+
19
+ # ============================================================================
20
+ # SECURITY SECRETS (REQUIRED IN PRODUCTION)
21
+ # ============================================================================
22
+
23
+ # {
24
+ # echo "SKILLGATE_JWT_SECRET=$(openssl rand -hex 64)"
25
+ # echo "SKILLGATE_API_KEY_SECRET=$(openssl rand -hex 64)"
26
+ # echo "SKILLGATE_API_KEY_PEPPER=$(openssl rand -hex 64)"
27
+ # echo "SKILLGATE_REFRESH_TOKEN_PEPPER=$(openssl rand -hex 64)"
28
+ # echo "SKILLGATE_ADMIN_KEY=sg_admin_$(openssl rand -hex 32)"
29
+ # } >> .env.production
30
+
31
+ # JWT signing secret for access tokens (≥64 chars, secure random)
32
+ # Generate with: openssl rand -hex 64
33
+ # MANDATORY
34
+ SKILLGATE_JWT_SECRET=your-jwt-secret-here-minimum-64-characters-use-openssl-rand-hex-64
35
+
36
+ # API key HMAC signing secret for cryptographic validation (≥64 chars)
37
+ # SECURITY FIX 16.33: Used for signed API key format sg_v1_*
38
+ # MANDATORY
39
+ SKILLGATE_API_KEY_SECRET=your-api-key-secret-here-minimum-64-characters-secure-random
40
+
41
+ # API key hashing pepper (≥64 chars, secure random)
42
+ # MANDATORY
43
+ SKILLGATE_API_KEY_PEPPER=your-api-key-pepper-here-minimum-64-characters-secure-random
44
+
45
+ # Refresh token hashing pepper (≥64 chars, secure random)
46
+ # MANDATORY
47
+ SKILLGATE_REFRESH_TOKEN_PEPPER=your-refresh-token-pepper-here-minimum-64-characters-secure-random
48
+
49
+ # Admin API key for privileged operations (webhook replay, reconciliation, etc.)
50
+ # MANDATORY for hosted admin/replay endpoints
51
+ SKILLGATE_ADMIN_KEY=your-admin-key-here-secure-random
52
+
53
+ # ============================================================================
54
+ # EMAIL VERIFICATION (RESEND)
55
+ # ============================================================================
56
+
57
+ # Resend API key for transactional emails (verification, password-reset notifications)
58
+ # Get from: https://resend.com/api-keys
59
+ # RESEND_API_KEY=re_your_resend_api_key_here
60
+
61
+ # Verified sender email/domain in Resend
62
+ # Example: no-reply@yourdomain.com
63
+ # SKILLGATE_EMAIL_FROM=no-reply@skillgate.io
64
+
65
+ # Public web app base URL used to build verification links
66
+ # SKILLGATE_WEB_BASE_URL=https://app.skillgate.io
67
+
68
+ # ============================================================================
69
+ # DATABASE CONFIGURATION
70
+ # ============================================================================
71
+
72
+ # Primary database connection string
73
+ # MANDATORY
74
+ SKILLGATE_DATABASE_URL=postgresql+asyncpg://skillgate:skillgate@localhost:5432/skillgate
75
+
76
+ # Optional read replica for read-heavy operations
77
+ # SKILLGATE_READ_REPLICA_URL=postgresql+asyncpg://skillgate:skillgate@replica:5432/skillgate
78
+
79
+ # Database connection pool settings
80
+ # SKILLGATE_DB_POOL_SIZE=20
81
+ # SKILLGATE_DB_MAX_OVERFLOW=10
82
+
83
+ # Disable DB pooling (useful for one-shot scripts)
84
+ # OPTIONAL
85
+ # SKILLGATE_DISABLE_DB_POOL=false
86
+
87
+ # Auto-initialize database on startup (development only)
88
+ # SKILLGATE_AUTO_INIT_DB=false
89
+
90
+ # ============================================================================
91
+ # REDIS CONFIGURATION
92
+ # ============================================================================
93
+
94
+ # Redis connection string for caching, rate limiting, device codes
95
+ # MANDATORY
96
+ SKILLGATE_REDIS_URL=redis://localhost:6379/0
97
+
98
+ # ============================================================================
99
+ # CORS & WEB SECURITY
100
+ # ============================================================================
101
+
102
+ # Allowed CORS origins (comma-separated)
103
+ # Production: set to your frontend domain(s)
104
+ # Development: localhost with various ports
105
+ # MANDATORY
106
+ SKILLGATE_CORS_ORIGINS=http://localhost:3000,http://127.0.0.1:3000,http://localhost:3001,http://127.0.0.1:3001,https://app.skillgate.io
107
+
108
+ # Allow credentials in CORS requests
109
+ # SKILLGATE_CORS_ALLOW_CREDENTIALS=true
110
+
111
+ # Enable HSTS (HTTP Strict Transport Security) headers
112
+ # Auto-enabled in production/staging
113
+ # SKILLGATE_ENABLE_HSTS=true
114
+
115
+ # ============================================================================
116
+ # OAUTH CONFIGURATION
117
+ # ============================================================================
118
+
119
+ # Enable OAuth authentication (Google, GitHub)
120
+ # SKILLGATE_ENABLE_OAUTH=false
121
+
122
+ # OAuth provider credentials (when OAuth is enabled)
123
+ # GOOGLE_CLIENT_ID=your-google-client-id
124
+ # GOOGLE_CLIENT_SECRET=your-google-client-secret
125
+ # GITHUB_CLIENT_ID=your-github-client-id
126
+ # GITHUB_CLIENT_SECRET=your-github-client-secret
127
+
128
+ # ============================================================================
129
+ # SUPABASE AUTH PROVIDER (REQUIRED WHEN SKILLGATE_AUTH_PROVIDER=supabase)
130
+ # ============================================================================
131
+
132
+ # Supabase project base URL
133
+ # REQUIRED for supabase auth provider
134
+ # SUPABASE_URL=https://your-project.supabase.co
135
+
136
+ # Supabase anonymous key (client-side key)
137
+ # REQUIRED for supabase auth provider
138
+ # SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
139
+
140
+ # Supabase service role key (server-only secret)
141
+ # REQUIRED for supabase auth provider
142
+ # SUPABASE_SERVICE_ROLE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
143
+
144
+ # Supabase JWT verification mode (choose one)
145
+ # REQUIRED for supabase auth provider in production/staging
146
+ # Option A: shared secret
147
+ # SUPABASE_JWT_SECRET=your-supabase-jwt-secret
148
+ # Option B: JWKS URL (auto-derives from SUPABASE_URL if omitted)
149
+ # SUPABASE_JWKS_URL=https://your-project.supabase.co/auth/v1/keys
150
+
151
+ # Additional outbound host allowlist for Supabase client egress policy
152
+ # OPTIONAL
153
+ # SKILLGATE_SUPABASE_EGRESS_ALLOWLIST=api.supabase.co
154
+
155
+ # ============================================================================
156
+ # STRIPE PAYMENT INTEGRATION
157
+ # ============================================================================
158
+
159
+ # Stripe API secret key
160
+ # Get from: https://dashboard.stripe.com/apikeys
161
+ # MANDATORY for payments routes
162
+ STRIPE_SECRET_KEY=sk_test_your_stripe_secret_key_here
163
+
164
+ # Stripe webhook signing secret
165
+ # Get from: https://dashboard.stripe.com/webhooks
166
+ # MANDATORY for webhook routes
167
+ STRIPE_WEBHOOK_SECRET=whsec_your_stripe_webhook_secret_here
168
+
169
+ # Stripe price IDs for subscription tiers (monthly and annual)
170
+ # Get from: https://dashboard.stripe.com/products
171
+ # Industry standard: ~17% discount on annual (2 months free)
172
+ STRIPE_PRICE_PRO_MONTHLY=price_pro_monthly_id
173
+ STRIPE_PRICE_PRO_YEARLY=price_pro_yearly_id
174
+ STRIPE_PRICE_TEAM_MONTHLY=price_team_monthly_id
175
+ STRIPE_PRICE_TEAM_YEARLY=price_team_yearly_id
176
+ STRIPE_PRICE_ENT_MONTHLY=price_enterprise_monthly_id
177
+ STRIPE_PRICE_ENT_YEARLY=price_enterprise_yearly_id
178
+
179
+ # Legacy single-price aliases (deprecated; kept for backward compatibility)
180
+ # OPTIONAL
181
+ # STRIPE_PRICE_PRO=price_pro_monthly_id
182
+ # STRIPE_PRICE_TEAM=price_team_monthly_id
183
+ # STRIPE_PRICE_ENT=price_enterprise_monthly_id
184
+
185
+ # Beta switch: force backend pricing catalog paid-tier CTAs to "Get Started Free"
186
+ # and route users through free onboarding while Stripe is validated.
187
+ # SKILLGATE_PRICING_BETA_FREE_CTA=false
188
+
189
+ # ============================================================================
190
+ # INTEGRATIONS & ALERTING
191
+ # ============================================================================
192
+
193
+ # Default Slack webhook URL for scan alerts
194
+ # SECURITY FIX 16.32: Still validated against allowlist
195
+ # SKILLGATE_SLACK_WEBHOOK=https://hooks.slack.com/services/YOUR/WEBHOOK/URL
196
+
197
+ # Entitlement incident webhook destination
198
+ # OPTIONAL
199
+ # SKILLGATE_ENTITLEMENT_INCIDENT_WEBHOOK_URL=https://hooks.slack.com/services/YOUR/ENTITLEMENT/WEBHOOK
200
+
201
+ # ============================================================================
202
+ # LLM EXPLAINER (OPTIONAL)
203
+ # ============================================================================
204
+
205
+ # Anthropic API key for Claude-based explanations
206
+ # ANTHROPIC_API_KEY=sk-ant-your-anthropic-key-here
207
+
208
+ # Anthropic base URL override
209
+ # OPTIONAL
210
+ # ANTHROPIC_BASE_URL=https://api.anthropic.com
211
+
212
+ # OpenAI API key for GPT-based explanations
213
+ # OPENAI_API_KEY=sk-your-openai-key-here
214
+
215
+ # OpenAI base URL override
216
+ # OPTIONAL
217
+ # OPENAI_BASE_URL=https://api.openai.com
218
+
219
+ # Custom explanation provider controls (optional)
220
+ # Provider: azure-openai | groq | ollama
221
+ # SKILLGATE_EXPLAIN_CUSTOM_PROVIDER=
222
+ # SKILLGATE_EXPLAIN_CUSTOM_BASE_URL=
223
+ # SKILLGATE_EXPLAIN_CUSTOM_MODEL=
224
+ # SKILLGATE_EXPLAIN_CUSTOM_DEPLOYMENT=
225
+ # SKILLGATE_EXPLAIN_AZURE_API_VERSION=2024-02-15-preview
226
+ # AZURE_OPENAI_API_KEY=
227
+ # GROQ_API_KEY=
228
+ # SKILLGATE_EXPLAIN_EGRESS=false
229
+ # SKILLGATE_EXPLAIN_ENDPOINT_ALLOWLIST=api.openai.com,api.anthropic.com
230
+ # SKILLGATE_EXPLAIN_PROVIDER_TIMEOUT_S=8
231
+ # SKILLGATE_EXPLAIN_PROVIDER_RETRIES=2
232
+
233
+ # ============================================================================
234
+ # OBSERVABILITY & TELEMETRY
235
+ # ============================================================================
236
+
237
+ # Enable OpenTelemetry instrumentation
238
+ # SKILLGATE_OTEL_ENABLED=false
239
+
240
+ # OpenTelemetry exporter endpoint
241
+ # OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318
242
+
243
+ # ============================================================================
244
+ # CLI CONFIGURATION
245
+ # ============================================================================
246
+
247
+ # API endpoint for CLI commands (auth, scan upload, etc.)
248
+ # SKILLGATE_API_URL=https://api.skillgate.io
249
+
250
+ # API key for CLI authentication (alternative to web login)
251
+ # SKILLGATE_API_KEY=sg_v1_your_signed_api_key_here
252
+
253
+ # Local/dev only: have UI-generated API keys use tier-encoded legacy format
254
+ # (sg_free_*, sg_pro_*, sg_team_*, sg_ent_*) compatible with local CLI resolver.
255
+ # Ignored unless SKILLGATE_ENV is development/dev/local.
256
+ # SKILLGATE_LOCAL_UI_TIER_KEYS=false
257
+ # SKILLGATE_LOCAL_UI_DEFAULT_TIER=free
258
+
259
+ # CLI mode flag for CI-oriented behavior
260
+ # OPTIONAL
261
+ # SKILLGATE_CI_MODE=false
262
+
263
+ # Entitlement enforcement mode:
264
+ # - local: local tier + local quota cache (dev/default)
265
+ # - saas: hosted authority endpoint for usage/entitlements
266
+ # - private_relay: enterprise internal authority endpoint (no direct public egress from CI)
267
+ # - airgap: signed/offline entitlement flow
268
+ # SKILLGATE_ENTITLEMENT_MODE=local
269
+
270
+ # Non-local authority endpoint for saas/private_relay mode.
271
+ # Expected consume endpoint: {url}/v1/entitlements/consume-scan
272
+ # SKILLGATE_ENTITLEMENT_AUTHORITY_URL=https://api.skillgate.io
273
+
274
+ # On-prem entitlement relay endpoint and auth (server runtime)
275
+ # OPTIONAL (used for private enterprise entitlement relay mode)
276
+ # SKILLGATE_ONPREM_ENTITLEMENT_URL=https://entitlement.internal
277
+ # SKILLGATE_ONPREM_ENTITLEMENT_TOKEN=internal-shared-token
278
+ # SKILLGATE_ONPREM_ENTITLEMENT_TIMEOUT=3.0
279
+ # SKILLGATE_ONPREM_FAIL_OPEN=true
280
+
281
+ # Authority shared secret for hosted entitlement consume endpoint
282
+ # REQUIRED when acting as entitlement authority
283
+ # SKILLGATE_ENTITLEMENT_AUTHORITY_TOKEN=
284
+
285
+ # Runtime lock guards (optional policy hardening)
286
+ # SKILLGATE_ENTITLEMENT_MODE_LOCK=local
287
+ # SKILLGATE_ENTITLEMENT_AUTHORITY_URL_LOCK=https://api.skillgate.io
288
+
289
+ # Optional timeout for authority calls (seconds)
290
+ # SKILLGATE_ENTITLEMENT_AUTHORITY_TIMEOUT_SECONDS=3
291
+
292
+ # Optional signed entitlement payload preference in non-local modes
293
+ # SKILLGATE_ENTITLEMENT_TOKEN=base64url_payload.signature_hex
294
+ # SKILLGATE_ENTITLEMENT_PUBLIC_KEY=ed25519_public_key_hex
295
+ # Optional key ring for multi-key verification
296
+ # SKILLGATE_ENTITLEMENT_PUBLIC_KEYS=key1hex,key2hex
297
+
298
+ # Signed entitlement claim expectations (optional, advanced)
299
+ # SKILLGATE_ENTITLEMENT_ISSUER=skillgate-authority
300
+ # SKILLGATE_ENTITLEMENT_AUDIENCE=skillgate-cli
301
+ # SKILLGATE_ENTITLEMENT_CLOCK_SKEW_SECONDS=120
302
+ # SKILLGATE_ENTITLEMENT_NONCE_TTL_SECONDS=900
303
+ # SKILLGATE_ENTITLEMENT_NONCE_CACHE_SIZE=10000
304
+
305
+ # Runtime trust propagation for nested agent invocations (native hooks / sub-agents)
306
+ # Scope token from parent SkillGate runtime session
307
+ # SKILLGATE_SCOPE_TOKEN=
308
+ # Ed25519 public key used to verify SKILLGATE_SCOPE_TOKEN
309
+ # SKILLGATE_SCOPE_PUBLIC_KEY=
310
+
311
+ # Signed reputation graph path for runtime reputation enforcement
312
+ # SKILLGATE_REPUTATION_STORE=.skillgate/reputation/reputation.json
313
+
314
+ # Runtime gateway and sandbox controls
315
+ # OPTIONAL
316
+ # SKILLGATE_ALLOWED_TOOL_CLASSES=shell,network,filesystem,process
317
+ # SKILLGATE_SANDBOX_BACKEND=
318
+ # SKILLGATE_RUNTIME_TIMEOUT_SECONDS=15
319
+
320
+ # Runtime capability budgets (per day; set >0 to enforce in ci/prod/strict)
321
+ # SKILLGATE_CAPABILITY_BUDGET_PATH=.skillgate/runtime/capability_budgets.json
322
+ # SKILLGATE_BUDGET_SHELL_PER_DAY=0
323
+ # SKILLGATE_BUDGET_NETWORK_PER_DAY=0
324
+ # SKILLGATE_BUDGET_FILESYSTEM_PER_DAY=0
325
+ # SKILLGATE_BUDGET_PROCESS_PER_DAY=0
326
+ # Optional scoped budgets (enforced in addition to global daily budgets)
327
+ # SKILLGATE_BUDGET_SHELL_PER_ORG_PER_DAY=0
328
+ # SKILLGATE_BUDGET_NETWORK_PER_ORG_PER_DAY=0
329
+ # SKILLGATE_BUDGET_FILESYSTEM_PER_ORG_PER_DAY=0
330
+ # SKILLGATE_BUDGET_PROCESS_PER_ORG_PER_DAY=0
331
+ # SKILLGATE_BUDGET_SHELL_PER_SESSION=0
332
+ # SKILLGATE_BUDGET_NETWORK_PER_SESSION=0
333
+ # SKILLGATE_BUDGET_FILESYSTEM_PER_SESSION=0
334
+ # SKILLGATE_BUDGET_PROCESS_PER_SESSION=0
335
+ # External-domain budget controls
336
+ # SKILLGATE_BUDGET_EXTERNAL_DOMAINS_PER_DAY=0
337
+ # SKILLGATE_BUDGET_EXTERNAL_DOMAINS_PER_ORG_PER_DAY=0
338
+ # SKILLGATE_BUDGET_EXTERNAL_DOMAINS_PER_SESSION=0
339
+ # Domain-chain budget controls (unique domain-to-domain transitions)
340
+ # SKILLGATE_BUDGET_DOMAIN_CHAINS_PER_DAY=0
341
+ # SKILLGATE_BUDGET_DOMAIN_CHAINS_PER_ORG_PER_DAY=0
342
+ # SKILLGATE_BUDGET_DOMAIN_CHAINS_PER_SESSION=0
343
+ # Optional org identifier fallback for runtime wrappers
344
+ # SKILLGATE_ORG_ID=
345
+ # Optional approval workflow quorum for hardened runtime invocations
346
+ # SKILLGATE_APPROVAL_REQUIRED_REVIEWERS=0
347
+
348
+ # Air-gap mode daily remaining scans counter (set by offline entitlement pack process)
349
+ # SKILLGATE_AIRGAP_SCANS_REMAINING_TODAY=3
350
+ # Air-gap entitlement pack file path
351
+ # OPTIONAL
352
+ # SKILLGATE_AIRGAP_PACK_PATH=.skillgate/airgap-pack.json
353
+
354
+ # Local quota file override
355
+ # OPTIONAL
356
+ # SKILLGATE_QUOTA_FILE=.skillgate/quota.json
357
+
358
+ # Disable logo/banner in CLI output
359
+ # SKILLGATE_NO_LOGO=false
360
+ # SKILLGATE_NO_BANNER=false
361
+
362
+ # Disable color output (for CI/CD environments)
363
+ # NO_COLOR=
364
+
365
+ # Test mode (disables network calls in scans)
366
+ # SKILLGATE_TEST_MODE=false
367
+
368
+ # Team/tier test harness controls (test/dev only)
369
+ # OPTIONAL
370
+ # SKILLGATE_TIER=free
371
+ # SKILLGATE_TEAM_ACTIVE_SEATS=0
372
+
373
+ # CLI simulate command provider tokens
374
+ # OPTIONAL
375
+ # SKILLGATE_GITHUB_TOKEN=
376
+ # GITHUB_TOKEN=
377
+ # SKILLGATE_GITLAB_TOKEN=
378
+ # GITLAB_TOKEN=
379
+
380
+ # npm shim override (Node wrapper to choose Python binary)
381
+ # OPTIONAL
382
+ # SKILLGATE_PYTHON=/absolute/path/to/python
383
+
384
+ # ============================================================================
385
+ # WEB-UI VARIABLES (also mirrored in web-ui/.env.example)
386
+ # ============================================================================
387
+
388
+ # Public API base URL consumed by web app
389
+ # REQUIRED for production web deployment
390
+ # NEXT_PUBLIC_API_URL=https://api.skillgate.io/api/v1
391
+
392
+ # Analytics endpoint + batching
393
+ # OPTIONAL
394
+ # NEXT_PUBLIC_ANALYTICS_ENDPOINT=
395
+ # NEXT_PUBLIC_ANALYTICS_FLUSH_SIZE=10
396
+
397
+ # Pricing beta CTA switch
398
+ # OPTIONAL
399
+ # NEXT_PUBLIC_PRICING_BETA_FREE_CTA=false
400
+
401
+ # Client-side Stripe key
402
+ # REQUIRED for Stripe checkout UX in web app
403
+ # NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=pk_live_xxx
404
+
405
+ # Web E2E/playwright runtime vars (CI/dev only)
406
+ # OPTIONAL
407
+ # PLAYWRIGHT_PORT=4010
408
+ # PLAYWRIGHT_HOST=127.0.0.1
409
+ # PLAYWRIGHT_BASE_URL=http://127.0.0.1:4010
410
+ # PLAYWRIGHT_ANALYTICS_ENDPOINT=http://127.0.0.1:4010/__analytics
411
+
412
+ # General node/web build flags (CI/dev)
413
+ # OPTIONAL
414
+ # NODE_ENV=production
415
+ # ANALYZE=false
416
+ # CI=false
417
+ # PORT=3000
418
+
419
+ # ============================================================================
420
+ # PRODUCTION DEPLOYMENT CHECKLIST
421
+ # ============================================================================
422
+ #
423
+ # Before deploying to production, ensure:
424
+ #
425
+ # 1. ✅ SKILLGATE_ENV=production
426
+ # 2. ✅ All *_SECRET and *_PEPPER variables are set with ≥64 secure random chars
427
+ # 3. ✅ SKILLGATE_DATABASE_URL points to production database
428
+ # 4. ✅ SKILLGATE_REDIS_URL points to production Redis
429
+ # 5. ✅ STRIPE_SECRET_KEY is production key (sk_live_*)
430
+ # 6. ✅ STRIPE_WEBHOOK_SECRET is configured with endpoint signature
431
+ # 7. ✅ SKILLGATE_CORS_ORIGINS contains only trusted domains
432
+ # 8. ✅ OAuth credentials are production (if OAuth enabled)
433
+ # 9. ✅ No .env file is committed to version control
434
+ # 10. ✅ Secrets are stored in secure secret management (AWS Secrets Manager, HashiCorp Vault, etc.)
435
+ #
436
+ # Security reminders:
437
+ # - Legacy unsigned API keys (sg_pro_*, sg_ent_*) are BLOCKED in production
438
+ # - Demo OAuth mode is BLOCKED in production
439
+ # - All webhook URLs are validated against allowlist
440
+ # - Rate limiting uses socket IP (not spoofable headers)
441
+ #
442
+ # ============================================================================