skilldrop-cli 0.16.3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- skilldrop_cli/__init__.py +16 -0
- skilldrop_cli/__main__.py +3 -0
- skilldrop_cli/data/LICENSE +9 -0
- skilldrop_cli/data/LICENSE-APACHE +202 -0
- skilldrop_cli/data/LICENSE-MIT +21 -0
- skilldrop_cli/data/agents/README.md +127 -0
- skilldrop_cli/data/agents/code-quality.md +40 -0
- skilldrop_cli/data/agents/devils-advocate.md +40 -0
- skilldrop_cli/data/agents/security-reviewer.md +44 -0
- skilldrop_cli/data/bin/skilldrop.js +2110 -0
- skilldrop_cli/data/catalogue.json +187 -0
- skilldrop_cli/data/contracts/agent.schema.json +28 -0
- skilldrop_cli/data/contracts/catalogue.schema.json +33 -0
- skilldrop_cli/data/contracts/guide.schema.json +18 -0
- skilldrop_cli/data/contracts/loop.schema.json +87 -0
- skilldrop_cli/data/contracts/pack.schema.json +75 -0
- skilldrop_cli/data/contracts/skill.schema.json +110 -0
- skilldrop_cli/data/contracts/terminals.json +33 -0
- skilldrop_cli/data/model-routing.json +474 -0
- skilldrop_cli/data/package.json +46 -0
- skilldrop_cli/data/packs/ai-engineering/pack.json +57 -0
- skilldrop_cli/data/packs/ai-engineering/skills/agent-adoption-stage/SKILL.md +90 -0
- skilldrop_cli/data/packs/ai-engineering/skills/agent-adoption-stage/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/ai-engineering/skills/agent-adoption-stage/evals/evals.json +19 -0
- skilldrop_cli/data/packs/ai-engineering/skills/agent-adoption-stage/manifest.json +39 -0
- skilldrop_cli/data/packs/ai-engineering/skills/agent-budget/SKILL.md +63 -0
- skilldrop_cli/data/packs/ai-engineering/skills/agent-budget/evals/eval_queries.json +11 -0
- skilldrop_cli/data/packs/ai-engineering/skills/agent-budget/evals/evals.json +28 -0
- skilldrop_cli/data/packs/ai-engineering/skills/agent-budget/manifest.json +11 -0
- skilldrop_cli/data/packs/ai-engineering/skills/agent-budget/templates/budget-spec.md +30 -0
- skilldrop_cli/data/packs/ai-engineering/skills/agent-loop-design/SKILL.md +70 -0
- skilldrop_cli/data/packs/ai-engineering/skills/agent-loop-design/evals/eval_queries.json +11 -0
- skilldrop_cli/data/packs/ai-engineering/skills/agent-loop-design/evals/evals.json +28 -0
- skilldrop_cli/data/packs/ai-engineering/skills/agent-loop-design/manifest.json +11 -0
- skilldrop_cli/data/packs/ai-engineering/skills/agent-loop-design/templates/loop-spec.md +46 -0
- skilldrop_cli/data/packs/ai-engineering/skills/agent-threat-model/SKILL.md +89 -0
- skilldrop_cli/data/packs/ai-engineering/skills/agent-threat-model/evals/eval_queries.json +15 -0
- skilldrop_cli/data/packs/ai-engineering/skills/agent-threat-model/evals/evals.json +41 -0
- skilldrop_cli/data/packs/ai-engineering/skills/agent-threat-model/examples/support-triage-agent.md +117 -0
- skilldrop_cli/data/packs/ai-engineering/skills/agent-threat-model/manifest.json +11 -0
- skilldrop_cli/data/packs/ai-engineering/skills/agent-threat-model/reference.md +101 -0
- skilldrop_cli/data/packs/ai-engineering/skills/agent-threat-model/templates/agent-threat-model.md +71 -0
- skilldrop_cli/data/packs/ai-engineering/skills/ai-adoption-rollout/SKILL.md +61 -0
- skilldrop_cli/data/packs/ai-engineering/skills/ai-adoption-rollout/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/ai-engineering/skills/ai-adoption-rollout/evals/evals.json +19 -0
- skilldrop_cli/data/packs/ai-engineering/skills/ai-adoption-rollout/manifest.json +33 -0
- skilldrop_cli/data/packs/ai-engineering/skills/ai-readiness-assessment/SKILL.md +68 -0
- skilldrop_cli/data/packs/ai-engineering/skills/ai-readiness-assessment/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/ai-engineering/skills/ai-readiness-assessment/evals/evals.json +17 -0
- skilldrop_cli/data/packs/ai-engineering/skills/ai-readiness-assessment/manifest.json +35 -0
- skilldrop_cli/data/packs/ai-engineering/skills/ai-usage-policy/SKILL.md +67 -0
- skilldrop_cli/data/packs/ai-engineering/skills/ai-usage-policy/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/ai-engineering/skills/ai-usage-policy/evals/evals.json +19 -0
- skilldrop_cli/data/packs/ai-engineering/skills/ai-usage-policy/manifest.json +33 -0
- skilldrop_cli/data/packs/ai-engineering/skills/ai-usage-report/SKILL.md +111 -0
- skilldrop_cli/data/packs/ai-engineering/skills/ai-usage-report/evals/eval_queries.json +30 -0
- skilldrop_cli/data/packs/ai-engineering/skills/ai-usage-report/evals/evals.json +19 -0
- skilldrop_cli/data/packs/ai-engineering/skills/ai-usage-report/evals/files/1/northwind-ai-events.csv +4213 -0
- skilldrop_cli/data/packs/ai-engineering/skills/ai-usage-report/examples/weekly-engineering-team.md +133 -0
- skilldrop_cli/data/packs/ai-engineering/skills/ai-usage-report/manifest.json +12 -0
- skilldrop_cli/data/packs/ai-engineering/skills/ai-usage-report/scripts/build_report.py +436 -0
- skilldrop_cli/data/packs/ai-engineering/skills/ai-usage-report/templates/report-per-user.md +42 -0
- skilldrop_cli/data/packs/ai-engineering/skills/ai-usage-report/templates/report-team-rollup.md +49 -0
- skilldrop_cli/data/packs/ai-engineering/skills/ai-usage-report/templates/usage-event-schema.md +76 -0
- skilldrop_cli/data/packs/ai-engineering/skills/ai-use-case-triage/SKILL.md +59 -0
- skilldrop_cli/data/packs/ai-engineering/skills/ai-use-case-triage/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/ai-engineering/skills/ai-use-case-triage/evals/evals.json +18 -0
- skilldrop_cli/data/packs/ai-engineering/skills/ai-use-case-triage/manifest.json +34 -0
- skilldrop_cli/data/packs/ai-engineering/skills/llm-eval-harness/SKILL.md +73 -0
- skilldrop_cli/data/packs/ai-engineering/skills/llm-eval-harness/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/ai-engineering/skills/llm-eval-harness/evals/evals.json +19 -0
- skilldrop_cli/data/packs/ai-engineering/skills/llm-eval-harness/manifest.json +11 -0
- skilldrop_cli/data/packs/ai-engineering/skills/llm-eval-harness/reference.md +58 -0
- skilldrop_cli/data/packs/ai-engineering/skills/llm-eval-harness/templates/eval-plan.md +63 -0
- skilldrop_cli/data/packs/ai-engineering/skills/llm-eval-harness/templates/golden-case.jsonl +5 -0
- skilldrop_cli/data/packs/ai-engineering/skills/subagent-design/SKILL.md +69 -0
- skilldrop_cli/data/packs/ai-engineering/skills/subagent-design/evals/eval_queries.json +11 -0
- skilldrop_cli/data/packs/ai-engineering/skills/subagent-design/evals/evals.json +29 -0
- skilldrop_cli/data/packs/ai-engineering/skills/subagent-design/manifest.json +11 -0
- skilldrop_cli/data/packs/ai-engineering/skills/subagent-design/templates/orchestration-plan.md +47 -0
- skilldrop_cli/data/packs/api-builder/pack.json +48 -0
- skilldrop_cli/data/packs/api-builder/skills/eval-harness-generator/SKILL.md +84 -0
- skilldrop_cli/data/packs/api-builder/skills/eval-harness-generator/evals/eval_queries.json +30 -0
- skilldrop_cli/data/packs/api-builder/skills/eval-harness-generator/evals/evals.json +19 -0
- skilldrop_cli/data/packs/api-builder/skills/eval-harness-generator/evals/files/1/SKILL.md +31 -0
- skilldrop_cli/data/packs/api-builder/skills/eval-harness-generator/manifest.json +11 -0
- skilldrop_cli/data/packs/api-builder/skills/prompt-caching-advisor/SKILL.md +90 -0
- skilldrop_cli/data/packs/api-builder/skills/prompt-caching-advisor/evals/eval_queries.json +30 -0
- skilldrop_cli/data/packs/api-builder/skills/prompt-caching-advisor/evals/evals.json +19 -0
- skilldrop_cli/data/packs/api-builder/skills/prompt-caching-advisor/manifest.json +11 -0
- skilldrop_cli/data/packs/api-builder/skills/token-budget-estimator/SKILL.md +75 -0
- skilldrop_cli/data/packs/api-builder/skills/token-budget-estimator/evals/eval_queries.json +30 -0
- skilldrop_cli/data/packs/api-builder/skills/token-budget-estimator/evals/evals.json +18 -0
- skilldrop_cli/data/packs/api-builder/skills/token-budget-estimator/manifest.json +11 -0
- skilldrop_cli/data/packs/api-builder/skills/tool-use-schema-writer/SKILL.md +111 -0
- skilldrop_cli/data/packs/api-builder/skills/tool-use-schema-writer/evals/eval_queries.json +30 -0
- skilldrop_cli/data/packs/api-builder/skills/tool-use-schema-writer/evals/evals.json +18 -0
- skilldrop_cli/data/packs/api-builder/skills/tool-use-schema-writer/manifest.json +11 -0
- skilldrop_cli/data/packs/converters/pack.json +66 -0
- skilldrop_cli/data/packs/converters/skills/file-to-markdown/SKILL.md +103 -0
- skilldrop_cli/data/packs/converters/skills/file-to-markdown/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/converters/skills/file-to-markdown/evals/evals.json +27 -0
- skilldrop_cli/data/packs/converters/skills/file-to-markdown/evals/files/1/northwind-q3.pptx +0 -0
- skilldrop_cli/data/packs/converters/skills/file-to-markdown/evals/files/2/acme-contract-summary.pdf +93 -0
- skilldrop_cli/data/packs/converters/skills/file-to-markdown/examples/inputs/accounts.json +1 -0
- skilldrop_cli/data/packs/converters/skills/file-to-markdown/examples/inputs/fabrikam-status.html +14 -0
- skilldrop_cli/data/packs/converters/skills/file-to-markdown/examples/mixed-inputs.md +306 -0
- skilldrop_cli/data/packs/converters/skills/file-to-markdown/manifest.json +49 -0
- skilldrop_cli/data/packs/converters/skills/file-to-markdown/scripts/to_markdown.py +1299 -0
- skilldrop_cli/data/packs/converters/skills/md-to-docx/SKILL.md +124 -0
- skilldrop_cli/data/packs/converters/skills/md-to-docx/evals/eval_queries.json +10 -0
- skilldrop_cli/data/packs/converters/skills/md-to-docx/evals/evals.json +29 -0
- skilldrop_cli/data/packs/converters/skills/md-to-docx/evals/files/1/brand/brand.json +80 -0
- skilldrop_cli/data/packs/converters/skills/md-to-docx/evals/files/1/brand/logo-white.png +0 -0
- skilldrop_cli/data/packs/converters/skills/md-to-docx/evals/files/1/brand/logo.png +0 -0
- skilldrop_cli/data/packs/converters/skills/md-to-docx/evals/files/1/brand/mark.png +0 -0
- skilldrop_cli/data/packs/converters/skills/md-to-docx/evals/files/1/docs/vendor-onboarding.md +42 -0
- skilldrop_cli/data/packs/converters/skills/md-to-docx/examples/q3-support-review-input.md +54 -0
- skilldrop_cli/data/packs/converters/skills/md-to-docx/examples/q3-support-review.md +80 -0
- skilldrop_cli/data/packs/converters/skills/md-to-docx/examples/tickets-by-region.png +0 -0
- skilldrop_cli/data/packs/converters/skills/md-to-docx/manifest.json +52 -0
- skilldrop_cli/data/packs/converters/skills/md-to-docx/reference.md +89 -0
- skilldrop_cli/data/packs/converters/skills/md-to-docx/scripts/md_to_docx.py +1114 -0
- skilldrop_cli/data/packs/converters/skills/md-to-html/SKILL.md +100 -0
- skilldrop_cli/data/packs/converters/skills/md-to-html/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/converters/skills/md-to-html/evals/evals.json +18 -0
- skilldrop_cli/data/packs/converters/skills/md-to-html/evals/files/1/brand/brand.json +80 -0
- skilldrop_cli/data/packs/converters/skills/md-to-html/evals/files/1/brand/logo-white.png +0 -0
- skilldrop_cli/data/packs/converters/skills/md-to-html/evals/files/1/brand/logo.png +0 -0
- skilldrop_cli/data/packs/converters/skills/md-to-html/evals/files/1/brand/mark.png +0 -0
- skilldrop_cli/data/packs/converters/skills/md-to-html/evals/files/1/docs/q3-review.md +35 -0
- skilldrop_cli/data/packs/converters/skills/md-to-html/evals/files/1/img/dashboard.png +0 -0
- skilldrop_cli/data/packs/converters/skills/md-to-html/examples/inputs/chart.svg +8 -0
- skilldrop_cli/data/packs/converters/skills/md-to-html/examples/inputs/ops-review.md +48 -0
- skilldrop_cli/data/packs/converters/skills/md-to-html/examples/ops-review.md +83 -0
- skilldrop_cli/data/packs/converters/skills/md-to-html/manifest.json +43 -0
- skilldrop_cli/data/packs/converters/skills/md-to-html/reference.md +70 -0
- skilldrop_cli/data/packs/converters/skills/md-to-html/scripts/md_to_html.py +652 -0
- skilldrop_cli/data/packs/converters/skills/md-to-xlsx/SKILL.md +120 -0
- skilldrop_cli/data/packs/converters/skills/md-to-xlsx/evals/eval_queries.json +9 -0
- skilldrop_cli/data/packs/converters/skills/md-to-xlsx/evals/evals.json +28 -0
- skilldrop_cli/data/packs/converters/skills/md-to-xlsx/evals/files/1/exports/northwind-invoices.csv +25 -0
- skilldrop_cli/data/packs/converters/skills/md-to-xlsx/evals/files/2/reports/q3-ops-review.md +32 -0
- skilldrop_cli/data/packs/converters/skills/md-to-xlsx/examples/vendor-review-input.md +28 -0
- skilldrop_cli/data/packs/converters/skills/md-to-xlsx/examples/vendor-review.md +94 -0
- skilldrop_cli/data/packs/converters/skills/md-to-xlsx/manifest.json +33 -0
- skilldrop_cli/data/packs/converters/skills/md-to-xlsx/reference.md +94 -0
- skilldrop_cli/data/packs/converters/skills/md-to-xlsx/scripts/md_to_xlsx.py +667 -0
- skilldrop_cli/data/packs/converters/skills/mermaid-render/SKILL.md +109 -0
- skilldrop_cli/data/packs/converters/skills/mermaid-render/evals/eval_queries.json +30 -0
- skilldrop_cli/data/packs/converters/skills/mermaid-render/evals/evals.json +17 -0
- skilldrop_cli/data/packs/converters/skills/mermaid-render/evals/files/1/docs/contoso-orders.md +23 -0
- skilldrop_cli/data/packs/converters/skills/mermaid-render/examples/broken-diagrams.md +147 -0
- skilldrop_cli/data/packs/converters/skills/mermaid-render/examples/inputs/broken-flowchart.mmd +8 -0
- skilldrop_cli/data/packs/converters/skills/mermaid-render/examples/inputs/broken-sequence.mmd +11 -0
- skilldrop_cli/data/packs/converters/skills/mermaid-render/examples/inputs/checkout-flow.mmd +9 -0
- skilldrop_cli/data/packs/converters/skills/mermaid-render/examples/inputs/design-notes.md +35 -0
- skilldrop_cli/data/packs/converters/skills/mermaid-render/examples/inputs/fixed-flowchart.mmd +9 -0
- skilldrop_cli/data/packs/converters/skills/mermaid-render/examples/inputs/typo.mmd +2 -0
- skilldrop_cli/data/packs/converters/skills/mermaid-render/manifest.json +40 -0
- skilldrop_cli/data/packs/converters/skills/mermaid-render/reference.md +70 -0
- skilldrop_cli/data/packs/converters/skills/mermaid-render/scripts/render_mermaid.py +486 -0
- skilldrop_cli/data/packs/core/loops/ship-a-draft/LOOP.md +77 -0
- skilldrop_cli/data/packs/core/loops/ship-a-draft/evals/eval_queries.json +30 -0
- skilldrop_cli/data/packs/core/loops/ship-a-draft/evals/evals.json +25 -0
- skilldrop_cli/data/packs/core/loops/ship-a-draft/loop.json +41 -0
- skilldrop_cli/data/packs/core/pack.json +50 -0
- skilldrop_cli/data/packs/core/skills/brief-intake/SKILL.md +79 -0
- skilldrop_cli/data/packs/core/skills/brief-intake/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/core/skills/brief-intake/evals/evals.json +16 -0
- skilldrop_cli/data/packs/core/skills/brief-intake/manifest.json +11 -0
- skilldrop_cli/data/packs/core/skills/brief-intake/templates/brief-adr.md +41 -0
- skilldrop_cli/data/packs/core/skills/brief-intake/templates/brief-decision-log.md +35 -0
- skilldrop_cli/data/packs/core/skills/brief-intake/templates/brief-deck.md +43 -0
- skilldrop_cli/data/packs/core/skills/brief-intake/templates/brief-design-doc.md +48 -0
- skilldrop_cli/data/packs/core/skills/brief-intake/templates/brief-exec-summary.md +47 -0
- skilldrop_cli/data/packs/core/skills/brief-intake/templates/brief-generic.md +45 -0
- skilldrop_cli/data/packs/core/skills/brief-intake/templates/brief-runbook.md +44 -0
- skilldrop_cli/data/packs/core/skills/brief-intake/templates/brief-tech-comparison.md +38 -0
- skilldrop_cli/data/packs/core/skills/council-review/SKILL.md +106 -0
- skilldrop_cli/data/packs/core/skills/council-review/evals/eval_queries.json +38 -0
- skilldrop_cli/data/packs/core/skills/council-review/evals/evals.json +18 -0
- skilldrop_cli/data/packs/core/skills/council-review/examples/redis-cache-decision.md +75 -0
- skilldrop_cli/data/packs/core/skills/council-review/manifest.json +11 -0
- skilldrop_cli/data/packs/core/skills/council-review/reference.md +76 -0
- skilldrop_cli/data/packs/core/skills/council-review/seats/architect.md +29 -0
- skilldrop_cli/data/packs/core/skills/council-review/seats/bench.md +39 -0
- skilldrop_cli/data/packs/core/skills/council-review/seats/operator.md +27 -0
- skilldrop_cli/data/packs/core/skills/council-review/seats/pragmatist.md +29 -0
- skilldrop_cli/data/packs/core/skills/council-review/seats/security-engineer.md +29 -0
- skilldrop_cli/data/packs/core/skills/council-review/seats/user-advocate.md +27 -0
- skilldrop_cli/data/packs/core/skills/council-review/templates/council-review.md +59 -0
- skilldrop_cli/data/packs/core/skills/doc-critique/SKILL.md +119 -0
- skilldrop_cli/data/packs/core/skills/doc-critique/evals/eval_queries.json +38 -0
- skilldrop_cli/data/packs/core/skills/doc-critique/evals/evals.json +17 -0
- skilldrop_cli/data/packs/core/skills/doc-critique/examples/design-doc-critique.md +34 -0
- skilldrop_cli/data/packs/core/skills/doc-critique/manifest.json +11 -0
- skilldrop_cli/data/packs/core/skills/doc-critique/rubrics/adr.md +36 -0
- skilldrop_cli/data/packs/core/skills/doc-critique/rubrics/decision-log.md +39 -0
- skilldrop_cli/data/packs/core/skills/doc-critique/rubrics/deck.md +45 -0
- skilldrop_cli/data/packs/core/skills/doc-critique/rubrics/design-doc.md +42 -0
- skilldrop_cli/data/packs/core/skills/doc-critique/rubrics/exec-summary.md +41 -0
- skilldrop_cli/data/packs/core/skills/doc-critique/rubrics/generic.md +40 -0
- skilldrop_cli/data/packs/core/skills/doc-critique/rubrics/runbook.md +42 -0
- skilldrop_cli/data/packs/core/skills/doc-critique/rubrics/tech-comparison.md +40 -0
- skilldrop_cli/data/packs/core/skills/doc-critique/templates/critique.md +49 -0
- skilldrop_cli/data/packs/core/skills/output-hygiene/SKILL.md +97 -0
- skilldrop_cli/data/packs/core/skills/output-hygiene/evals/eval_queries.json +11 -0
- skilldrop_cli/data/packs/core/skills/output-hygiene/evals/evals.json +30 -0
- skilldrop_cli/data/packs/core/skills/output-hygiene/manifest.json +34 -0
- skilldrop_cli/data/packs/core/skills/output-hygiene/reference.md +106 -0
- skilldrop_cli/data/packs/core/skills/output-hygiene/scripts/scrub.py +315 -0
- skilldrop_cli/data/packs/data-analytics/pack.json +57 -0
- skilldrop_cli/data/packs/data-analytics/skills/dashboard-spec/SKILL.md +83 -0
- skilldrop_cli/data/packs/data-analytics/skills/dashboard-spec/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/data-analytics/skills/dashboard-spec/evals/evals.json +19 -0
- skilldrop_cli/data/packs/data-analytics/skills/dashboard-spec/examples/support-staffing.md +84 -0
- skilldrop_cli/data/packs/data-analytics/skills/dashboard-spec/manifest.json +40 -0
- skilldrop_cli/data/packs/data-analytics/skills/dashboard-spec/reference.md +45 -0
- skilldrop_cli/data/packs/data-analytics/skills/dashboard-spec/templates/dashboard-spec.md +55 -0
- skilldrop_cli/data/packs/data-analytics/skills/metric-definition/SKILL.md +84 -0
- skilldrop_cli/data/packs/data-analytics/skills/metric-definition/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/data-analytics/skills/metric-definition/evals/evals.json +19 -0
- skilldrop_cli/data/packs/data-analytics/skills/metric-definition/examples/refund-rate.md +104 -0
- skilldrop_cli/data/packs/data-analytics/skills/metric-definition/manifest.json +41 -0
- skilldrop_cli/data/packs/data-analytics/skills/metric-definition/reference.md +67 -0
- skilldrop_cli/data/packs/data-analytics/skills/metric-definition/templates/metric-spec.md +70 -0
- skilldrop_cli/data/packs/data-analytics/skills/sql-review/SKILL.md +83 -0
- skilldrop_cli/data/packs/data-analytics/skills/sql-review/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/data-analytics/skills/sql-review/evals/evals.json +19 -0
- skilldrop_cli/data/packs/data-analytics/skills/sql-review/examples/revenue-by-region.md +174 -0
- skilldrop_cli/data/packs/data-analytics/skills/sql-review/manifest.json +42 -0
- skilldrop_cli/data/packs/data-analytics/skills/sql-review/reference.md +84 -0
- skilldrop_cli/data/packs/data-analytics/skills/sql-review/scripts/sql_lint.py +461 -0
- skilldrop_cli/data/packs/design/pack.json +60 -0
- skilldrop_cli/data/packs/design/skills/brand-kit/SKILL.md +105 -0
- skilldrop_cli/data/packs/design/skills/brand-kit/evals/eval_queries.json +30 -0
- skilldrop_cli/data/packs/design/skills/brand-kit/evals/evals.json +18 -0
- skilldrop_cli/data/packs/design/skills/brand-kit/evals/files/1/brand/northwind-logo-white.png +0 -0
- skilldrop_cli/data/packs/design/skills/brand-kit/evals/files/1/brand/northwind-logo.png +0 -0
- skilldrop_cli/data/packs/design/skills/brand-kit/examples/northwind-brand.md +48 -0
- skilldrop_cli/data/packs/design/skills/brand-kit/manifest.json +45 -0
- skilldrop_cli/data/packs/design/skills/brand-kit/scripts/check_brand.py +114 -0
- skilldrop_cli/data/packs/design/skills/brand-kit/templates/brand.json +54 -0
- skilldrop_cli/data/packs/design/skills/deck-builder/SKILL.md +201 -0
- skilldrop_cli/data/packs/design/skills/deck-builder/evals/eval_queries.json +14 -0
- skilldrop_cli/data/packs/design/skills/deck-builder/evals/evals.json +40 -0
- skilldrop_cli/data/packs/design/skills/deck-builder/examples/exec-board-update.md +108 -0
- skilldrop_cli/data/packs/design/skills/deck-builder/examples/templated-brand-deck.md +148 -0
- skilldrop_cli/data/packs/design/skills/deck-builder/manifest.json +18 -0
- skilldrop_cli/data/packs/design/skills/deck-builder/reference.md +180 -0
- skilldrop_cli/data/packs/design/skills/deck-builder/requirements.txt +3 -0
- skilldrop_cli/data/packs/design/skills/deck-builder/scripts/build_deck.py +1134 -0
- skilldrop_cli/data/packs/design/skills/deck-builder/templates/deck-spec.json +168 -0
- skilldrop_cli/data/packs/design/skills/deck-builder/templates/palettes.json +59 -0
- skilldrop_cli/data/packs/design/skills/marketing-flyer/SKILL.md +113 -0
- skilldrop_cli/data/packs/design/skills/marketing-flyer/evals/eval_queries.json +30 -0
- skilldrop_cli/data/packs/design/skills/marketing-flyer/evals/evals.json +18 -0
- skilldrop_cli/data/packs/design/skills/marketing-flyer/evals/files/1/brand/brand.json +80 -0
- skilldrop_cli/data/packs/design/skills/marketing-flyer/evals/files/1/brand/logo-white.png +0 -0
- skilldrop_cli/data/packs/design/skills/marketing-flyer/evals/files/1/brand/logo.png +0 -0
- skilldrop_cli/data/packs/design/skills/marketing-flyer/evals/files/1/brand/mark.png +0 -0
- skilldrop_cli/data/packs/design/skills/marketing-flyer/examples/community-health-fair.md +68 -0
- skilldrop_cli/data/packs/design/skills/marketing-flyer/manifest.json +40 -0
- skilldrop_cli/data/packs/design/skills/marketing-flyer/reference.md +54 -0
- skilldrop_cli/data/packs/design/skills/marketing-flyer/scripts/build_flyer.py +323 -0
- skilldrop_cli/data/packs/design/skills/marketing-flyer/templates/flyer-spec.json +26 -0
- skilldrop_cli/data/packs/design/skills/slide-outliner/SKILL.md +58 -0
- skilldrop_cli/data/packs/design/skills/slide-outliner/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/design/skills/slide-outliner/evals/evals.json +16 -0
- skilldrop_cli/data/packs/design/skills/slide-outliner/manifest.json +11 -0
- skilldrop_cli/data/packs/design/skills/slide-outliner/templates/deck-outline.md +131 -0
- skilldrop_cli/data/packs/dev-team/loops/build/LOOP.md +80 -0
- skilldrop_cli/data/packs/dev-team/loops/build/evals/eval_queries.json +30 -0
- skilldrop_cli/data/packs/dev-team/loops/build/evals/evals.json +27 -0
- skilldrop_cli/data/packs/dev-team/loops/build/loop.json +48 -0
- skilldrop_cli/data/packs/dev-team/loops/release/LOOP.md +91 -0
- skilldrop_cli/data/packs/dev-team/loops/release/loop.json +47 -0
- skilldrop_cli/data/packs/dev-team/pack.json +56 -0
- skilldrop_cli/data/packs/dev-team/skills/accessibility-audit/SKILL.md +74 -0
- skilldrop_cli/data/packs/dev-team/skills/accessibility-audit/evals/eval_queries.json +30 -0
- skilldrop_cli/data/packs/dev-team/skills/accessibility-audit/evals/evals.json +19 -0
- skilldrop_cli/data/packs/dev-team/skills/accessibility-audit/examples/login-form.md +76 -0
- skilldrop_cli/data/packs/dev-team/skills/accessibility-audit/manifest.json +11 -0
- skilldrop_cli/data/packs/dev-team/skills/accessibility-audit/reference.md +69 -0
- skilldrop_cli/data/packs/dev-team/skills/agents-md-generator/SKILL.md +82 -0
- skilldrop_cli/data/packs/dev-team/skills/agents-md-generator/evals/eval_queries.json +15 -0
- skilldrop_cli/data/packs/dev-team/skills/agents-md-generator/evals/evals.json +50 -0
- skilldrop_cli/data/packs/dev-team/skills/agents-md-generator/evals/files/1/Makefile +5 -0
- skilldrop_cli/data/packs/dev-team/skills/agents-md-generator/evals/files/1/alembic/versions/0001_create_bookings.py +10 -0
- skilldrop_cli/data/packs/dev-team/skills/agents-md-generator/evals/files/1/booking/__init__.py +0 -0
- skilldrop_cli/data/packs/dev-team/skills/agents-md-generator/evals/files/1/booking/app.py +8 -0
- skilldrop_cli/data/packs/dev-team/skills/agents-md-generator/evals/files/1/pyproject.toml +11 -0
- skilldrop_cli/data/packs/dev-team/skills/agents-md-generator/evals/files/1/tests/test_health.py +5 -0
- skilldrop_cli/data/packs/dev-team/skills/agents-md-generator/evals/files/2/AGENTS.md +3 -0
- skilldrop_cli/data/packs/dev-team/skills/agents-md-generator/evals/files/2/package.json +12 -0
- skilldrop_cli/data/packs/dev-team/skills/agents-md-generator/evals/files/2/src/index.ts +1 -0
- skilldrop_cli/data/packs/dev-team/skills/agents-md-generator/manifest.json +11 -0
- skilldrop_cli/data/packs/dev-team/skills/agents-md-generator/reference.md +89 -0
- skilldrop_cli/data/packs/dev-team/skills/agents-md-generator/templates/agents-md.md +48 -0
- skilldrop_cli/data/packs/dev-team/skills/bug-triage/SKILL.md +67 -0
- skilldrop_cli/data/packs/dev-team/skills/bug-triage/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/dev-team/skills/bug-triage/evals/evals.json +17 -0
- skilldrop_cli/data/packs/dev-team/skills/bug-triage/manifest.json +14 -0
- skilldrop_cli/data/packs/dev-team/skills/bug-triage/templates/bug-ticket.md +86 -0
- skilldrop_cli/data/packs/dev-team/skills/contribution-wizard/SKILL.md +134 -0
- skilldrop_cli/data/packs/dev-team/skills/contribution-wizard/evals/eval_queries.json +30 -0
- skilldrop_cli/data/packs/dev-team/skills/contribution-wizard/evals/evals.json +19 -0
- skilldrop_cli/data/packs/dev-team/skills/contribution-wizard/manifest.json +11 -0
- skilldrop_cli/data/packs/dev-team/skills/devils-advocate/SKILL.md +143 -0
- skilldrop_cli/data/packs/dev-team/skills/devils-advocate/evals/eval_queries.json +38 -0
- skilldrop_cli/data/packs/dev-team/skills/devils-advocate/evals/evals.json +19 -0
- skilldrop_cli/data/packs/dev-team/skills/devils-advocate/examples/rate-limiter-review.md +46 -0
- skilldrop_cli/data/packs/dev-team/skills/devils-advocate/lenses/adversarial-review.md +88 -0
- skilldrop_cli/data/packs/dev-team/skills/devils-advocate/lenses/edge-cases.md +95 -0
- skilldrop_cli/data/packs/dev-team/skills/devils-advocate/lenses/future-proofing.md +75 -0
- skilldrop_cli/data/packs/dev-team/skills/devils-advocate/lenses/test-coverage.md +90 -0
- skilldrop_cli/data/packs/dev-team/skills/devils-advocate/manifest.json +14 -0
- skilldrop_cli/data/packs/dev-team/skills/devils-advocate/templates/challenge.md +118 -0
- skilldrop_cli/data/packs/dev-team/skills/feature-implement-loop/SKILL.md +88 -0
- skilldrop_cli/data/packs/dev-team/skills/feature-implement-loop/evals/eval_queries.json +30 -0
- skilldrop_cli/data/packs/dev-team/skills/feature-implement-loop/evals/evals.json +19 -0
- skilldrop_cli/data/packs/dev-team/skills/feature-implement-loop/manifest.json +14 -0
- skilldrop_cli/data/packs/dev-team/skills/launch-readiness/SKILL.md +95 -0
- skilldrop_cli/data/packs/dev-team/skills/launch-readiness/evals/eval_queries.json +10 -0
- skilldrop_cli/data/packs/dev-team/skills/launch-readiness/evals/evals.json +19 -0
- skilldrop_cli/data/packs/dev-team/skills/launch-readiness/examples/schema-change-revise.md +54 -0
- skilldrop_cli/data/packs/dev-team/skills/launch-readiness/manifest.json +24 -0
- skilldrop_cli/data/packs/dev-team/skills/launch-readiness/templates/readiness-report.md +41 -0
- skilldrop_cli/data/packs/dev-team/skills/migration-plan/SKILL.md +68 -0
- skilldrop_cli/data/packs/dev-team/skills/migration-plan/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/dev-team/skills/migration-plan/evals/evals.json +16 -0
- skilldrop_cli/data/packs/dev-team/skills/migration-plan/manifest.json +11 -0
- skilldrop_cli/data/packs/dev-team/skills/migration-plan/templates/migration-plan.md +68 -0
- skilldrop_cli/data/packs/dev-team/skills/pre-merge-review/SKILL.md +85 -0
- skilldrop_cli/data/packs/dev-team/skills/pre-merge-review/evals/eval_queries.json +11 -0
- skilldrop_cli/data/packs/dev-team/skills/pre-merge-review/evals/evals.json +26 -0
- skilldrop_cli/data/packs/dev-team/skills/pre-merge-review/examples/pre-merge-verdict.md +43 -0
- skilldrop_cli/data/packs/dev-team/skills/pre-merge-review/manifest.json +15 -0
- skilldrop_cli/data/packs/dev-team/skills/pre-merge-review/scripts/gate.py +189 -0
- skilldrop_cli/data/packs/dev-team/skills/release-notes/SKILL.md +61 -0
- skilldrop_cli/data/packs/dev-team/skills/release-notes/evals/eval_queries.json +30 -0
- skilldrop_cli/data/packs/dev-team/skills/release-notes/evals/evals.json +19 -0
- skilldrop_cli/data/packs/dev-team/skills/release-notes/manifest.json +11 -0
- skilldrop_cli/data/packs/dev-team/skills/release-notes/templates/release-notes.md +83 -0
- skilldrop_cli/data/packs/dev-team/skills/sonar-onboard/SKILL.md +170 -0
- skilldrop_cli/data/packs/dev-team/skills/sonar-onboard/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/dev-team/skills/sonar-onboard/evals/evals.json +16 -0
- skilldrop_cli/data/packs/dev-team/skills/sonar-onboard/manifest.json +11 -0
- skilldrop_cli/data/packs/dev-team/skills/sonar-onboard/reference.md +151 -0
- skilldrop_cli/data/packs/dev-team/skills/sonar-onboard/templates/github-actions-sonar-server.yml.tmpl +50 -0
- skilldrop_cli/data/packs/dev-team/skills/sonar-onboard/templates/github-actions-sonarcloud.yml.tmpl +53 -0
- skilldrop_cli/data/packs/dev-team/skills/sonar-onboard/templates/readme-snippet.md +38 -0
- skilldrop_cli/data/packs/dev-team/skills/sonar-onboard/templates/sonar-project.properties.tmpl +31 -0
- skilldrop_cli/data/packs/dev-team/skills/sonar-review/SKILL.md +220 -0
- skilldrop_cli/data/packs/dev-team/skills/sonar-review/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/dev-team/skills/sonar-review/evals/evals.json +16 -0
- skilldrop_cli/data/packs/dev-team/skills/sonar-review/lenses/bugs.md +48 -0
- skilldrop_cli/data/packs/dev-team/skills/sonar-review/lenses/code-smells.md +64 -0
- skilldrop_cli/data/packs/dev-team/skills/sonar-review/lenses/coverage-and-duplication.md +74 -0
- skilldrop_cli/data/packs/dev-team/skills/sonar-review/lenses/security-hotspots.md +56 -0
- skilldrop_cli/data/packs/dev-team/skills/sonar-review/lenses/vulnerabilities.md +52 -0
- skilldrop_cli/data/packs/dev-team/skills/sonar-review/manifest.json +37 -0
- skilldrop_cli/data/packs/dev-team/skills/sonar-review/reference.md +167 -0
- skilldrop_cli/data/packs/dev-team/skills/sonar-review/templates/report.md +84 -0
- skilldrop_cli/data/packs/dev-team/skills/test-plan-generator/SKILL.md +59 -0
- skilldrop_cli/data/packs/dev-team/skills/test-plan-generator/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/dev-team/skills/test-plan-generator/evals/evals.json +16 -0
- skilldrop_cli/data/packs/dev-team/skills/test-plan-generator/manifest.json +11 -0
- skilldrop_cli/data/packs/dev-team/skills/test-plan-generator/templates/test-plan.md +83 -0
- skilldrop_cli/data/packs/dev-team/skills/user-story-splitter/SKILL.md +88 -0
- skilldrop_cli/data/packs/dev-team/skills/user-story-splitter/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/dev-team/skills/user-story-splitter/evals/evals.json +16 -0
- skilldrop_cli/data/packs/dev-team/skills/user-story-splitter/examples/notifications-epic.md +123 -0
- skilldrop_cli/data/packs/dev-team/skills/user-story-splitter/manifest.json +14 -0
- skilldrop_cli/data/packs/dev-team/skills/user-story-splitter/templates/story.md +40 -0
- skilldrop_cli/data/packs/experience-design/pack.json +68 -0
- skilldrop_cli/data/packs/experience-design/skills/content-design/SKILL.md +77 -0
- skilldrop_cli/data/packs/experience-design/skills/content-design/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/experience-design/skills/content-design/evals/evals.json +18 -0
- skilldrop_cli/data/packs/experience-design/skills/content-design/examples/parking-permit-page.md +102 -0
- skilldrop_cli/data/packs/experience-design/skills/content-design/manifest.json +41 -0
- skilldrop_cli/data/packs/experience-design/skills/content-design/scripts/readability.py +115 -0
- skilldrop_cli/data/packs/experience-design/skills/content-design/templates/content-spec.md +45 -0
- skilldrop_cli/data/packs/experience-design/skills/design-system-spec/SKILL.md +79 -0
- skilldrop_cli/data/packs/experience-design/skills/design-system-spec/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/experience-design/skills/design-system-spec/evals/evals.json +19 -0
- skilldrop_cli/data/packs/experience-design/skills/design-system-spec/examples/text-field-spec.md +121 -0
- skilldrop_cli/data/packs/experience-design/skills/design-system-spec/manifest.json +46 -0
- skilldrop_cli/data/packs/experience-design/skills/design-system-spec/reference.md +66 -0
- skilldrop_cli/data/packs/experience-design/skills/design-system-spec/templates/component-spec.md +74 -0
- skilldrop_cli/data/packs/experience-design/skills/information-architecture/SKILL.md +76 -0
- skilldrop_cli/data/packs/experience-design/skills/information-architecture/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/experience-design/skills/information-architecture/evals/evals.json +19 -0
- skilldrop_cli/data/packs/experience-design/skills/information-architecture/examples/payroll-app-nav.md +127 -0
- skilldrop_cli/data/packs/experience-design/skills/information-architecture/manifest.json +46 -0
- skilldrop_cli/data/packs/experience-design/skills/information-architecture/reference.md +54 -0
- skilldrop_cli/data/packs/experience-design/skills/information-architecture/templates/ia-spec.md +77 -0
- skilldrop_cli/data/packs/experience-design/skills/service-blueprint/SKILL.md +76 -0
- skilldrop_cli/data/packs/experience-design/skills/service-blueprint/evals/eval_queries.json +30 -0
- skilldrop_cli/data/packs/experience-design/skills/service-blueprint/evals/evals.json +19 -0
- skilldrop_cli/data/packs/experience-design/skills/service-blueprint/examples/insurance-claim-blueprint.md +107 -0
- skilldrop_cli/data/packs/experience-design/skills/service-blueprint/manifest.json +45 -0
- skilldrop_cli/data/packs/experience-design/skills/service-blueprint/templates/blueprint.md +72 -0
- skilldrop_cli/data/packs/experience-design/skills/ux-writing/SKILL.md +77 -0
- skilldrop_cli/data/packs/experience-design/skills/ux-writing/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/experience-design/skills/ux-writing/evals/evals.json +19 -0
- skilldrop_cli/data/packs/experience-design/skills/ux-writing/examples/team-invite-flow.md +66 -0
- skilldrop_cli/data/packs/experience-design/skills/ux-writing/manifest.json +41 -0
- skilldrop_cli/data/packs/experience-design/skills/ux-writing/templates/string-table.md +22 -0
- skilldrop_cli/data/packs/grc/pack.json +57 -0
- skilldrop_cli/data/packs/grc/skills/dpia/SKILL.md +123 -0
- skilldrop_cli/data/packs/grc/skills/dpia/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/grc/skills/dpia/evals/evals.json +19 -0
- skilldrop_cli/data/packs/grc/skills/dpia/examples/acme-warehouse-performance.md +159 -0
- skilldrop_cli/data/packs/grc/skills/dpia/manifest.json +47 -0
- skilldrop_cli/data/packs/grc/skills/dpia/reference.md +118 -0
- skilldrop_cli/data/packs/grc/skills/dpia/templates/dpia.md +103 -0
- skilldrop_cli/data/packs/grc/skills/risk-register/SKILL.md +139 -0
- skilldrop_cli/data/packs/grc/skills/risk-register/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/grc/skills/risk-register/evals/evals.json +19 -0
- skilldrop_cli/data/packs/grc/skills/risk-register/examples/northwind-register.csv +9 -0
- skilldrop_cli/data/packs/grc/skills/risk-register/examples/northwind-register.md +127 -0
- skilldrop_cli/data/packs/grc/skills/risk-register/manifest.json +43 -0
- skilldrop_cli/data/packs/grc/skills/risk-register/reference.md +99 -0
- skilldrop_cli/data/packs/grc/skills/risk-register/scripts/check_register.py +338 -0
- skilldrop_cli/data/packs/grc/skills/risk-register/templates/risk-register.csv +2 -0
- skilldrop_cli/data/packs/grc/skills/soc2-evidence-map/SKILL.md +117 -0
- skilldrop_cli/data/packs/grc/skills/soc2-evidence-map/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/grc/skills/soc2-evidence-map/evals/evals.json +19 -0
- skilldrop_cli/data/packs/grc/skills/soc2-evidence-map/examples/northwind-evidence-map.csv +17 -0
- skilldrop_cli/data/packs/grc/skills/soc2-evidence-map/examples/northwind-type2-security.md +127 -0
- skilldrop_cli/data/packs/grc/skills/soc2-evidence-map/manifest.json +41 -0
- skilldrop_cli/data/packs/grc/skills/soc2-evidence-map/reference.md +156 -0
- skilldrop_cli/data/packs/grc/skills/soc2-evidence-map/templates/evidence-map.csv +2 -0
- skilldrop_cli/data/packs/infra-as-code/pack.json +51 -0
- skilldrop_cli/data/packs/infra-as-code/skills/terraform-module/SKILL.md +85 -0
- skilldrop_cli/data/packs/infra-as-code/skills/terraform-module/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/infra-as-code/skills/terraform-module/evals/evals.json +31 -0
- skilldrop_cli/data/packs/infra-as-code/skills/terraform-module/examples/s3-log-bucket/README.md +71 -0
- skilldrop_cli/data/packs/infra-as-code/skills/terraform-module/examples/s3-log-bucket/examples/basic/main.tf +30 -0
- skilldrop_cli/data/packs/infra-as-code/skills/terraform-module/examples/s3-log-bucket/main.tf +153 -0
- skilldrop_cli/data/packs/infra-as-code/skills/terraform-module/examples/s3-log-bucket/outputs.tf +14 -0
- skilldrop_cli/data/packs/infra-as-code/skills/terraform-module/examples/s3-log-bucket/variables.tf +71 -0
- skilldrop_cli/data/packs/infra-as-code/skills/terraform-module/examples/s3-log-bucket/versions.tf +10 -0
- skilldrop_cli/data/packs/infra-as-code/skills/terraform-module/examples/s3-log-bucket.md +50 -0
- skilldrop_cli/data/packs/infra-as-code/skills/terraform-module/manifest.json +41 -0
- skilldrop_cli/data/packs/infra-as-code/skills/terraform-module/reference.md +105 -0
- skilldrop_cli/data/packs/infra-as-code/skills/terraform-module/templates/module-readme.md +55 -0
- skilldrop_cli/data/packs/infra-as-code/skills/terraform-plan-review/SKILL.md +87 -0
- skilldrop_cli/data/packs/infra-as-code/skills/terraform-plan-review/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/infra-as-code/skills/terraform-plan-review/evals/evals.json +30 -0
- skilldrop_cli/data/packs/infra-as-code/skills/terraform-plan-review/evals/files/2/plan.json +133 -0
- skilldrop_cli/data/packs/infra-as-code/skills/terraform-plan-review/examples/northwind-orders-plan.json +174 -0
- skilldrop_cli/data/packs/infra-as-code/skills/terraform-plan-review/examples/northwind-orders.md +87 -0
- skilldrop_cli/data/packs/infra-as-code/skills/terraform-plan-review/manifest.json +48 -0
- skilldrop_cli/data/packs/infra-as-code/skills/terraform-plan-review/reference.md +77 -0
- skilldrop_cli/data/packs/infra-as-code/skills/terraform-plan-review/scripts/plan_summary.py +361 -0
- skilldrop_cli/data/packs/product-manager/loops/discover/LOOP.md +81 -0
- skilldrop_cli/data/packs/product-manager/loops/discover/evals/eval_queries.json +30 -0
- skilldrop_cli/data/packs/product-manager/loops/discover/evals/evals.json +26 -0
- skilldrop_cli/data/packs/product-manager/loops/discover/loop.json +41 -0
- skilldrop_cli/data/packs/product-manager/pack.json +61 -0
- skilldrop_cli/data/packs/product-manager/skills/business-case/SKILL.md +64 -0
- skilldrop_cli/data/packs/product-manager/skills/business-case/evals/eval_queries.json +30 -0
- skilldrop_cli/data/packs/product-manager/skills/business-case/evals/evals.json +19 -0
- skilldrop_cli/data/packs/product-manager/skills/business-case/examples/build-vs-buy-flags.md +42 -0
- skilldrop_cli/data/packs/product-manager/skills/business-case/manifest.json +11 -0
- skilldrop_cli/data/packs/product-manager/skills/business-case/templates/business-case.md +60 -0
- skilldrop_cli/data/packs/product-manager/skills/okr-cascade/SKILL.md +59 -0
- skilldrop_cli/data/packs/product-manager/skills/okr-cascade/evals/eval_queries.json +12 -0
- skilldrop_cli/data/packs/product-manager/skills/okr-cascade/evals/evals.json +28 -0
- skilldrop_cli/data/packs/product-manager/skills/okr-cascade/manifest.json +11 -0
- skilldrop_cli/data/packs/product-manager/skills/okr-cascade/templates/okr-cascade.md +46 -0
- skilldrop_cli/data/packs/product-manager/skills/prd-draft/SKILL.md +62 -0
- skilldrop_cli/data/packs/product-manager/skills/prd-draft/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/product-manager/skills/prd-draft/evals/evals.json +17 -0
- skilldrop_cli/data/packs/product-manager/skills/prd-draft/manifest.json +16 -0
- skilldrop_cli/data/packs/product-manager/skills/prd-draft/templates/prd.md +66 -0
- skilldrop_cli/data/packs/product-manager/skills/prfaq/SKILL.md +76 -0
- skilldrop_cli/data/packs/product-manager/skills/prfaq/evals/eval_queries.json +13 -0
- skilldrop_cli/data/packs/product-manager/skills/prfaq/evals/evals.json +32 -0
- skilldrop_cli/data/packs/product-manager/skills/prfaq/manifest.json +11 -0
- skilldrop_cli/data/packs/product-manager/skills/prfaq/templates/prfaq.md +60 -0
- skilldrop_cli/data/packs/product-manager/skills/requirements-interview/SKILL.md +61 -0
- skilldrop_cli/data/packs/product-manager/skills/requirements-interview/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/product-manager/skills/requirements-interview/evals/evals.json +16 -0
- skilldrop_cli/data/packs/product-manager/skills/requirements-interview/manifest.json +14 -0
- skilldrop_cli/data/packs/product-manager/skills/requirements-interview/templates/interview-kit.md +63 -0
- skilldrop_cli/data/packs/product-manager/skills/strategy-analysis/SKILL.md +63 -0
- skilldrop_cli/data/packs/product-manager/skills/strategy-analysis/evals/eval_queries.json +13 -0
- skilldrop_cli/data/packs/product-manager/skills/strategy-analysis/evals/evals.json +36 -0
- skilldrop_cli/data/packs/product-manager/skills/strategy-analysis/examples/market-entry-tows.md +42 -0
- skilldrop_cli/data/packs/product-manager/skills/strategy-analysis/manifest.json +15 -0
- skilldrop_cli/data/packs/product-manager/skills/success-metrics/SKILL.md +65 -0
- skilldrop_cli/data/packs/product-manager/skills/success-metrics/evals/eval_queries.json +11 -0
- skilldrop_cli/data/packs/product-manager/skills/success-metrics/evals/evals.json +27 -0
- skilldrop_cli/data/packs/product-manager/skills/success-metrics/manifest.json +11 -0
- skilldrop_cli/data/packs/product-manager/skills/success-metrics/templates/metrics-plan.md +55 -0
- skilldrop_cli/data/packs/product-manager/skills/user-journey-map/SKILL.md +65 -0
- skilldrop_cli/data/packs/product-manager/skills/user-journey-map/evals/eval_queries.json +12 -0
- skilldrop_cli/data/packs/product-manager/skills/user-journey-map/evals/evals.json +30 -0
- skilldrop_cli/data/packs/product-manager/skills/user-journey-map/examples/b2b-saas-onboarding.md +69 -0
- skilldrop_cli/data/packs/product-manager/skills/user-journey-map/manifest.json +15 -0
- skilldrop_cli/data/packs/product-manager/skills/user-journey-map/templates/journey-map.md +47 -0
- skilldrop_cli/data/packs/research/pack.json +52 -0
- skilldrop_cli/data/packs/research/skills/hypothesis-comparison/SKILL.md +131 -0
- skilldrop_cli/data/packs/research/skills/hypothesis-comparison/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/research/skills/hypothesis-comparison/evals/evals.json +19 -0
- skilldrop_cli/data/packs/research/skills/hypothesis-comparison/examples/conversion-drop.md +132 -0
- skilldrop_cli/data/packs/research/skills/hypothesis-comparison/manifest.json +43 -0
- skilldrop_cli/data/packs/research/skills/hypothesis-comparison/reference.md +107 -0
- skilldrop_cli/data/packs/research/skills/hypothesis-comparison/scripts/ach_matrix.py +204 -0
- skilldrop_cli/data/packs/research/skills/hypothesis-comparison/templates/hypothesis-comparison.md +61 -0
- skilldrop_cli/data/packs/research/skills/hypothesis-comparison/templates/matrix.csv +4 -0
- skilldrop_cli/data/packs/research/skills/research-plan/SKILL.md +122 -0
- skilldrop_cli/data/packs/research/skills/research-plan/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/research/skills/research-plan/evals/evals.json +28 -0
- skilldrop_cli/data/packs/research/skills/research-plan/examples/four-day-week-plan.md +97 -0
- skilldrop_cli/data/packs/research/skills/research-plan/manifest.json +47 -0
- skilldrop_cli/data/packs/research/skills/research-plan/reference.md +88 -0
- skilldrop_cli/data/packs/research/skills/research-plan/templates/research-plan.md +54 -0
- skilldrop_cli/data/packs/research/skills/source-synthesis/SKILL.md +123 -0
- skilldrop_cli/data/packs/research/skills/source-synthesis/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/research/skills/source-synthesis/evals/evals.json +19 -0
- skilldrop_cli/data/packs/research/skills/source-synthesis/examples/four-day-week.md +146 -0
- skilldrop_cli/data/packs/research/skills/source-synthesis/manifest.json +42 -0
- skilldrop_cli/data/packs/research/skills/source-synthesis/reference.md +92 -0
- skilldrop_cli/data/packs/research/skills/source-synthesis/scripts/citations.py +314 -0
- skilldrop_cli/data/packs/research/skills/source-synthesis/templates/synthesis.md +46 -0
- skilldrop_cli/data/packs/skill-engineering/pack.json +46 -0
- skilldrop_cli/data/packs/skill-engineering/skills/skill-author/SKILL.md +139 -0
- skilldrop_cli/data/packs/skill-engineering/skills/skill-author/evals/eval_queries.json +10 -0
- skilldrop_cli/data/packs/skill-engineering/skills/skill-author/evals/evals.json +19 -0
- skilldrop_cli/data/packs/skill-engineering/skills/skill-author/examples/release-notes-skill.md +185 -0
- skilldrop_cli/data/packs/skill-engineering/skills/skill-author/manifest.json +42 -0
- skilldrop_cli/data/packs/skill-engineering/skills/skill-author/reference.md +144 -0
- skilldrop_cli/data/packs/skill-engineering/skills/skill-author/templates/eval_queries.json +9 -0
- skilldrop_cli/data/packs/skill-engineering/skills/skill-author/templates/evals.json +16 -0
- skilldrop_cli/data/packs/skill-engineering/skills/skill-author/templates/skill-template.md +52 -0
- skilldrop_cli/data/packs/skill-engineering/skills/skill-review/SKILL.md +131 -0
- skilldrop_cli/data/packs/skill-engineering/skills/skill-review/evals/eval_queries.json +11 -0
- skilldrop_cli/data/packs/skill-engineering/skills/skill-review/evals/evals.json +19 -0
- skilldrop_cli/data/packs/skill-engineering/skills/skill-review/evals/files/1/skills/changelog-writer/SKILL.md +10 -0
- skilldrop_cli/data/packs/skill-engineering/skills/skill-review/evals/files/1/skills/pr-summary/SKILL.md +12 -0
- skilldrop_cli/data/packs/skill-engineering/skills/skill-review/evals/files/1/skills/pr-summary/references/tone.md +3 -0
- skilldrop_cli/data/packs/skill-engineering/skills/skill-review/evals/files/1/skills/pr-summary/scripts/collect.py +6 -0
- skilldrop_cli/data/packs/skill-engineering/skills/skill-review/examples/meeting-notes-review.md +147 -0
- skilldrop_cli/data/packs/skill-engineering/skills/skill-review/manifest.json +50 -0
- skilldrop_cli/data/packs/skill-engineering/skills/skill-review/reference.md +135 -0
- skilldrop_cli/data/packs/skill-engineering/skills/skill-review/scripts/lint_skill.py +481 -0
- skilldrop_cli/data/packs/skill-engineering/skills/skill-review/templates/review.md +43 -0
- skilldrop_cli/data/packs/solution-architect/loops/design/LOOP.md +83 -0
- skilldrop_cli/data/packs/solution-architect/loops/design/evals/eval_queries.json +30 -0
- skilldrop_cli/data/packs/solution-architect/loops/design/evals/evals.json +26 -0
- skilldrop_cli/data/packs/solution-architect/loops/design/loop.json +47 -0
- skilldrop_cli/data/packs/solution-architect/pack.json +65 -0
- skilldrop_cli/data/packs/solution-architect/skills/adr-generator/SKILL.md +50 -0
- skilldrop_cli/data/packs/solution-architect/skills/adr-generator/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/solution-architect/skills/adr-generator/evals/evals.json +17 -0
- skilldrop_cli/data/packs/solution-architect/skills/adr-generator/manifest.json +11 -0
- skilldrop_cli/data/packs/solution-architect/skills/adr-generator/templates/madr.md +56 -0
- skilldrop_cli/data/packs/solution-architect/skills/adr-generator/templates/nygard.md +19 -0
- skilldrop_cli/data/packs/solution-architect/skills/api-contract-draft/SKILL.md +69 -0
- skilldrop_cli/data/packs/solution-architect/skills/api-contract-draft/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/solution-architect/skills/api-contract-draft/evals/evals.json +18 -0
- skilldrop_cli/data/packs/solution-architect/skills/api-contract-draft/manifest.json +11 -0
- skilldrop_cli/data/packs/solution-architect/skills/api-contract-draft/reference.md +73 -0
- skilldrop_cli/data/packs/solution-architect/skills/api-contract-draft/templates/openapi-skeleton.yaml +148 -0
- skilldrop_cli/data/packs/solution-architect/skills/architecture-diagrams/SKILL.md +66 -0
- skilldrop_cli/data/packs/solution-architect/skills/architecture-diagrams/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/solution-architect/skills/architecture-diagrams/evals/evals.json +16 -0
- skilldrop_cli/data/packs/solution-architect/skills/architecture-diagrams/examples/aws-three-tier.md +44 -0
- skilldrop_cli/data/packs/solution-architect/skills/architecture-diagrams/examples/c4-container-saas.md +51 -0
- skilldrop_cli/data/packs/solution-architect/skills/architecture-diagrams/examples/microservices-sequence.md +49 -0
- skilldrop_cli/data/packs/solution-architect/skills/architecture-diagrams/manifest.json +31 -0
- skilldrop_cli/data/packs/solution-architect/skills/architecture-diagrams/templates/c4-container.puml +31 -0
- skilldrop_cli/data/packs/solution-architect/skills/architecture-diagrams/templates/mermaid-aws.md +52 -0
- skilldrop_cli/data/packs/solution-architect/skills/architecture-diagrams/templates/mermaid-flowchart.md +37 -0
- skilldrop_cli/data/packs/solution-architect/skills/architecture-diagrams/templates/mermaid-sequence.md +39 -0
- skilldrop_cli/data/packs/solution-architect/skills/data-contract/SKILL.md +67 -0
- skilldrop_cli/data/packs/solution-architect/skills/data-contract/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/solution-architect/skills/data-contract/evals/evals.json +16 -0
- skilldrop_cli/data/packs/solution-architect/skills/data-contract/manifest.json +11 -0
- skilldrop_cli/data/packs/solution-architect/skills/data-contract/reference.md +46 -0
- skilldrop_cli/data/packs/solution-architect/skills/data-contract/templates/data-contract.md +69 -0
- skilldrop_cli/data/packs/solution-architect/skills/db-schema-design/SKILL.md +68 -0
- skilldrop_cli/data/packs/solution-architect/skills/db-schema-design/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/solution-architect/skills/db-schema-design/evals/evals.json +16 -0
- skilldrop_cli/data/packs/solution-architect/skills/db-schema-design/manifest.json +11 -0
- skilldrop_cli/data/packs/solution-architect/skills/db-schema-design/reference.md +56 -0
- skilldrop_cli/data/packs/solution-architect/skills/db-schema-design/templates/schema-design.md +75 -0
- skilldrop_cli/data/packs/solution-architect/skills/design-doc/SKILL.md +49 -0
- skilldrop_cli/data/packs/solution-architect/skills/design-doc/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/solution-architect/skills/design-doc/evals/evals.json +17 -0
- skilldrop_cli/data/packs/solution-architect/skills/design-doc/manifest.json +14 -0
- skilldrop_cli/data/packs/solution-architect/skills/design-doc/templates/design-doc.md +98 -0
- skilldrop_cli/data/packs/solution-architect/skills/figma-diagrams/SKILL.md +87 -0
- skilldrop_cli/data/packs/solution-architect/skills/figma-diagrams/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/solution-architect/skills/figma-diagrams/evals/evals.json +15 -0
- skilldrop_cli/data/packs/solution-architect/skills/figma-diagrams/manifest.json +36 -0
- skilldrop_cli/data/packs/solution-architect/skills/figma-diagrams/reference.md +91 -0
- skilldrop_cli/data/packs/solution-architect/skills/figma-diagrams/requirements.txt +3 -0
- skilldrop_cli/data/packs/solution-architect/skills/figma-diagrams/scripts/_figma_client.py +71 -0
- skilldrop_cli/data/packs/solution-architect/skills/figma-diagrams/scripts/frame_to_mermaid.py +102 -0
- skilldrop_cli/data/packs/solution-architect/skills/figma-diagrams/scripts/inspect_file.py +46 -0
- skilldrop_cli/data/packs/solution-architect/skills/figma-diagrams/scripts/list_comments.py +35 -0
- skilldrop_cli/data/packs/solution-architect/skills/figma-diagrams/scripts/post_comment.py +52 -0
- skilldrop_cli/data/packs/solution-architect/skills/figma-diagrams/templates/figjam-import.json +20 -0
- skilldrop_cli/data/packs/solution-architect/skills/nfr-spec/SKILL.md +63 -0
- skilldrop_cli/data/packs/solution-architect/skills/nfr-spec/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/solution-architect/skills/nfr-spec/evals/evals.json +16 -0
- skilldrop_cli/data/packs/solution-architect/skills/nfr-spec/manifest.json +16 -0
- skilldrop_cli/data/packs/solution-architect/skills/nfr-spec/reference.md +74 -0
- skilldrop_cli/data/packs/solution-architect/skills/nfr-spec/templates/nfr-spec.md +56 -0
- skilldrop_cli/data/packs/solution-architect/skills/reverse-architecture/SKILL.md +103 -0
- skilldrop_cli/data/packs/solution-architect/skills/reverse-architecture/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/solution-architect/skills/reverse-architecture/evals/evals.json +16 -0
- skilldrop_cli/data/packs/solution-architect/skills/reverse-architecture/manifest.json +11 -0
- skilldrop_cli/data/packs/solution-architect/skills/reverse-architecture/reference.md +150 -0
- skilldrop_cli/data/packs/solution-architect/skills/reverse-architecture/templates/description.md +52 -0
- skilldrop_cli/data/packs/solution-architect/skills/reverse-architecture/templates/extraction.md +55 -0
- skilldrop_cli/data/packs/solution-architect/skills/tech-comparison-matrix/SKILL.md +56 -0
- skilldrop_cli/data/packs/solution-architect/skills/tech-comparison-matrix/evals/eval_queries.json +30 -0
- skilldrop_cli/data/packs/solution-architect/skills/tech-comparison-matrix/evals/evals.json +18 -0
- skilldrop_cli/data/packs/solution-architect/skills/tech-comparison-matrix/examples/queue-selection.md +41 -0
- skilldrop_cli/data/packs/solution-architect/skills/tech-comparison-matrix/manifest.json +11 -0
- skilldrop_cli/data/packs/solution-architect/skills/tech-comparison-matrix/templates/matrix.md +45 -0
- skilldrop_cli/data/packs/solution-architect/skills/threat-model/SKILL.md +65 -0
- skilldrop_cli/data/packs/solution-architect/skills/threat-model/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/solution-architect/skills/threat-model/evals/evals.json +18 -0
- skilldrop_cli/data/packs/solution-architect/skills/threat-model/examples/document-upload.md +56 -0
- skilldrop_cli/data/packs/solution-architect/skills/threat-model/manifest.json +11 -0
- skilldrop_cli/data/packs/solution-architect/skills/threat-model/reference.md +69 -0
- skilldrop_cli/data/packs/sre-oncall/loops/operate/LOOP.md +84 -0
- skilldrop_cli/data/packs/sre-oncall/loops/operate/evals/eval_queries.json +30 -0
- skilldrop_cli/data/packs/sre-oncall/loops/operate/evals/evals.json +25 -0
- skilldrop_cli/data/packs/sre-oncall/loops/operate/loop.json +41 -0
- skilldrop_cli/data/packs/sre-oncall/pack.json +59 -0
- skilldrop_cli/data/packs/sre-oncall/skills/capacity-cost-model/SKILL.md +65 -0
- skilldrop_cli/data/packs/sre-oncall/skills/capacity-cost-model/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/sre-oncall/skills/capacity-cost-model/evals/evals.json +19 -0
- skilldrop_cli/data/packs/sre-oncall/skills/capacity-cost-model/manifest.json +11 -0
- skilldrop_cli/data/packs/sre-oncall/skills/capacity-cost-model/reference.md +54 -0
- skilldrop_cli/data/packs/sre-oncall/skills/capacity-cost-model/templates/cost-model.md +68 -0
- skilldrop_cli/data/packs/sre-oncall/skills/cloud-cost-review/SKILL.md +121 -0
- skilldrop_cli/data/packs/sre-oncall/skills/cloud-cost-review/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/sre-oncall/skills/cloud-cost-review/evals/evals.json +29 -0
- skilldrop_cli/data/packs/sre-oncall/skills/cloud-cost-review/examples/acme-aws-september.md +247 -0
- skilldrop_cli/data/packs/sre-oncall/skills/cloud-cost-review/examples/acme-cur-2026-08-09.csv +1085 -0
- skilldrop_cli/data/packs/sre-oncall/skills/cloud-cost-review/manifest.json +49 -0
- skilldrop_cli/data/packs/sre-oncall/skills/cloud-cost-review/reference.md +100 -0
- skilldrop_cli/data/packs/sre-oncall/skills/cloud-cost-review/scripts/cost_summary.py +630 -0
- skilldrop_cli/data/packs/sre-oncall/skills/cloud-cost-review/templates/cost-review.md +36 -0
- skilldrop_cli/data/packs/sre-oncall/skills/delivery-metrics-report/SKILL.md +114 -0
- skilldrop_cli/data/packs/sre-oncall/skills/delivery-metrics-report/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/sre-oncall/skills/delivery-metrics-report/evals/evals.json +28 -0
- skilldrop_cli/data/packs/sre-oncall/skills/delivery-metrics-report/evals/files/1/deploys.csv +49 -0
- skilldrop_cli/data/packs/sre-oncall/skills/delivery-metrics-report/evals/files/1/incidents.csv +7 -0
- skilldrop_cli/data/packs/sre-oncall/skills/delivery-metrics-report/evals/files/1/prs.csv +84 -0
- skilldrop_cli/data/packs/sre-oncall/skills/delivery-metrics-report/examples/checkout-api-8-weeks.md +123 -0
- skilldrop_cli/data/packs/sre-oncall/skills/delivery-metrics-report/examples/deployments.csv +49 -0
- skilldrop_cli/data/packs/sre-oncall/skills/delivery-metrics-report/examples/incidents.csv +7 -0
- skilldrop_cli/data/packs/sre-oncall/skills/delivery-metrics-report/examples/prs.csv +84 -0
- skilldrop_cli/data/packs/sre-oncall/skills/delivery-metrics-report/manifest.json +48 -0
- skilldrop_cli/data/packs/sre-oncall/skills/delivery-metrics-report/reference.md +83 -0
- skilldrop_cli/data/packs/sre-oncall/skills/delivery-metrics-report/scripts/delivery_metrics.py +566 -0
- skilldrop_cli/data/packs/sre-oncall/skills/delivery-metrics-report/templates/delivery-report.md +31 -0
- skilldrop_cli/data/packs/sre-oncall/skills/incident-comms/SKILL.md +68 -0
- skilldrop_cli/data/packs/sre-oncall/skills/incident-comms/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/sre-oncall/skills/incident-comms/evals/evals.json +16 -0
- skilldrop_cli/data/packs/sre-oncall/skills/incident-comms/manifest.json +14 -0
- skilldrop_cli/data/packs/sre-oncall/skills/incident-comms/reference.md +43 -0
- skilldrop_cli/data/packs/sre-oncall/skills/incident-comms/templates/messages.md +82 -0
- skilldrop_cli/data/packs/sre-oncall/skills/observability-plan/SKILL.md +70 -0
- skilldrop_cli/data/packs/sre-oncall/skills/observability-plan/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/sre-oncall/skills/observability-plan/evals/evals.json +16 -0
- skilldrop_cli/data/packs/sre-oncall/skills/observability-plan/manifest.json +15 -0
- skilldrop_cli/data/packs/sre-oncall/skills/observability-plan/reference.md +67 -0
- skilldrop_cli/data/packs/sre-oncall/skills/observability-plan/templates/observability-plan.md +62 -0
- skilldrop_cli/data/packs/sre-oncall/skills/postmortem-generator/SKILL.md +66 -0
- skilldrop_cli/data/packs/sre-oncall/skills/postmortem-generator/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/sre-oncall/skills/postmortem-generator/evals/evals.json +17 -0
- skilldrop_cli/data/packs/sre-oncall/skills/postmortem-generator/manifest.json +14 -0
- skilldrop_cli/data/packs/sre-oncall/skills/postmortem-generator/templates/postmortem.md +67 -0
- skilldrop_cli/data/packs/sre-oncall/skills/runbook-generator/SKILL.md +42 -0
- skilldrop_cli/data/packs/sre-oncall/skills/runbook-generator/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/sre-oncall/skills/runbook-generator/evals/evals.json +17 -0
- skilldrop_cli/data/packs/sre-oncall/skills/runbook-generator/manifest.json +11 -0
- skilldrop_cli/data/packs/sre-oncall/skills/runbook-generator/templates/runbook.md +109 -0
- skilldrop_cli/data/packs/stakeholder-comms/pack.json +60 -0
- skilldrop_cli/data/packs/stakeholder-comms/skills/audience-profile/SKILL.md +74 -0
- skilldrop_cli/data/packs/stakeholder-comms/skills/audience-profile/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/stakeholder-comms/skills/audience-profile/evals/evals.json +15 -0
- skilldrop_cli/data/packs/stakeholder-comms/skills/audience-profile/manifest.json +11 -0
- skilldrop_cli/data/packs/stakeholder-comms/skills/audience-profile/reference.md +175 -0
- skilldrop_cli/data/packs/stakeholder-comms/skills/decision-log/SKILL.md +68 -0
- skilldrop_cli/data/packs/stakeholder-comms/skills/decision-log/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/stakeholder-comms/skills/decision-log/evals/evals.json +17 -0
- skilldrop_cli/data/packs/stakeholder-comms/skills/decision-log/manifest.json +11 -0
- skilldrop_cli/data/packs/stakeholder-comms/skills/exec-summary/SKILL.md +45 -0
- skilldrop_cli/data/packs/stakeholder-comms/skills/exec-summary/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/stakeholder-comms/skills/exec-summary/evals/evals.json +17 -0
- skilldrop_cli/data/packs/stakeholder-comms/skills/exec-summary/manifest.json +11 -0
- skilldrop_cli/data/packs/stakeholder-comms/skills/exec-summary/templates/exec-summary.md +48 -0
- skilldrop_cli/data/packs/stakeholder-comms/skills/guide-builder/SKILL.md +77 -0
- skilldrop_cli/data/packs/stakeholder-comms/skills/guide-builder/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/stakeholder-comms/skills/guide-builder/evals/evals.json +18 -0
- skilldrop_cli/data/packs/stakeholder-comms/skills/guide-builder/examples/local-setup-guide.md +127 -0
- skilldrop_cli/data/packs/stakeholder-comms/skills/guide-builder/manifest.json +11 -0
- skilldrop_cli/data/packs/stakeholder-comms/skills/guide-builder/templates/api-reference.md +120 -0
- skilldrop_cli/data/packs/stakeholder-comms/skills/guide-builder/templates/design-walkthrough.md +72 -0
- skilldrop_cli/data/packs/stakeholder-comms/skills/guide-builder/templates/setup-guide.md +109 -0
- skilldrop_cli/data/packs/trackers/pack.json +61 -0
- skilldrop_cli/data/packs/trackers/skills/backlog-triage/SKILL.md +116 -0
- skilldrop_cli/data/packs/trackers/skills/backlog-triage/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/trackers/skills/backlog-triage/evals/evals.json +30 -0
- skilldrop_cli/data/packs/trackers/skills/backlog-triage/evals/files/1/examples/northwind-backlog.csv +28 -0
- skilldrop_cli/data/packs/trackers/skills/backlog-triage/evals/files/2/issues.json +6052 -0
- skilldrop_cli/data/packs/trackers/skills/backlog-triage/examples/northwind-backlog.csv +28 -0
- skilldrop_cli/data/packs/trackers/skills/backlog-triage/examples/northwind-checkout-triage.md +202 -0
- skilldrop_cli/data/packs/trackers/skills/backlog-triage/manifest.json +42 -0
- skilldrop_cli/data/packs/trackers/skills/backlog-triage/reference.md +106 -0
- skilldrop_cli/data/packs/trackers/skills/backlog-triage/scripts/triage_backlog.py +461 -0
- skilldrop_cli/data/packs/trackers/skills/backlog-triage/templates/triage-report.md +42 -0
- skilldrop_cli/data/packs/trackers/skills/team-status-report/SKILL.md +111 -0
- skilldrop_cli/data/packs/trackers/skills/team-status-report/evals/eval_queries.json +30 -0
- skilldrop_cli/data/packs/trackers/skills/team-status-report/evals/evals.json +30 -0
- skilldrop_cli/data/packs/trackers/skills/team-status-report/evals/files/1/examples/northwind-week-40.csv +16 -0
- skilldrop_cli/data/packs/trackers/skills/team-status-report/evals/files/2/issues.json +1212 -0
- skilldrop_cli/data/packs/trackers/skills/team-status-report/examples/northwind-week-40.csv +16 -0
- skilldrop_cli/data/packs/trackers/skills/team-status-report/examples/northwind-weekly-status.md +160 -0
- skilldrop_cli/data/packs/trackers/skills/team-status-report/manifest.json +33 -0
- skilldrop_cli/data/packs/trackers/skills/team-status-report/reference.md +92 -0
- skilldrop_cli/data/packs/trackers/skills/team-status-report/scripts/status_counts.py +486 -0
- skilldrop_cli/data/packs/trackers/skills/team-status-report/templates/status-report.md +42 -0
- skilldrop_cli/data/packs/trackers/skills/tracker-brief-sync/SKILL.md +116 -0
- skilldrop_cli/data/packs/trackers/skills/tracker-brief-sync/evals/eval_queries.json +34 -0
- skilldrop_cli/data/packs/trackers/skills/tracker-brief-sync/evals/evals.json +31 -0
- skilldrop_cli/data/packs/trackers/skills/tracker-brief-sync/evals/files/1/examples/prd-guest-checkout.md +53 -0
- skilldrop_cli/data/packs/trackers/skills/tracker-brief-sync/evals/files/2/examples/prd-guest-checkout.md +53 -0
- skilldrop_cli/data/packs/trackers/skills/tracker-brief-sync/evals/files/2/examples/tracker-after-two-weeks.csv +30 -0
- skilldrop_cli/data/packs/trackers/skills/tracker-brief-sync/examples/guest-checkout-spec.json +98 -0
- skilldrop_cli/data/packs/trackers/skills/tracker-brief-sync/examples/guest-checkout-sync.md +151 -0
- skilldrop_cli/data/packs/trackers/skills/tracker-brief-sync/examples/prd-guest-checkout.md +53 -0
- skilldrop_cli/data/packs/trackers/skills/tracker-brief-sync/examples/tracker-after-two-weeks.csv +30 -0
- skilldrop_cli/data/packs/trackers/skills/tracker-brief-sync/manifest.json +41 -0
- skilldrop_cli/data/packs/trackers/skills/tracker-brief-sync/reference.md +101 -0
- skilldrop_cli/data/packs/trackers/skills/tracker-brief-sync/scripts/brief_sync.py +501 -0
- skilldrop_cli/data/packs/trackers/skills/tracker-brief-sync/templates/issues-spec.json +26 -0
- skilldrop_cli/data/profiles.json +24 -0
- skilldrop_cli-0.16.3.dist-info/METADATA +91 -0
- skilldrop_cli-0.16.3.dist-info/RECORD +757 -0
- skilldrop_cli-0.16.3.dist-info/WHEEL +5 -0
- skilldrop_cli-0.16.3.dist-info/entry_points.txt +2 -0
- skilldrop_cli-0.16.3.dist-info/licenses/LICENSE +9 -0
- skilldrop_cli-0.16.3.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# risk-register reference
|
|
2
|
+
|
|
3
|
+
## The default 5×5 scale
|
|
4
|
+
|
|
5
|
+
Likelihood is judged over a stated horizon (default 12 months). Impact is judged against the
|
|
6
|
+
objective in scope, not against the company in general.
|
|
7
|
+
|
|
8
|
+
| Score | Likelihood | Rough probability | Impact | What it looks like |
|
|
9
|
+
|---|---|---|---|---|
|
|
10
|
+
| 1 | Rare | under 5% | Minimal | Absorbed in normal operations; nobody outside the team notices |
|
|
11
|
+
| 2 | Unlikely | 5–20% | Minor | Small cost or delay inside existing tolerance; no external notice |
|
|
12
|
+
| 3 | Possible | 20–50% | Moderate | A milestone or budget line is missed; management attention needed |
|
|
13
|
+
| 4 | Likely | 50–80% | Major | An objective is missed; customers, partners or a regulator notice |
|
|
14
|
+
| 5 | Almost certain | over 80% | Severe | The objective fails, serious legal or regulatory action, or harm to people |
|
|
15
|
+
|
|
16
|
+
Add the organisation's own thresholds to the impact column when it has them, for example
|
|
17
|
+
"Major: £250k to £1m, or one to three months' delay". Use the organisation's scale whenever
|
|
18
|
+
it exists; a register that uses a different scale from the risk committee gets rescored.
|
|
19
|
+
|
|
20
|
+
**Bands** (score = likelihood × impact): low 1–4, medium 5–9, high 10–16, critical 20–25.
|
|
21
|
+
The script bands other scales by share of the maximum score: up to 16% low, up to 36%
|
|
22
|
+
medium, up to 64% high, above that critical. On 5×5 that gives exactly the bands above.
|
|
23
|
+
|
|
24
|
+
A common use of the bands, to adapt to the organisation's appetite:
|
|
25
|
+
|
|
26
|
+
| Band | Who can accept the residual risk | Review at least |
|
|
27
|
+
|---|---|---|
|
|
28
|
+
| critical | Executive or board | monthly |
|
|
29
|
+
| high | Senior leader above the owner | quarterly |
|
|
30
|
+
| medium | Risk owner | six-monthly |
|
|
31
|
+
| low | Risk owner | yearly |
|
|
32
|
+
|
|
33
|
+
## Writing cause, event, consequence
|
|
34
|
+
|
|
35
|
+
| Part | Question it answers | ✅ | ❌ |
|
|
36
|
+
|---|---|---|---|
|
|
37
|
+
| Cause | What condition exists today? | "One analyst maintains the route scripts" | "Key person" |
|
|
38
|
+
| Event | What uncertain thing might happen? | "The analyst leaves or is off long-term" | "Resource issues" |
|
|
39
|
+
| Consequence | What happens to the objective? | "Routes are planned by hand and fuel use rises" | "Bad" |
|
|
40
|
+
|
|
41
|
+
Tests:
|
|
42
|
+
- If the "risk" is already happening, it is an **issue**, not a risk. Track it as an issue
|
|
43
|
+
with an action, and keep the risk only if it could get worse.
|
|
44
|
+
- If you can't say how likely it is, the event is too vague. Rewrite it.
|
|
45
|
+
- If two causes lead to one event, keep one row and list both causes. If one cause leads to
|
|
46
|
+
two unrelated events, write two rows.
|
|
47
|
+
|
|
48
|
+
## Inherent and residual
|
|
49
|
+
|
|
50
|
+
- **Inherent:** the score if none of the risk's controls existed. Use it to see which
|
|
51
|
+
controls matter most; a big drop from inherent to residual means a control the business
|
|
52
|
+
depends on, and that control deserves testing.
|
|
53
|
+
- **Residual:** the score with the controls that operate today. Controls that are planned,
|
|
54
|
+
budgeted or half-built go in `controls` marked "(planned)" and do not lower residual yet.
|
|
55
|
+
- **Target** (optional, in the summary): where residual should land once planned controls are live.
|
|
56
|
+
|
|
57
|
+
## Treatments
|
|
58
|
+
|
|
59
|
+
| Treatment | Use when | Record |
|
|
60
|
+
|---|---|---|
|
|
61
|
+
| avoid | The activity isn't worth the risk | What stops, and by when |
|
|
62
|
+
| reduce | Controls can bring likelihood or impact down at a sensible cost | Each control, owner, due date |
|
|
63
|
+
| transfer | Someone else can carry the consequence: insurance, contract, outsourcing | The policy or clause; note the residual you still hold |
|
|
64
|
+
| accept | Treatment costs more than the exposure, and the residual is within appetite | Who accepted, when, and until what date |
|
|
65
|
+
|
|
66
|
+
Accepting a high or critical residual risk is a decision above the owner's level; put it in
|
|
67
|
+
the summary's decision list.
|
|
68
|
+
|
|
69
|
+
## Review triggers
|
|
70
|
+
|
|
71
|
+
Name an observable event, not a calendar entry:
|
|
72
|
+
|
|
73
|
+
- ✅ "Vendor misses an SLA two months running or announces a sale"
|
|
74
|
+
- ✅ "Diesel index up 10% in a month"
|
|
75
|
+
- ✅ "Any EDR detection on a depot device"
|
|
76
|
+
- ❌ "Quarterly review"
|
|
77
|
+
- ❌ "If things change"
|
|
78
|
+
|
|
79
|
+
The calendar date goes in `next_review`; the trigger is what brings the review forward.
|
|
80
|
+
|
|
81
|
+
## CSV columns
|
|
82
|
+
|
|
83
|
+
| Column | Required | Values |
|
|
84
|
+
|---|---|---|
|
|
85
|
+
| id | yes | unique, e.g. R-001 |
|
|
86
|
+
| title | yes | short noun phrase |
|
|
87
|
+
| cause, event, consequence | yes | one sentence each |
|
|
88
|
+
| owner | yes | a named person or a role a person holds; not "TBD", "IT", "team" |
|
|
89
|
+
| inherent_likelihood, inherent_impact | yes | whole numbers 1..scale |
|
|
90
|
+
| residual_likelihood, residual_impact | yes | whole numbers 1..scale; residual score ≤ inherent score |
|
|
91
|
+
| treatment | yes | avoid, reduce, transfer, accept |
|
|
92
|
+
| controls | no (warned under reduce) | semicolon-separated |
|
|
93
|
+
| due_date | no (warned under avoid, reduce, transfer) | YYYY-MM-DD |
|
|
94
|
+
| next_review | yes | YYYY-MM-DD |
|
|
95
|
+
| review_trigger | no (warned) | the event that reopens the risk |
|
|
96
|
+
| status | yes | open, closed |
|
|
97
|
+
|
|
98
|
+
Extra columns (category, objective, last_updated, target score) are allowed; the script
|
|
99
|
+
ignores them.
|
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Validate a risk-register CSV and print heat-map counts.
|
|
3
|
+
|
|
4
|
+
Stdlib only, Python 3.9+. Reads the CSV from a path argument (or "-" for stdin),
|
|
5
|
+
checks every row, and prints a plain-text report: errors, warnings, inherent and
|
|
6
|
+
residual heat maps, overdue reviews and actions, and the top risks by residual score.
|
|
7
|
+
|
|
8
|
+
Exit codes:
|
|
9
|
+
0 the register is valid (warnings may still be printed)
|
|
10
|
+
1 the register has errors (missing fields, scores out of range, bad dates, ...)
|
|
11
|
+
2 the input could not be read at all (missing file, no header, bad arguments)
|
|
12
|
+
|
|
13
|
+
Usage:
|
|
14
|
+
python3 check_register.py register.csv
|
|
15
|
+
python3 check_register.py register.csv --scale 5 --as-of 2026-10-01 --top 5 --out report.txt
|
|
16
|
+
cat register.csv | python3 check_register.py -
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
import argparse
|
|
20
|
+
import csv
|
|
21
|
+
import datetime
|
|
22
|
+
import io
|
|
23
|
+
import sys
|
|
24
|
+
|
|
25
|
+
REQUIRED_COLUMNS = [
|
|
26
|
+
"id",
|
|
27
|
+
"title",
|
|
28
|
+
"cause",
|
|
29
|
+
"event",
|
|
30
|
+
"consequence",
|
|
31
|
+
"owner",
|
|
32
|
+
"inherent_likelihood",
|
|
33
|
+
"inherent_impact",
|
|
34
|
+
"residual_likelihood",
|
|
35
|
+
"residual_impact",
|
|
36
|
+
"treatment",
|
|
37
|
+
"controls",
|
|
38
|
+
"due_date",
|
|
39
|
+
"next_review",
|
|
40
|
+
"review_trigger",
|
|
41
|
+
"status",
|
|
42
|
+
]
|
|
43
|
+
|
|
44
|
+
# Columns that may be blank on a row without making it an error.
|
|
45
|
+
OPTIONAL_VALUE_COLUMNS = {"controls", "due_date", "review_trigger"}
|
|
46
|
+
|
|
47
|
+
SCORE_COLUMNS = [
|
|
48
|
+
"inherent_likelihood",
|
|
49
|
+
"inherent_impact",
|
|
50
|
+
"residual_likelihood",
|
|
51
|
+
"residual_impact",
|
|
52
|
+
]
|
|
53
|
+
|
|
54
|
+
TREATMENTS = {"avoid", "reduce", "transfer", "accept"}
|
|
55
|
+
STATUSES = {"open", "closed"}
|
|
56
|
+
GENERIC_OWNERS = {"tbd", "tbc", "team", "all", "everyone", "n/a", "na", "none", "it", "?"}
|
|
57
|
+
|
|
58
|
+
BANDS = ["low", "medium", "high", "critical"]
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def band_for(score, scale):
|
|
62
|
+
"""Band a likelihood x impact score by its share of the maximum score.
|
|
63
|
+
|
|
64
|
+
On a 5x5 scale this gives low 1-4, medium 5-9, high 10-16, critical 20-25.
|
|
65
|
+
"""
|
|
66
|
+
ratio = float(score) / float(scale * scale)
|
|
67
|
+
if ratio <= 0.16:
|
|
68
|
+
return "low"
|
|
69
|
+
if ratio <= 0.36:
|
|
70
|
+
return "medium"
|
|
71
|
+
if ratio <= 0.64:
|
|
72
|
+
return "high"
|
|
73
|
+
return "critical"
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def band_ranges(scale):
|
|
77
|
+
ranges = {}
|
|
78
|
+
products = sorted(set(a * b for a in range(1, scale + 1) for b in range(1, scale + 1)))
|
|
79
|
+
for s in products:
|
|
80
|
+
b = band_for(s, scale)
|
|
81
|
+
lo, hi = ranges.get(b, (s, s))
|
|
82
|
+
ranges[b] = (min(lo, s), max(hi, s))
|
|
83
|
+
return ranges
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def parse_date(text):
|
|
87
|
+
try:
|
|
88
|
+
return datetime.datetime.strptime(text, "%Y-%m-%d").date()
|
|
89
|
+
except ValueError:
|
|
90
|
+
return None
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def heat_map(rows, lik_col, imp_col, scale):
|
|
94
|
+
grid = {}
|
|
95
|
+
for r in rows:
|
|
96
|
+
key = (r[lik_col], r[imp_col])
|
|
97
|
+
grid[key] = grid.get(key, 0) + 1
|
|
98
|
+
lines = []
|
|
99
|
+
header = " L\\I |" + "".join(" {:>3}".format(i) for i in range(1, scale + 1))
|
|
100
|
+
lines.append(header)
|
|
101
|
+
lines.append(" " + "-" * (len(header) - 2))
|
|
102
|
+
for lik in range(scale, 0, -1):
|
|
103
|
+
cells = []
|
|
104
|
+
for imp in range(1, scale + 1):
|
|
105
|
+
n = grid.get((lik, imp), 0)
|
|
106
|
+
cells.append(" {:>3}".format(n if n else "."))
|
|
107
|
+
lines.append(" {:>3} |".format(lik) + "".join(cells))
|
|
108
|
+
return lines
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def band_counts(rows, lik_col, imp_col, scale):
|
|
112
|
+
counts = dict((b, 0) for b in BANDS)
|
|
113
|
+
for r in rows:
|
|
114
|
+
counts[band_for(r[lik_col] * r[imp_col], scale)] += 1
|
|
115
|
+
return counts
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
def bullets(items):
|
|
119
|
+
if not items:
|
|
120
|
+
return [" none"]
|
|
121
|
+
return [" - " + i for i in items]
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
def main(argv=None):
|
|
125
|
+
ap = argparse.ArgumentParser(description="Validate a risk-register CSV and print heat-map counts.")
|
|
126
|
+
ap.add_argument("csv", help="path to the register CSV, or - for stdin")
|
|
127
|
+
ap.add_argument("--scale", type=int, default=5, help="likelihood and impact scale, 1..N (default 5)")
|
|
128
|
+
ap.add_argument("--as-of", dest="as_of", default=None, help="date to judge overdue items against, YYYY-MM-DD (default today)")
|
|
129
|
+
ap.add_argument("--top", type=int, default=5, help="how many top residual risks to list (default 5)")
|
|
130
|
+
ap.add_argument("--out", default=None, help="also write the report to this path")
|
|
131
|
+
args = ap.parse_args(argv)
|
|
132
|
+
|
|
133
|
+
if args.scale < 3 or args.scale > 10:
|
|
134
|
+
print("error: --scale must be between 3 and 10", file=sys.stderr)
|
|
135
|
+
return 2
|
|
136
|
+
if args.as_of:
|
|
137
|
+
as_of = parse_date(args.as_of)
|
|
138
|
+
if as_of is None:
|
|
139
|
+
print("error: --as-of must be YYYY-MM-DD, got %r" % args.as_of, file=sys.stderr)
|
|
140
|
+
return 2
|
|
141
|
+
else:
|
|
142
|
+
as_of = datetime.date.today()
|
|
143
|
+
|
|
144
|
+
try:
|
|
145
|
+
if args.csv == "-":
|
|
146
|
+
text = sys.stdin.read()
|
|
147
|
+
else:
|
|
148
|
+
with io.open(args.csv, "r", encoding="utf-8-sig", newline="") as fh:
|
|
149
|
+
text = fh.read()
|
|
150
|
+
except (IOError, OSError) as exc:
|
|
151
|
+
print("error: cannot read %s: %s" % (args.csv, exc), file=sys.stderr)
|
|
152
|
+
return 2
|
|
153
|
+
|
|
154
|
+
reader = csv.DictReader(io.StringIO(text))
|
|
155
|
+
if not reader.fieldnames:
|
|
156
|
+
print("error: %s has no header row" % args.csv, file=sys.stderr)
|
|
157
|
+
return 2
|
|
158
|
+
fieldnames = [f.strip() for f in reader.fieldnames]
|
|
159
|
+
missing_cols = [c for c in REQUIRED_COLUMNS if c not in fieldnames]
|
|
160
|
+
if missing_cols:
|
|
161
|
+
print("error: missing required column(s): %s" % ", ".join(missing_cols), file=sys.stderr)
|
|
162
|
+
print("expected columns: %s" % ",".join(REQUIRED_COLUMNS), file=sys.stderr)
|
|
163
|
+
return 2
|
|
164
|
+
|
|
165
|
+
errors = []
|
|
166
|
+
warnings = []
|
|
167
|
+
overdue = []
|
|
168
|
+
valid = []
|
|
169
|
+
seen_ids = {}
|
|
170
|
+
total_rows = 0
|
|
171
|
+
|
|
172
|
+
for line_no, raw in enumerate(reader, start=2):
|
|
173
|
+
row = dict((k.strip(), (v or "").strip()) for k, v in raw.items() if k is not None)
|
|
174
|
+
if not any(row.values()):
|
|
175
|
+
continue
|
|
176
|
+
total_rows += 1
|
|
177
|
+
rid = row.get("id") or "(line %d)" % line_no
|
|
178
|
+
where = "line %d [%s]" % (line_no, rid)
|
|
179
|
+
row_ok = True
|
|
180
|
+
|
|
181
|
+
for col in REQUIRED_COLUMNS:
|
|
182
|
+
if col in OPTIONAL_VALUE_COLUMNS:
|
|
183
|
+
continue
|
|
184
|
+
if not row.get(col):
|
|
185
|
+
errors.append("%s: %s is empty" % (where, col))
|
|
186
|
+
row_ok = False
|
|
187
|
+
|
|
188
|
+
if row.get("id"):
|
|
189
|
+
if row["id"] in seen_ids:
|
|
190
|
+
errors.append("%s: duplicate id, first seen on line %d" % (where, seen_ids[row["id"]]))
|
|
191
|
+
row_ok = False
|
|
192
|
+
else:
|
|
193
|
+
seen_ids[row["id"]] = line_no
|
|
194
|
+
|
|
195
|
+
owner = row.get("owner", "")
|
|
196
|
+
if owner and owner.lower() in GENERIC_OWNERS:
|
|
197
|
+
errors.append("%s: owner %r is not a named person or role" % (where, owner))
|
|
198
|
+
row_ok = False
|
|
199
|
+
|
|
200
|
+
scores = {}
|
|
201
|
+
for col in SCORE_COLUMNS:
|
|
202
|
+
val = row.get(col, "")
|
|
203
|
+
if not val:
|
|
204
|
+
continue
|
|
205
|
+
try:
|
|
206
|
+
n = int(val)
|
|
207
|
+
except ValueError:
|
|
208
|
+
errors.append("%s: %s must be a whole number 1-%d, got %r" % (where, col, args.scale, val))
|
|
209
|
+
row_ok = False
|
|
210
|
+
continue
|
|
211
|
+
if n < 1 or n > args.scale:
|
|
212
|
+
errors.append("%s: %s=%d is outside the 1-%d scale" % (where, col, n, args.scale))
|
|
213
|
+
row_ok = False
|
|
214
|
+
continue
|
|
215
|
+
scores[col] = n
|
|
216
|
+
|
|
217
|
+
treatment = row.get("treatment", "").lower()
|
|
218
|
+
if treatment and treatment not in TREATMENTS:
|
|
219
|
+
errors.append("%s: treatment %r is not one of avoid/reduce/transfer/accept" % (where, row["treatment"]))
|
|
220
|
+
row_ok = False
|
|
221
|
+
|
|
222
|
+
status = row.get("status", "").lower()
|
|
223
|
+
if status and status not in STATUSES:
|
|
224
|
+
errors.append("%s: status %r is not open or closed" % (where, row["status"]))
|
|
225
|
+
row_ok = False
|
|
226
|
+
|
|
227
|
+
dates = {}
|
|
228
|
+
for col in ("due_date", "next_review"):
|
|
229
|
+
val = row.get(col, "")
|
|
230
|
+
if not val:
|
|
231
|
+
continue
|
|
232
|
+
d = parse_date(val)
|
|
233
|
+
if d is None:
|
|
234
|
+
errors.append("%s: %s must be YYYY-MM-DD, got %r" % (where, col, val))
|
|
235
|
+
row_ok = False
|
|
236
|
+
else:
|
|
237
|
+
dates[col] = d
|
|
238
|
+
|
|
239
|
+
if treatment in ("reduce", "avoid", "transfer") and not row.get("due_date"):
|
|
240
|
+
warnings.append("%s: treatment is %s but there is no due_date for the action" % (where, treatment))
|
|
241
|
+
if treatment == "reduce" and not row.get("controls"):
|
|
242
|
+
warnings.append("%s: treatment is reduce but no controls are listed" % where)
|
|
243
|
+
if not row.get("review_trigger"):
|
|
244
|
+
warnings.append("%s: no review_trigger; name the event that should reopen this risk" % where)
|
|
245
|
+
|
|
246
|
+
if len(scores) == 4:
|
|
247
|
+
inh = scores["inherent_likelihood"] * scores["inherent_impact"]
|
|
248
|
+
res = scores["residual_likelihood"] * scores["residual_impact"]
|
|
249
|
+
if res > inh:
|
|
250
|
+
errors.append("%s: residual score %d is higher than inherent score %d" % (where, res, inh))
|
|
251
|
+
row_ok = False
|
|
252
|
+
if treatment == "reduce" and res == inh:
|
|
253
|
+
warnings.append("%s: treatment is reduce but residual equals inherent (%d); the controls change nothing" % (where, res))
|
|
254
|
+
if treatment == "accept" and band_for(res, args.scale) in ("high", "critical"):
|
|
255
|
+
warnings.append("%s: accepting a %s residual risk (%d) needs a named sign-off above the owner" % (where, band_for(res, args.scale), res))
|
|
256
|
+
|
|
257
|
+
if status == "open":
|
|
258
|
+
if "next_review" in dates and dates["next_review"] < as_of:
|
|
259
|
+
days = (as_of - dates["next_review"]).days
|
|
260
|
+
overdue.append("%s: review overdue by %d day(s) (next_review %s), owner %s" % (where, days, dates["next_review"], owner or "?"))
|
|
261
|
+
if "due_date" in dates and dates["due_date"] < as_of:
|
|
262
|
+
days = (as_of - dates["due_date"]).days
|
|
263
|
+
overdue.append("%s: treatment action overdue by %d day(s) (due_date %s), owner %s" % (where, days, dates["due_date"], owner or "?"))
|
|
264
|
+
|
|
265
|
+
if row_ok and len(scores) == 4:
|
|
266
|
+
entry = dict(row)
|
|
267
|
+
entry.update(scores)
|
|
268
|
+
entry["status"] = status
|
|
269
|
+
valid.append(entry)
|
|
270
|
+
|
|
271
|
+
open_rows = [r for r in valid if r["status"] == "open"]
|
|
272
|
+
|
|
273
|
+
out = []
|
|
274
|
+
out.append("Risk register check")
|
|
275
|
+
out.append(" file: %s" % args.csv)
|
|
276
|
+
out.append(" as of: %s" % as_of.isoformat())
|
|
277
|
+
out.append(" scale: 1-%d likelihood x 1-%d impact" % (args.scale, args.scale))
|
|
278
|
+
ranges = band_ranges(args.scale)
|
|
279
|
+
out.append(" bands: " + ", ".join("%s %d-%d" % (b, ranges[b][0], ranges[b][1]) for b in BANDS if b in ranges))
|
|
280
|
+
out.append(" rows: %d read, %d valid, %d open" % (total_rows, len(valid), len(open_rows)))
|
|
281
|
+
out.append("")
|
|
282
|
+
|
|
283
|
+
out.append("Errors (%d)" % len(errors))
|
|
284
|
+
out.extend(bullets(errors))
|
|
285
|
+
out.append("")
|
|
286
|
+
out.append("Warnings (%d)" % len(warnings))
|
|
287
|
+
out.extend(bullets(warnings))
|
|
288
|
+
out.append("")
|
|
289
|
+
out.append("Overdue (%d)" % len(overdue))
|
|
290
|
+
out.extend(bullets(overdue))
|
|
291
|
+
out.append("")
|
|
292
|
+
|
|
293
|
+
out.append("Inherent heat map, open risks (rows = likelihood, columns = impact)")
|
|
294
|
+
out.extend(heat_map(open_rows, "inherent_likelihood", "inherent_impact", args.scale))
|
|
295
|
+
c = band_counts(open_rows, "inherent_likelihood", "inherent_impact", args.scale)
|
|
296
|
+
out.append(" " + ", ".join("%s %d" % (b, c[b]) for b in BANDS))
|
|
297
|
+
out.append("")
|
|
298
|
+
out.append("Residual heat map, open risks (rows = likelihood, columns = impact)")
|
|
299
|
+
out.extend(heat_map(open_rows, "residual_likelihood", "residual_impact", args.scale))
|
|
300
|
+
c = band_counts(open_rows, "residual_likelihood", "residual_impact", args.scale)
|
|
301
|
+
out.append(" " + ", ".join("%s %d" % (b, c[b]) for b in BANDS))
|
|
302
|
+
out.append("")
|
|
303
|
+
|
|
304
|
+
ranked = sorted(
|
|
305
|
+
open_rows,
|
|
306
|
+
key=lambda r: (
|
|
307
|
+
-(r["residual_likelihood"] * r["residual_impact"]),
|
|
308
|
+
-(r["inherent_likelihood"] * r["inherent_impact"]),
|
|
309
|
+
r["id"],
|
|
310
|
+
),
|
|
311
|
+
)
|
|
312
|
+
out.append("Top %d open risks by residual score" % min(args.top, len(ranked)))
|
|
313
|
+
if not ranked:
|
|
314
|
+
out.append(" none")
|
|
315
|
+
for r in ranked[: args.top]:
|
|
316
|
+
inh = r["inherent_likelihood"] * r["inherent_impact"]
|
|
317
|
+
res = r["residual_likelihood"] * r["residual_impact"]
|
|
318
|
+
out.append(
|
|
319
|
+
" %s residual %d (%s), inherent %d %s [%s, owner %s]"
|
|
320
|
+
% (r["id"], res, band_for(res, args.scale), inh, r["title"], r["treatment"].lower(), r["owner"])
|
|
321
|
+
)
|
|
322
|
+
out.append("")
|
|
323
|
+
out.append("Result: %s" % ("FAIL, fix the errors above" if errors else "PASS"))
|
|
324
|
+
|
|
325
|
+
report = "\n".join(out) + "\n"
|
|
326
|
+
sys.stdout.write(report)
|
|
327
|
+
if args.out:
|
|
328
|
+
try:
|
|
329
|
+
with io.open(args.out, "w", encoding="utf-8") as fh:
|
|
330
|
+
fh.write(report)
|
|
331
|
+
except (IOError, OSError) as exc:
|
|
332
|
+
print("error: cannot write %s: %s" % (args.out, exc), file=sys.stderr)
|
|
333
|
+
return 2
|
|
334
|
+
return 1 if errors else 0
|
|
335
|
+
|
|
336
|
+
|
|
337
|
+
if __name__ == "__main__":
|
|
338
|
+
sys.exit(main())
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
id,title,cause,event,consequence,owner,inherent_likelihood,inherent_impact,residual_likelihood,residual_impact,treatment,controls,due_date,next_review,review_trigger,status
|
|
2
|
+
R-001,<short noun phrase>,<because of ... (the condition that exists today)>,<... may happen (the uncertain event)>,<leading to ... (the effect on objectives)>,<named person or role>,1-5,1-5,1-5,1-5,avoid|reduce|transfer|accept,<existing and planned controls; semicolon-separated>,YYYY-MM-DD,YYYY-MM-DD,<the event that reopens this risk>,open|closed
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: soc2-evidence-map
|
|
3
|
+
description: Map an organisation's controls to the SOC 2 Trust Services Criteria in scope (Security always, plus Availability, Confidentiality, Processing Integrity or Privacy if chosen), and for each control list the evidence an auditor will ask for, the system it lives in, the owner, how often it is produced, and the gaps — distinguishing Type I (designed and in place at a date) from Type II (operating over a period, sampled from a full population) — as a table and a CSV the team can work from. Use when the user is preparing for a SOC 2 audit or readiness assessment, says "SOC 2 evidence", "map our controls to the TSC", "what will the auditor ask for", "SOC 2 gap analysis".
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# soc2-evidence-map
|
|
7
|
+
|
|
8
|
+
You turn a controls list, or a description of how the company runs its systems, into the
|
|
9
|
+
working document a SOC 2 project runs on: each control mapped to the criteria it addresses,
|
|
10
|
+
the exact evidence the auditor will request, where that evidence comes from, who produces
|
|
11
|
+
it, how often, and what is missing. The output is a Markdown summary and a CSV. You prepare
|
|
12
|
+
material for the company's compliance lead and its auditor to review; it is not audit
|
|
13
|
+
advice, and only the service auditor decides what evidence is sufficient.
|
|
14
|
+
|
|
15
|
+
## How to respond
|
|
16
|
+
|
|
17
|
+
1. **Ask once for what is missing, in one message.** Take what is already given. Ask for at
|
|
18
|
+
most two things, and say what you will assume for the rest:
|
|
19
|
+
- **Scope:** which Trust Services Categories (Security is always in scope), the system
|
|
20
|
+
or product being reported on, and **Type I or Type II** with the date or period.
|
|
21
|
+
*Default: Security only, Type II, 12-month period* `[assumption]`.
|
|
22
|
+
- **Controls and systems:** the controls list if one exists, or the tools they run on
|
|
23
|
+
(identity provider, cloud, HR system, ticketing, code hosting, monitoring).
|
|
24
|
+
|
|
25
|
+
Owners and system names come from the user. A missing owner is a gap to fill, not a
|
|
26
|
+
name to guess.
|
|
27
|
+
|
|
28
|
+
2. **Draft controls where none exist.** If the user has no controls list, propose the
|
|
29
|
+
minimum set for the categories in scope from [`reference.md`](reference.md), each
|
|
30
|
+
written as *who does what, how often, with what record*:
|
|
31
|
+
✅ "Engineering managers review production access quarterly in Okta; removals are
|
|
32
|
+
ticketed in Jira." ❌ "Access is managed appropriately." Mark proposed controls
|
|
33
|
+
`proposed` so nobody mistakes them for existing ones.
|
|
34
|
+
|
|
35
|
+
3. **Map each control to criteria.** Use criteria IDs (for example CC6.2) only where
|
|
36
|
+
[`reference.md`](reference.md) gives the ID; for anything else, name the area in words
|
|
37
|
+
("Privacy: notice to data subjects"). One control usually maps to one to three criteria.
|
|
38
|
+
Then invert the map: every criterion in scope has at least one control, or it is a gap.
|
|
39
|
+
|
|
40
|
+
4. **Name the evidence for each control, by report type.**
|
|
41
|
+
- **Type I** (point in time): show the control is designed and in place on the report
|
|
42
|
+
date. The policy or procedure, the system configuration (export or screenshot with
|
|
43
|
+
the date visible), and one example of it happening.
|
|
44
|
+
- **Type II** (over the period): show it operated throughout. The auditor asks for the
|
|
45
|
+
**complete population** of occurrences in the period from the system of record (all
|
|
46
|
+
joiners, all leavers, all production changes, all quarterly reviews) and then picks
|
|
47
|
+
samples; for each sample you produce the record. Name the population and its source.
|
|
48
|
+
✅ "Population: Workday termination report for the period. Per sample: Okta deactivation
|
|
49
|
+
timestamp within 24 hours of the termination date." ❌ "Evidence: offboarding docs."
|
|
50
|
+
|
|
51
|
+
5. **Record where it lives, who owns it, and how often.** System is the tool the evidence
|
|
52
|
+
is exported from, not the team. Owner is a person or a role a person holds. Frequency is
|
|
53
|
+
how often the control runs (per event, daily, quarterly, annually) because that sets the
|
|
54
|
+
sample size the auditor draws.
|
|
55
|
+
|
|
56
|
+
6. **Mark status and gaps honestly.** Each control is `in place`, `partial` (runs but leaves
|
|
57
|
+
no record, or doesn't cover every system) or `gap` (doesn't exist or doesn't run). For
|
|
58
|
+
Type II, a control that started mid-period is `partial` for this period. Every non-`in
|
|
59
|
+
place` row gets a remediation and a date.
|
|
60
|
+
|
|
61
|
+
7. **Call out shared responsibility.** Controls a subservice organisation runs (the cloud
|
|
62
|
+
provider's data centre security) are covered by its own SOC report: list the vendor
|
|
63
|
+
reports to collect and the complementary controls the company must run itself. Note
|
|
64
|
+
the controls the company expects its customers to run.
|
|
65
|
+
|
|
66
|
+
8. **Emit both outputs:**
|
|
67
|
+
- the Markdown summary: scope line, a coverage table (criterion → controls → status),
|
|
68
|
+
the evidence map table, the gap list ordered by audit risk, and the vendor SOC reports
|
|
69
|
+
to collect;
|
|
70
|
+
- the CSV in the columns of [`templates/evidence-map.csv`](templates/evidence-map.csv),
|
|
71
|
+
one row per control-criterion pair, so the team can filter by owner or by criterion.
|
|
72
|
+
|
|
73
|
+
**Non-interactive runs** (subagent, CI, headless): missing scope becomes Security only,
|
|
74
|
+
Type II, 12 months, tagged `[assumption]` at the top. If there are no controls and no
|
|
75
|
+
description of the systems to draft from, emit
|
|
76
|
+
`BLOCKED: need the controls list, or the systems the company runs (identity, cloud, HR, ticketing, code hosting)`.
|
|
77
|
+
|
|
78
|
+
## Useful references in this skill
|
|
79
|
+
|
|
80
|
+
- [`reference.md`](reference.md): the Trust Services Criteria structure, the criteria IDs this skill uses, baseline controls per area, Type I vs Type II evidence, populations and sampling, and subservice organisations
|
|
81
|
+
- [`templates/evidence-map.csv`](templates/evidence-map.csv): the CSV columns with one annotated row
|
|
82
|
+
- [`examples/northwind-type2-security.md`](examples/northwind-type2-security.md): worked example, a fictional SaaS company preparing for its first Type II
|
|
83
|
+
|
|
84
|
+
## Quality bar
|
|
85
|
+
|
|
86
|
+
- **Every criterion in scope has a control or is listed as a gap.** The coverage table shows it.
|
|
87
|
+
- **Every control is written as who, what, how often, with what record.** No adjectives in place of a mechanism.
|
|
88
|
+
- **Evidence is specific to the report type:** Type I names design evidence; Type II names the population, its source system, and the per-sample record.
|
|
89
|
+
- **Criteria IDs appear only where reference.md gives them;** anything else is described in words.
|
|
90
|
+
- **System, owner and frequency are filled for every row,** or the blank is itself a gap.
|
|
91
|
+
- **Status is honest:** a control with no record, or one that started mid-period, is not `in place`.
|
|
92
|
+
- **Proposed controls are marked `proposed`,** never presented as existing.
|
|
93
|
+
|
|
94
|
+
## When to use this skill
|
|
95
|
+
|
|
96
|
+
- ✅ Getting ready for a first SOC 2 Type I or Type II audit, or a readiness assessment
|
|
97
|
+
- ✅ Turning a controls spreadsheet into an evidence request list per owner
|
|
98
|
+
- ✅ Moving from Type I to Type II and working out what has to be recorded over the period
|
|
99
|
+
- ✅ Adding a category (Availability, Confidentiality) to an existing SOC 2 scope
|
|
100
|
+
|
|
101
|
+
## When NOT to use this skill
|
|
102
|
+
|
|
103
|
+
- ❌ Finding security threats in a system design: use `threat-model`
|
|
104
|
+
- ❌ Scoring business risks for a risk committee: use `risk-register`; SOC 2's risk assessment criteria expect one, and this map can point to it
|
|
105
|
+
- ❌ A GDPR assessment of one processing activity: use `dpia`
|
|
106
|
+
- ❌ Writing the security or reliability targets for a service: use `nfr-spec`
|
|
107
|
+
- ❌ A policy for staff use of AI tools: use `ai-usage-policy`
|
|
108
|
+
|
|
109
|
+
## Anti-patterns to avoid
|
|
110
|
+
|
|
111
|
+
- ❌ **Evidence named as a document type.** "Access review docs" tells the owner nothing. Name the export, the system and what each sample must show.
|
|
112
|
+
- ❌ **Type I evidence for a Type II audit.** One screenshot proves the setting existed on one day, not for twelve months.
|
|
113
|
+
- ❌ **Invented criteria numbers.** If you're not sure of the ID, describe the area; a wrong ID in an auditor-facing map costs credibility.
|
|
114
|
+
- ❌ **Owner "Engineering".** A team can't be chased for a missing export; name the role.
|
|
115
|
+
- ❌ **Policies as controls.** "We have an access control policy" is evidence of design, not a control that operates.
|
|
116
|
+
- ❌ **Ignoring the cloud provider.** Physical security and data centre controls are carved out to its SOC report; the map should say so and list the complementary controls.
|
|
117
|
+
- ❌ **Marking a mid-period control `in place`.** For Type II, the auditor tests the whole period; a control that began in month seven is a gap for months one to six.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"query": "Map our controls to the SOC 2 Trust Services Criteria and tell me what evidence the auditor will ask for",
|
|
4
|
+
"should_trigger": true
|
|
5
|
+
},
|
|
6
|
+
{
|
|
7
|
+
"query": "We're moving from SOC 2 Type I to Type II, what do we need to start recording?",
|
|
8
|
+
"should_trigger": true
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"query": "Build a SOC 2 gap analysis spreadsheet with owners and systems for each control",
|
|
12
|
+
"should_trigger": true
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"query": "What evidence do we need for CC6.2 and CC8.1 in our SOC 2 audit?",
|
|
16
|
+
"should_trigger": true
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"query": "Build a STRIDE threat model for our new data pipeline",
|
|
20
|
+
"should_trigger": false
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"query": "Create a risk register for the company with a heat map",
|
|
24
|
+
"should_trigger": false
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"query": "Write the non-functional requirements for availability and security of the billing service",
|
|
28
|
+
"should_trigger": false
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"query": "Draft a DPIA for our customer analytics feature",
|
|
32
|
+
"should_trigger": false
|
|
33
|
+
}
|
|
34
|
+
]
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill_name": "soc2-evidence-map",
|
|
3
|
+
"evals": [
|
|
4
|
+
{
|
|
5
|
+
"id": 1,
|
|
6
|
+
"prompt": "Acme Payments is going for SOC 2 Type II, Security and Availability, for 1 April to 30 September 2027. Controls today: Google Workspace SSO with MFA, joiners requested in Linear and approved by the hiring manager, leavers removed by IT 'usually the same day' with no ticket, GitHub PR reviews required on main, GCP Cloud SQL backups nightly, an uptime status page, PagerDuty on-call run by Priya Nair (SRE lead). Map our controls to the criteria, list the evidence the auditor will want, and show the gaps as a table and a CSV.",
|
|
7
|
+
"assertions": [
|
|
8
|
+
"Every common criterion and every Availability criterion in scope is either mapped to a control or listed as a gap",
|
|
9
|
+
"Each control is written as who does what, how often, and where it is recorded",
|
|
10
|
+
"Type II evidence names the full population, the system it is exported from, and what each sampled item must show",
|
|
11
|
+
"The leaver process with no ticket is marked partial or gap, not in place, because it leaves no per-sample record",
|
|
12
|
+
"Criteria IDs used are real AICPA TSC IDs (for example CC6.2, A1.2); areas without a confident ID are described in words",
|
|
13
|
+
"System, owner and frequency are given for every row, and owners not in the prompt are marked to confirm rather than invented",
|
|
14
|
+
"GCP is treated as a subservice organisation with its SOC report to collect",
|
|
15
|
+
"A CSV with one row per control-criterion pair is provided alongside the table"
|
|
16
|
+
]
|
|
17
|
+
}
|
|
18
|
+
]
|
|
19
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
control_id,control,criteria,category,type1_evidence,type2_population,type2_sample_record,system,owner,frequency,status,gap,remediation,due_date
|
|
2
|
+
GOV-01,Head of Security has the security policy set approved by the CEO each January; staff acknowledge at hire and annually in BambooHR,CC1.1,Security,Approved policy set with approval date; acknowledgement report,All active staff during the period,Acknowledgement date for each sampled person within 30 days of hire or of the annual cycle,BambooHR,Head of Security (Sam Ito),annually,partial,Policies approved in 2025 but no annual acknowledgement cycle has run,Run acknowledgement cycle before the period starts,2026-12-15
|
|
3
|
+
GOV-01,Head of Security has the security policy set approved by the CEO each January; staff acknowledge at hire and annually in BambooHR,CC5.3,Security,Approved policy set with approval date,All active staff during the period,Acknowledgement date for each sampled person,BambooHR,Head of Security (Sam Ito),annually,partial,As above,As above,2026-12-15
|
|
4
|
+
HR-01,People team runs background checks before each start date and tracks security training completion within 30 days of hire,CC1.4,Security,Background check procedure; training course configuration,All hires in the period from BambooHR,Background check completion date before start; training completion within 30 days,BambooHR; Certn; KnowBe4,People Ops Lead (Ola Brandt),per event,in place,,,
|
|
5
|
+
RISK-01,Head of Security runs an annual risk assessment and the leadership team reviews the register,CC3.2,Security,Risk assessment procedure; current risk register,The annual assessment in the period,Dated register and leadership meeting minutes showing review,Google Drive,Head of Security (Sam Ito),annually,gap,No risk assessment has been done,Run first risk assessment (see risk-register) and minute the review,2027-01-31
|
|
6
|
+
VEN-01,Head of Security assesses critical vendors at onboarding and reviews their SOC reports annually,CC9.2,Security,Vendor management procedure; vendor inventory,All critical vendors and all vendors onboarded in the period,Completed assessment or SOC report review per sampled vendor,Vanta,Head of Security (Sam Ito),annually,partial,Vendor inventory exists; no review records,Collect current SOC 2 reports for AWS and Okta and record reviews,2026-12-31
|
|
7
|
+
AC-01,Engineering managers grant access by Jira ticket with manager approval and role-based Okta groups,CC6.2,Security,Access procedure; Okta group-to-role mapping export; one approved ticket,All Okta accounts created in the period,Approved Jira ticket dated on or before account creation,Okta; Jira,IT Lead (Dev Rao),per event,in place,,,
|
|
8
|
+
AC-01,Engineering managers grant access by Jira ticket with manager approval and role-based Okta groups,CC6.3,Security,Okta group-to-role mapping export,All Okta accounts created in the period,Groups assigned match the role in the ticket,Okta; Jira,IT Lead (Dev Rao),per event,in place,,,
|
|
9
|
+
AC-02,IT removes all access within 24 hours of termination; BambooHR termination triggers Okta deactivation,CC6.2,Security,Offboarding procedure; BambooHR-Okta integration config; one example,All terminations in the period from BambooHR,Okta deactivation timestamp within 24 hours of termination date,BambooHR; Okta,IT Lead (Dev Rao),per event,in place,,,
|
|
10
|
+
AC-03,Engineering managers review AWS and GitHub admin access quarterly and record removals in Jira,CC6.3,Security,Review procedure; one completed review,The quarterly reviews in the period,Signed-off review list and Jira tickets for each removal,Jira; AWS IAM Identity Center; GitHub,VP Engineering (Kim Novak),quarterly,gap,Reviews happen ad hoc with no record,Schedule quarterly review ticket; first review before period start,2026-12-15
|
|
11
|
+
AC-04,IT enforces SSO with MFA for all workforce accounts in Okta,CC6.1,Security,Okta MFA policy export dated on the report date,Okta sign-on policy change log for the period,No policy change disabled MFA; MFA enrolment report at period end,Okta,IT Lead (Dev Rao),continuous,in place,,,
|
|
12
|
+
EP-01,IT manages all laptops in Kandji with disk encryption and malware protection enforced,CC6.8,Security,Kandji blueprint export; device compliance report,Device compliance reports for the period,Sampled devices show encryption and protection active,Kandji,IT Lead (Dev Rao) [to confirm],continuous,partial,Four contractor laptops are not enrolled,Enrol or replace contractor devices,2026-11-30
|
|
13
|
+
VM-01,Platform team scans production weekly with Snyk and fixes critical findings within 14 days and high within 30,CC7.1,Security,Scan configuration; remediation SLA in the vulnerability procedure,All critical and high findings opened in the period,Fix date within SLA or an approved exception,Snyk; Jira,Platform Lead (Rui Costa),weekly,in place,,,
|
|
14
|
+
MON-01,Platform team routes Datadog security alerts to the PagerDuty on-call rotation,CC7.2,Security,Alert routing configuration; on-call schedule,All security alerts in the period,Each sampled alert acknowledged and triaged in PagerDuty,Datadog; PagerDuty,Platform Lead (Rui Costa) [to confirm],continuous,in place,,,
|
|
15
|
+
IR-01,Head of Security maintains an incident response plan tested annually by tabletop; incidents are ticketed with a post-incident review,CC7.4,Security,Approved IR plan; tabletop record,All security incidents in the period and the annual tabletop,Incident ticket with timeline and post-incident review,Jira; Google Drive,Head of Security (Sam Ito),per event,partial,Plan exists; never tested,Run a tabletop exercise in the period,2027-03-31
|
|
16
|
+
CHG-01,Engineers deploy to production only through GitHub pull requests with one approval from someone other than the author and passing CI,CC8.1,Security,Branch protection settings export; one merged pull request,All production deployments in the period from GitHub Actions,Pull request with a non-author approval and green checks,GitHub,VP Engineering (Kim Novak),per event,partial,Two admins can bypass branch protection,Remove bypass rights or log and review each bypass,2026-11-15
|
|
17
|
+
BC-01,Platform team runs automated RDS backups daily and tests a restore every six months,CC7.5,Security,Backup configuration; restore test procedure,The restore tests in the period,Restore test record with date and outcome,AWS RDS; Jira,Platform Lead (Rui Costa) [to confirm],semi-annually,proposed,Backups run; no restore test has been done or recorded,Schedule and record restore tests,2027-01-31
|