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,461 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Compute the mechanical parts of a backlog triage from a tracker export.
|
|
3
|
+
|
|
4
|
+
Reads a CSV or JSON export from Jira, Linear or GitHub Projects (or the JSON an MCP
|
|
5
|
+
tool returns) and reports, for open items only:
|
|
6
|
+
- duplicate candidates by title similarity (difflib), with the score
|
|
7
|
+
- items with no owner, and items with no acceptance criteria
|
|
8
|
+
- stale items (no update in N days)
|
|
9
|
+
- oversized items (estimate above a threshold, or size XL/XXL)
|
|
10
|
+
- mechanical priority conflicts (urgent but unowned or stale, duplicates at different
|
|
11
|
+
priorities, too much of the backlog at the top priority)
|
|
12
|
+
|
|
13
|
+
It writes a markdown findings report and, optionally, a CSV change list. Judgment
|
|
14
|
+
(which duplicate survives, the proposed ordering) is left to the person or agent
|
|
15
|
+
reading the report. Stdlib only; runs on Python 3.9+.
|
|
16
|
+
|
|
17
|
+
Usage:
|
|
18
|
+
python3 triage_backlog.py export.csv -o triage.md
|
|
19
|
+
python3 triage_backlog.py export.json --as-of 2026-10-01 --stale-days 45 \\
|
|
20
|
+
--changes changes.csv -o triage.md
|
|
21
|
+
python3 triage_backlog.py export.csv --map title="Issue summary" --map owner=Lead -o triage.md
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
from __future__ import annotations
|
|
25
|
+
|
|
26
|
+
import argparse
|
|
27
|
+
import csv
|
|
28
|
+
import io
|
|
29
|
+
import json
|
|
30
|
+
import re
|
|
31
|
+
import sys
|
|
32
|
+
from datetime import date, datetime, timezone
|
|
33
|
+
from difflib import SequenceMatcher
|
|
34
|
+
from pathlib import Path
|
|
35
|
+
|
|
36
|
+
# Canonical field -> header names seen in Jira, Linear and GitHub Projects exports.
|
|
37
|
+
# Matching is case-insensitive. Override any of them with --map field=Header.
|
|
38
|
+
ALIASES = {
|
|
39
|
+
"key": ["issue key", "key", "identifier", "id", "number", "issue id"],
|
|
40
|
+
"title": ["summary", "title", "name"],
|
|
41
|
+
"description": ["description", "body"],
|
|
42
|
+
"acceptance": ["acceptance criteria", "custom field (acceptance criteria)"],
|
|
43
|
+
"status": ["status", "state", "workflow state"],
|
|
44
|
+
"owner": ["assignee", "assignees", "owner"],
|
|
45
|
+
"priority": ["priority"],
|
|
46
|
+
"estimate": ["story points", "custom field (story points)", "story point estimate",
|
|
47
|
+
"estimate", "size", "points"],
|
|
48
|
+
"created": ["created", "created at", "createdat"],
|
|
49
|
+
"updated": ["updated", "updated at", "updatedat", "last updated"],
|
|
50
|
+
"resolved": ["resolved", "completed", "completed at", "completedat", "closed at",
|
|
51
|
+
"closedat", "resolutiondate"],
|
|
52
|
+
"labels": ["labels", "label"],
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
DONE_STATUSES = {"done", "closed", "resolved", "complete", "completed", "canceled", "cancelled",
|
|
56
|
+
"duplicate", "won't do", "wont do", "won't fix", "released", "shipped"}
|
|
57
|
+
|
|
58
|
+
# Lower rank = more urgent. Covers Jira, Linear (names and 0-4 numbers) and P0-P4 labels.
|
|
59
|
+
PRIORITY_RANK = {
|
|
60
|
+
"highest": 0, "blocker": 0, "urgent": 0, "p0": 0, "critical": 0,
|
|
61
|
+
"high": 1, "p1": 1, "major": 1,
|
|
62
|
+
"medium": 2, "p2": 2, "normal": 2,
|
|
63
|
+
"low": 3, "p3": 3, "minor": 3,
|
|
64
|
+
"lowest": 4, "p4": 4, "trivial": 4,
|
|
65
|
+
"no priority": 5, "none": 5,
|
|
66
|
+
}
|
|
67
|
+
LINEAR_NUMERIC = {"1": 0, "2": 1, "3": 2, "4": 3, "0": 5}
|
|
68
|
+
OVERSIZE_TSHIRT = {"xl", "xxl", "2xl", "3xl"}
|
|
69
|
+
|
|
70
|
+
AC_PATTERN = re.compile(
|
|
71
|
+
r"acceptance criteria|definition of done|\bAC\s*[:\-]|^\s*[-*]?\s*(given|when|then)\b|\bgiven\b[^\n]*\bthen\b|- \[[ x]\]",
|
|
72
|
+
re.I | re.M,
|
|
73
|
+
)
|
|
74
|
+
STOPWORDS = {"a", "an", "the", "to", "of", "in", "on", "for", "and", "or", "is", "be", "with",
|
|
75
|
+
"when", "should", "can", "as", "at", "by", "from", "it", "not"}
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def die(msg: str) -> None:
|
|
79
|
+
sys.stderr.write("error: " + msg + "\n")
|
|
80
|
+
sys.exit(2)
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
def flat_value(v) -> str:
|
|
84
|
+
"""Turn nested JSON values (users, statuses, label lists) into a plain string."""
|
|
85
|
+
if v is None:
|
|
86
|
+
return ""
|
|
87
|
+
if isinstance(v, dict):
|
|
88
|
+
for k in ("displayName", "name", "login", "title", "value", "key"):
|
|
89
|
+
if v.get(k) not in (None, ""):
|
|
90
|
+
return str(v[k])
|
|
91
|
+
if "nodes" in v:
|
|
92
|
+
return flat_value(v["nodes"])
|
|
93
|
+
return ""
|
|
94
|
+
if isinstance(v, list):
|
|
95
|
+
return ", ".join(s for s in (flat_value(x) for x in v) if s)
|
|
96
|
+
return str(v)
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def load_rows(path: Path) -> list:
|
|
100
|
+
suffix = path.suffix.lower()
|
|
101
|
+
try:
|
|
102
|
+
text = path.read_text(encoding="utf-8-sig")
|
|
103
|
+
except OSError as e:
|
|
104
|
+
die("cannot read {}: {}".format(path, e))
|
|
105
|
+
if suffix in (".csv", ".tsv"):
|
|
106
|
+
delim = "\t" if suffix == ".tsv" else ","
|
|
107
|
+
reader = csv.reader(io.StringIO(text, newline=""), delimiter=delim)
|
|
108
|
+
try:
|
|
109
|
+
header = next(reader)
|
|
110
|
+
except StopIteration:
|
|
111
|
+
die("{} is empty".format(path))
|
|
112
|
+
rows = []
|
|
113
|
+
for raw in reader:
|
|
114
|
+
if not any(c.strip() for c in raw):
|
|
115
|
+
continue
|
|
116
|
+
row = {}
|
|
117
|
+
# Jira repeats columns (Labels, Labels, ...); join repeats instead of overwriting.
|
|
118
|
+
for h, v in zip(header, raw):
|
|
119
|
+
h = h.strip()
|
|
120
|
+
if h in row and v.strip():
|
|
121
|
+
row[h] = (row[h] + ", " + v.strip()) if row[h] else v.strip()
|
|
122
|
+
elif h not in row:
|
|
123
|
+
row[h] = v.strip()
|
|
124
|
+
rows.append(row)
|
|
125
|
+
return rows
|
|
126
|
+
if suffix in (".json", ".jsonl", ".ndjson"):
|
|
127
|
+
try:
|
|
128
|
+
if suffix == ".json":
|
|
129
|
+
data = json.loads(text)
|
|
130
|
+
else:
|
|
131
|
+
data = [json.loads(line) for line in text.splitlines() if line.strip()]
|
|
132
|
+
except json.JSONDecodeError as e:
|
|
133
|
+
die("{} is not valid JSON: {}".format(path, e))
|
|
134
|
+
if isinstance(data, dict):
|
|
135
|
+
for k in ("issues", "items", "nodes", "data", "results"):
|
|
136
|
+
if isinstance(data.get(k), list):
|
|
137
|
+
data = data[k]
|
|
138
|
+
break
|
|
139
|
+
if not isinstance(data, list):
|
|
140
|
+
die("JSON must be a list of issues, or an object with an 'issues'/'items' list")
|
|
141
|
+
rows = []
|
|
142
|
+
for obj in data:
|
|
143
|
+
if not isinstance(obj, dict):
|
|
144
|
+
continue
|
|
145
|
+
merged = dict(obj)
|
|
146
|
+
for nest in ("fields", "content"): # Jira REST `fields`, gh project `content`
|
|
147
|
+
if isinstance(obj.get(nest), dict):
|
|
148
|
+
for k, v in obj[nest].items():
|
|
149
|
+
merged.setdefault(k, v)
|
|
150
|
+
rows.append({k: flat_value(v) for k, v in merged.items()})
|
|
151
|
+
return rows
|
|
152
|
+
die("unsupported file type {!r}: use .csv, .tsv, .json or .jsonl".format(suffix))
|
|
153
|
+
return []
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
def build_mapping(headers: list, overrides: dict) -> dict:
|
|
157
|
+
lower = {h.lower().strip(): h for h in headers}
|
|
158
|
+
mapping = {}
|
|
159
|
+
for field, names in ALIASES.items():
|
|
160
|
+
if field in overrides:
|
|
161
|
+
if overrides[field] not in headers:
|
|
162
|
+
die("--map {}={!r}: no such column. Columns are: {}".format(
|
|
163
|
+
field, overrides[field], ", ".join(headers)))
|
|
164
|
+
mapping[field] = overrides[field]
|
|
165
|
+
continue
|
|
166
|
+
for n in names:
|
|
167
|
+
if n in lower:
|
|
168
|
+
mapping[field] = lower[n]
|
|
169
|
+
break
|
|
170
|
+
return mapping
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
def parse_date(s: str):
|
|
174
|
+
s = (s or "").strip()
|
|
175
|
+
if not s:
|
|
176
|
+
return None
|
|
177
|
+
s2 = s[:-1] + "+00:00" if s.endswith("Z") else s
|
|
178
|
+
try:
|
|
179
|
+
return datetime.fromisoformat(s2).date()
|
|
180
|
+
except ValueError:
|
|
181
|
+
pass
|
|
182
|
+
for fmt in ("%d/%b/%y %I:%M %p", "%d/%b/%Y %I:%M %p", "%Y-%m-%d %H:%M", "%m/%d/%Y",
|
|
183
|
+
"%d/%m/%Y", "%d/%b/%y", "%b %d, %Y"):
|
|
184
|
+
try:
|
|
185
|
+
return datetime.strptime(s, fmt).date()
|
|
186
|
+
except ValueError:
|
|
187
|
+
continue
|
|
188
|
+
return None
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
def priority_rank(p: str):
|
|
192
|
+
p = (p or "").strip().lower()
|
|
193
|
+
if not p:
|
|
194
|
+
return None
|
|
195
|
+
if p in LINEAR_NUMERIC:
|
|
196
|
+
return LINEAR_NUMERIC[p]
|
|
197
|
+
return PRIORITY_RANK.get(p)
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
def norm_title(t: str) -> str:
|
|
201
|
+
t = re.sub(r"[^a-z0-9 ]+", " ", (t or "").lower())
|
|
202
|
+
return " ".join(w for w in t.split() if w not in STOPWORDS)
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
def oversized(est: str, max_est: float):
|
|
206
|
+
e = (est or "").strip()
|
|
207
|
+
if not e:
|
|
208
|
+
return None
|
|
209
|
+
if e.lower() in OVERSIZE_TSHIRT:
|
|
210
|
+
return "size " + e
|
|
211
|
+
try:
|
|
212
|
+
n = float(e)
|
|
213
|
+
except ValueError:
|
|
214
|
+
return None
|
|
215
|
+
if n > max_est:
|
|
216
|
+
return "estimate {:g} > {:g}".format(n, max_est)
|
|
217
|
+
return None
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
def main(argv=None) -> int:
|
|
221
|
+
ap = argparse.ArgumentParser(description="Mechanical backlog triage from a tracker export.")
|
|
222
|
+
ap.add_argument("export", type=Path, help="CSV, TSV, JSON or JSONL export")
|
|
223
|
+
ap.add_argument("-o", "--output", type=Path, help="markdown report path (default: stdout)")
|
|
224
|
+
ap.add_argument("--changes", type=Path, help="also write a CSV change list here")
|
|
225
|
+
ap.add_argument("--as-of", help="date to measure staleness from, YYYY-MM-DD (default: today)")
|
|
226
|
+
ap.add_argument("--stale-days", type=int, default=30, help="no update in this many days = stale (30)")
|
|
227
|
+
ap.add_argument("--similarity", type=float, default=0.75,
|
|
228
|
+
help="title similarity 0-1 to flag a duplicate pair (0.75)")
|
|
229
|
+
ap.add_argument("--max-estimate", type=float, default=8,
|
|
230
|
+
help="estimate above this = oversized (8)")
|
|
231
|
+
ap.add_argument("--inflation-pct", type=float, default=25,
|
|
232
|
+
help="flag when more than this %% of open items sit at the top priority (25)")
|
|
233
|
+
ap.add_argument("--map", action="append", default=[], metavar="FIELD=Column",
|
|
234
|
+
help="map a field to a column name; fields: " + ", ".join(ALIASES))
|
|
235
|
+
args = ap.parse_args(argv)
|
|
236
|
+
|
|
237
|
+
if not 0 < args.similarity <= 1:
|
|
238
|
+
die("--similarity must be between 0 and 1")
|
|
239
|
+
overrides = {}
|
|
240
|
+
for m in args.map:
|
|
241
|
+
if "=" not in m:
|
|
242
|
+
die("--map takes FIELD=Column, got {!r}".format(m))
|
|
243
|
+
k, v = m.split("=", 1)
|
|
244
|
+
if k not in ALIASES:
|
|
245
|
+
die("--map: unknown field {!r}; use one of {}".format(k, ", ".join(ALIASES)))
|
|
246
|
+
overrides[k] = v
|
|
247
|
+
as_of = date.today() if not args.as_of else parse_date(args.as_of)
|
|
248
|
+
if as_of is None:
|
|
249
|
+
die("--as-of must be YYYY-MM-DD")
|
|
250
|
+
|
|
251
|
+
if not args.export.exists():
|
|
252
|
+
die("{} does not exist".format(args.export))
|
|
253
|
+
rows = load_rows(args.export)
|
|
254
|
+
if not rows:
|
|
255
|
+
die("{} has no issues in it".format(args.export))
|
|
256
|
+
headers = []
|
|
257
|
+
for r in rows:
|
|
258
|
+
for h in r:
|
|
259
|
+
if h not in headers:
|
|
260
|
+
headers.append(h)
|
|
261
|
+
mp = build_mapping(headers, overrides)
|
|
262
|
+
for required in ("title",):
|
|
263
|
+
if required not in mp:
|
|
264
|
+
die("no title column found. Columns are: {}. Use --map title=<Column>".format(
|
|
265
|
+
", ".join(headers)))
|
|
266
|
+
|
|
267
|
+
def g(row, field):
|
|
268
|
+
col = mp.get(field)
|
|
269
|
+
return (row.get(col) or "").strip() if col else ""
|
|
270
|
+
|
|
271
|
+
items = []
|
|
272
|
+
for i, r in enumerate(rows, 1):
|
|
273
|
+
key = g(r, "key") or "row-{}".format(i)
|
|
274
|
+
status = g(r, "status")
|
|
275
|
+
done = status.lower() in DONE_STATUSES or bool(g(r, "resolved"))
|
|
276
|
+
items.append({
|
|
277
|
+
"key": key, "title": g(r, "title"), "status": status or "(none)", "done": done,
|
|
278
|
+
"owner": g(r, "owner"), "priority": g(r, "priority"),
|
|
279
|
+
"rank": priority_rank(g(r, "priority")), "estimate": g(r, "estimate"),
|
|
280
|
+
"updated": parse_date(g(r, "updated")) or parse_date(g(r, "created")),
|
|
281
|
+
"has_ac": bool(g(r, "acceptance")) or bool(AC_PATTERN.search(g(r, "description"))),
|
|
282
|
+
"labels": g(r, "labels"),
|
|
283
|
+
})
|
|
284
|
+
open_items = [it for it in items if not it["done"]]
|
|
285
|
+
|
|
286
|
+
no_owner = [it for it in open_items if not it["owner"] or it["owner"].lower() in ("unassigned", "none")]
|
|
287
|
+
no_ac = [it for it in open_items if not it["has_ac"]]
|
|
288
|
+
no_date = [it for it in open_items if it["updated"] is None]
|
|
289
|
+
stale = []
|
|
290
|
+
for it in open_items:
|
|
291
|
+
if it["updated"] is not None:
|
|
292
|
+
age = (as_of - it["updated"]).days
|
|
293
|
+
if age > args.stale_days:
|
|
294
|
+
stale.append((age, it))
|
|
295
|
+
stale.sort(key=lambda x: -x[0])
|
|
296
|
+
big = [(oversized(it["estimate"], args.max_estimate), it) for it in open_items]
|
|
297
|
+
big = [(why, it) for why, it in big if why]
|
|
298
|
+
|
|
299
|
+
# Duplicate candidates: difflib ratio on normalised titles, with cheap prefilters.
|
|
300
|
+
dupes = []
|
|
301
|
+
normed = [(it, norm_title(it["title"])) for it in open_items]
|
|
302
|
+
for a in range(len(normed)):
|
|
303
|
+
ia, ta = normed[a]
|
|
304
|
+
if not ta:
|
|
305
|
+
continue
|
|
306
|
+
for b in range(a + 1, len(normed)):
|
|
307
|
+
ib, tb = normed[b]
|
|
308
|
+
if not tb:
|
|
309
|
+
continue
|
|
310
|
+
sm = SequenceMatcher(None, ta, tb)
|
|
311
|
+
if sm.real_quick_ratio() < args.similarity or sm.quick_ratio() < args.similarity:
|
|
312
|
+
continue
|
|
313
|
+
score = sm.ratio()
|
|
314
|
+
if score >= args.similarity:
|
|
315
|
+
shared = sorted(set(ta.split()) & set(tb.split()))
|
|
316
|
+
dupes.append((score, ia, ib, shared))
|
|
317
|
+
dupes.sort(key=lambda x: -x[0])
|
|
318
|
+
|
|
319
|
+
# Mechanical priority conflicts.
|
|
320
|
+
conflicts = []
|
|
321
|
+
stale_keys = {it["key"]: age for age, it in stale}
|
|
322
|
+
for it in open_items:
|
|
323
|
+
if it["rank"] is not None and it["rank"] <= 1:
|
|
324
|
+
if it in no_owner:
|
|
325
|
+
conflicts.append((it, "priority {} but no owner".format(it["priority"])))
|
|
326
|
+
if it["key"] in stale_keys:
|
|
327
|
+
conflicts.append((it, "priority {} but no update in {} days".format(
|
|
328
|
+
it["priority"], stale_keys[it["key"]])))
|
|
329
|
+
for score, ia, ib, _ in dupes:
|
|
330
|
+
if ia["priority"] and ib["priority"] and ia["rank"] != ib["rank"]:
|
|
331
|
+
conflicts.append((ia, "likely duplicate of {} but priority {} vs {}".format(
|
|
332
|
+
ib["key"], ia["priority"], ib["priority"])))
|
|
333
|
+
ranked = [it for it in open_items if it["rank"] is not None]
|
|
334
|
+
top = [it for it in ranked if it["rank"] == 0]
|
|
335
|
+
inflation = None
|
|
336
|
+
if ranked:
|
|
337
|
+
pct = 100.0 * len(top) / len(ranked)
|
|
338
|
+
if pct > args.inflation_pct:
|
|
339
|
+
inflation = "{} of {} prioritised open items ({:.0f}%) are at the top priority".format(
|
|
340
|
+
len(top), len(ranked), pct)
|
|
341
|
+
unknown_pri = sorted({it["priority"] for it in open_items if it["priority"] and it["rank"] is None})
|
|
342
|
+
|
|
343
|
+
# ---- report ----
|
|
344
|
+
L = []
|
|
345
|
+
L.append("# Backlog triage findings: {}".format(args.export.name))
|
|
346
|
+
L.append("")
|
|
347
|
+
L.append("As of {} · {} items in export · {} open · {} done or closed (skipped)".format(
|
|
348
|
+
as_of.isoformat(), len(items), len(open_items), len(items) - len(open_items)))
|
|
349
|
+
L.append("Thresholds: stale > {} days · similarity >= {} · oversized estimate > {:g}".format(
|
|
350
|
+
args.stale_days, args.similarity, args.max_estimate))
|
|
351
|
+
L.append("")
|
|
352
|
+
L.append("Columns used: " + ", ".join("{}={!r}".format(k, v) for k, v in mp.items()))
|
|
353
|
+
missing = [f for f in ("key", "owner", "priority", "estimate", "updated", "description") if f not in mp]
|
|
354
|
+
if missing:
|
|
355
|
+
L.append("Not found in export (checks that need them are skipped): " + ", ".join(missing))
|
|
356
|
+
L.append("")
|
|
357
|
+
L.append("| Check | Count |")
|
|
358
|
+
L.append("|---|---:|")
|
|
359
|
+
L.append("| Duplicate candidate pairs | {} |".format(len(dupes)))
|
|
360
|
+
L.append("| No owner | {} |".format(len(no_owner) if "owner" in mp else "n/a"))
|
|
361
|
+
L.append("| No acceptance criteria | {} |".format(len(no_ac) if ("description" in mp or "acceptance" in mp) else "n/a"))
|
|
362
|
+
L.append("| Stale (> {} days) | {} |".format(args.stale_days, len(stale) if "updated" in mp or "created" in mp else "n/a"))
|
|
363
|
+
L.append("| Oversized | {} |".format(len(big) if "estimate" in mp else "n/a"))
|
|
364
|
+
L.append("| Priority conflicts | {} |".format(len(conflicts) + (1 if inflation else 0)))
|
|
365
|
+
L.append("")
|
|
366
|
+
|
|
367
|
+
L.append("## Duplicate candidates")
|
|
368
|
+
L.append("")
|
|
369
|
+
if dupes:
|
|
370
|
+
L.append("| Pair | Score | Titles | Shared words |")
|
|
371
|
+
L.append("|---|---:|---|---|")
|
|
372
|
+
for score, ia, ib, shared in dupes:
|
|
373
|
+
L.append("| {} / {} | {:.2f} | {} / {} | {} |".format(
|
|
374
|
+
ia["key"], ib["key"], score, ia["title"], ib["title"], " ".join(shared) or "-"))
|
|
375
|
+
L.append("")
|
|
376
|
+
L.append("Title similarity only. Read both descriptions before merging.")
|
|
377
|
+
else:
|
|
378
|
+
L.append("None at this threshold.")
|
|
379
|
+
L.append("")
|
|
380
|
+
|
|
381
|
+
def item_table(title, rows_, extra_head, extra_fn):
|
|
382
|
+
L.append("## " + title)
|
|
383
|
+
L.append("")
|
|
384
|
+
if not rows_:
|
|
385
|
+
L.append("None.")
|
|
386
|
+
L.append("")
|
|
387
|
+
return
|
|
388
|
+
L.append("| Key | Title | Status | Priority | {} |".format(extra_head))
|
|
389
|
+
L.append("|---|---|---|---|---|")
|
|
390
|
+
for row_ in rows_:
|
|
391
|
+
it = row_[1] if isinstance(row_, tuple) else row_
|
|
392
|
+
L.append("| {} | {} | {} | {} | {} |".format(
|
|
393
|
+
it["key"], it["title"], it["status"], it["priority"] or "-", extra_fn(row_)))
|
|
394
|
+
L.append("")
|
|
395
|
+
|
|
396
|
+
if "owner" in mp:
|
|
397
|
+
item_table("No owner", no_owner, "Last update",
|
|
398
|
+
lambda it: it["updated"].isoformat() if it["updated"] else "-")
|
|
399
|
+
if "description" in mp or "acceptance" in mp:
|
|
400
|
+
item_table("No acceptance criteria", no_ac, "Owner", lambda it: it["owner"] or "-")
|
|
401
|
+
item_table("Stale (no update in more than {} days)".format(args.stale_days), stale,
|
|
402
|
+
"Days since update", lambda row_: str(row_[0]))
|
|
403
|
+
if no_date:
|
|
404
|
+
L.append("{} open items have no updated or created date, so staleness is unknown: {}".format(
|
|
405
|
+
len(no_date), ", ".join(it["key"] for it in no_date)))
|
|
406
|
+
L.append("")
|
|
407
|
+
if "estimate" in mp:
|
|
408
|
+
item_table("Oversized (split before scheduling)", big, "Why", lambda row_: row_[0])
|
|
409
|
+
|
|
410
|
+
L.append("## Priority conflicts")
|
|
411
|
+
L.append("")
|
|
412
|
+
if inflation:
|
|
413
|
+
L.append("- Priority inflation: " + inflation + ".")
|
|
414
|
+
for it, why in conflicts:
|
|
415
|
+
L.append("- {} ({}): {}".format(it["key"], it["title"], why))
|
|
416
|
+
if not conflicts and not inflation:
|
|
417
|
+
L.append("None found mechanically.")
|
|
418
|
+
if unknown_pri:
|
|
419
|
+
L.append("")
|
|
420
|
+
L.append("Priority values not recognised (not ranked): " + ", ".join(unknown_pri))
|
|
421
|
+
L.append("")
|
|
422
|
+
L.append("## Priority distribution (open items)")
|
|
423
|
+
L.append("")
|
|
424
|
+
dist = {}
|
|
425
|
+
for it in open_items:
|
|
426
|
+
dist[it["priority"] or "(none)"] = dist.get(it["priority"] or "(none)", 0) + 1
|
|
427
|
+
L.append("| Priority | Open items |")
|
|
428
|
+
L.append("|---|---:|")
|
|
429
|
+
for p, n in sorted(dist.items(), key=lambda kv: (priority_rank(kv[0]) if priority_rank(kv[0]) is not None else 9, kv[0])):
|
|
430
|
+
L.append("| {} | {} |".format(p, n))
|
|
431
|
+
L.append("")
|
|
432
|
+
|
|
433
|
+
report = "\n".join(L) + "\n"
|
|
434
|
+
if args.output:
|
|
435
|
+
args.output.write_text(report, encoding="utf-8")
|
|
436
|
+
sys.stderr.write("wrote {}\n".format(args.output))
|
|
437
|
+
else:
|
|
438
|
+
sys.stdout.write(report)
|
|
439
|
+
|
|
440
|
+
if args.changes:
|
|
441
|
+
with args.changes.open("w", newline="", encoding="utf-8") as f:
|
|
442
|
+
w = csv.writer(f)
|
|
443
|
+
w.writerow(["key", "action", "field", "proposed_value", "reason"])
|
|
444
|
+
for score, ia, ib, _ in dupes:
|
|
445
|
+
w.writerow([ib["key"], "confirm-duplicate", "status", "Duplicate of " + ia["key"],
|
|
446
|
+
"title similarity {:.2f} with {}".format(score, ia["key"])])
|
|
447
|
+
for it in no_owner:
|
|
448
|
+
w.writerow([it["key"], "assign-owner", "assignee", "", "open item with no owner"])
|
|
449
|
+
for it in no_ac:
|
|
450
|
+
w.writerow([it["key"], "add-acceptance-criteria", "description", "", "no acceptance criteria found"])
|
|
451
|
+
for age, it in stale:
|
|
452
|
+
w.writerow([it["key"], "confirm-or-close", "status", "",
|
|
453
|
+
"no update in {} days".format(age)])
|
|
454
|
+
for why, it in big:
|
|
455
|
+
w.writerow([it["key"], "split", "", "", why])
|
|
456
|
+
sys.stderr.write("wrote {}\n".format(args.changes))
|
|
457
|
+
return 0
|
|
458
|
+
|
|
459
|
+
|
|
460
|
+
if __name__ == "__main__":
|
|
461
|
+
sys.exit(main())
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Backlog triage template
|
|
2
|
+
|
|
3
|
+
Every count comes from the script output or a count you made from the export. Every verdict
|
|
4
|
+
(duplicate, priority change, position in the ordering) carries its reason.
|
|
5
|
+
|
|
6
|
+
```markdown
|
|
7
|
+
# Backlog triage: {team or project}, as of {YYYY-MM-DD}
|
|
8
|
+
|
|
9
|
+
{N} open items. {n} duplicate pairs, {n} with no owner, {n} with no acceptance criteria,
|
|
10
|
+
{n} stale (over {N} days), {n} oversized. {n} of {N} open items ({pct}%) are at {top priority}.
|
|
11
|
+
Checks skipped because the export lacked the column: {list, or "none"}.
|
|
12
|
+
|
|
13
|
+
## Duplicates (confirmed by reading both descriptions)
|
|
14
|
+
|
|
15
|
+
| Keep | Close | Why they're the same | Why this one survives |
|
|
16
|
+
|---|---|---|---|
|
|
17
|
+
| {key} | {key} | {the shared request, in one line} | {owner / criteria / evidence / recency} |
|
|
18
|
+
|
|
19
|
+
Rejected candidates (similar titles, different work): {key / key: why}, or "none".
|
|
20
|
+
|
|
21
|
+
## Proposed ordering (open, not yet started)
|
|
22
|
+
|
|
23
|
+
| # | Key | Title | Why here | Ready to pull? |
|
|
24
|
+
|---|---|---|---|---|
|
|
25
|
+
| 1 | {key} | {title} | {rule from the ordering method that placed it} | Yes / No: {what's missing} |
|
|
26
|
+
|
|
27
|
+
In progress and left where they are: {keys}.
|
|
28
|
+
|
|
29
|
+
## Priority conflicts to resolve
|
|
30
|
+
|
|
31
|
+
- **{conflict}.** {the facts from the export}. Proposal: {change}, unless {condition}.
|
|
32
|
+
|
|
33
|
+
## Change list
|
|
34
|
+
|
|
35
|
+
| Key | Change | Reason |
|
|
36
|
+
|---|---|---|
|
|
37
|
+
| {key(s)} | {close as duplicate of X / assign owner / add criteria / split with user-story-splitter / priority A → B (proposal) / confirm or close} | {fact from the export} |
|
|
38
|
+
|
|
39
|
+
## Questions before applying
|
|
40
|
+
|
|
41
|
+
1. {owner, date or priority the export can't answer}
|
|
42
|
+
```
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: team-status-report
|
|
3
|
+
description: Write a weekly team status report from tracker data (Jira, Linear or GitHub Projects, via CSV, JSON or an MCP tool) — shipped, in progress, blocked with the blocker and owner, slipped against plan, risks and asks — with every number computed from the data by a stdlib script, never estimated, and a RAG status that states the rule that set it. Use when the user wants a weekly status update, sprint report or stakeholder update from the tracker, or says "write this week's status report", "are we on track?".
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# team-status-report
|
|
7
|
+
|
|
8
|
+
You turn a tracker export into the status report a manager or steering group reads in two
|
|
9
|
+
minutes: what shipped, what's moving, what's stuck and on whom, what slipped against the plan,
|
|
10
|
+
what could go wrong next, and what you need from them. A script computes every count, so the
|
|
11
|
+
numbers are exact and the same next week. The RAG colour comes from a stated rule, not a mood.
|
|
12
|
+
Facts the tracker doesn't hold, such as what a blocker actually is, come from the user and are
|
|
13
|
+
marked as theirs.
|
|
14
|
+
|
|
15
|
+
## How to respond
|
|
16
|
+
|
|
17
|
+
1. **Ask once for what's missing.** Take what's been given and offer defaults:
|
|
18
|
+
|
|
19
|
+
> Before I write the report, send these. Anything you skip, I'll use the default shown:
|
|
20
|
+
> 1. **The export:** a CSV or JSON file, or which project or team to fetch via MCP.
|
|
21
|
+
> 2. **The period:** *Default: the last 7 days, ending yesterday.*
|
|
22
|
+
> 3. **The plan:** a list of keys, a sprint or cycle name, or *default: items due in the period.*
|
|
23
|
+
> 4. **Your RAG rule,** if the team has one. *Default: Red below 60% of plan or 2+ planned
|
|
24
|
+
> items blocked; Amber below 85%, any planned item blocked, or a High item slipped.*
|
|
25
|
+
> 5. **Who reads it,** and anything the tracker doesn't show: what each blocker is, dates
|
|
26
|
+
> other teams have promised, fixed deadlines.
|
|
27
|
+
|
|
28
|
+
Export routes per tracker are in [`reference.md`](reference.md).
|
|
29
|
+
|
|
30
|
+
2. **Run the script for the period.**
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
# Claude Code
|
|
34
|
+
python3 "${CLAUDE_SKILL_DIR}/scripts/status_counts.py" export.csv --from 2026-09-24 --to 2026-09-30 -o status-numbers.md --json status-numbers.json
|
|
35
|
+
# Other IDEs (from the skill folder)
|
|
36
|
+
python3 scripts/status_counts.py export.csv --from 2026-09-24 --to 2026-09-30 -o status-numbers.md --json status-numbers.json
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Add `--plan-file plan.txt` or `--sprint "Sprint 14"` to set the plan, and `--red-below`,
|
|
40
|
+
`--amber-below` or `--red-blocked` to match the team's RAG rule. If a column was mapped wrong,
|
|
41
|
+
rerun with `--map blocker="Blocked reason"`. The field-mapping table is in
|
|
42
|
+
[`reference.md`](reference.md).
|
|
43
|
+
|
|
44
|
+
3. **Check the buckets before you write.** Read the "Columns used" line and the data notes. If
|
|
45
|
+
a status your team uses fell into "in progress" by default, or done items have no resolved
|
|
46
|
+
date, fix the mapping or tell the user what that does to the numbers.
|
|
47
|
+
|
|
48
|
+
4. **Lead with the RAG and its rule.** State the colour, the condition that set it, and the
|
|
49
|
+
number: "Red. Rule: plan completion below 60%. We finished 4 of 8 items due (50%)." If there's
|
|
50
|
+
no plan, say the status reflects blockers only. If the user overrules the computed colour,
|
|
51
|
+
show both and the reason.
|
|
52
|
+
|
|
53
|
+
5. **Write shipped, slipped, blocked and in progress from the script's tables.** Rewrite titles
|
|
54
|
+
into plain words for the audience, but keep the keys. Each blocked item names its blocker and
|
|
55
|
+
its owner. If the blocker isn't recorded, write "blocker not recorded" and ask; don't guess.
|
|
56
|
+
Unplanned work that shipped is listed, and isn't added to the plan completion.
|
|
57
|
+
|
|
58
|
+
6. **Add risks and asks.** Start from the script's risk candidates and add the user's context.
|
|
59
|
+
Each risk says what it threatens and by when. Each ask names who, what and by when, and which
|
|
60
|
+
item it unblocks.
|
|
61
|
+
|
|
62
|
+
7. **Emit with [`templates/status-report.md`](templates/status-report.md).** Keep it to one
|
|
63
|
+
screen. Keep keys so readers can click through. Say what the report can't tell them (no
|
|
64
|
+
velocity without estimates, no new dates unless owners gave them).
|
|
65
|
+
|
|
66
|
+
**Non-interactive runs** (subagent, CI, headless): with no export and no tracker access, emit
|
|
67
|
+
`BLOCKED: need the tracker export (CSV or JSON) or tracker access, and the reporting period`
|
|
68
|
+
and stop. With an export, use the defaults above, list each assumption at the top, and write
|
|
69
|
+
"blocker not recorded" wherever the export lacks one.
|
|
70
|
+
|
|
71
|
+
## Useful references in this skill
|
|
72
|
+
|
|
73
|
+
- [`reference.md`](reference.md) — export routes, the field-mapping table for Jira, Linear and GitHub, bucket rules, plan sources, the RAG rule, what makes a risk and an ask
|
|
74
|
+
- [`templates/status-report.md`](templates/status-report.md) — the report skeleton
|
|
75
|
+
- [`scripts/status_counts.py`](scripts/status_counts.py) — the counts, plan vs actual and suggested RAG (stdlib, Python 3.9+)
|
|
76
|
+
- [`examples/northwind-weekly-status.md`](examples/northwind-weekly-status.md) — a 15-issue Jira export, the script's real output, and the finished report
|
|
77
|
+
- [`examples/northwind-week-40.csv`](examples/northwind-week-40.csv) — the sample export used in the example
|
|
78
|
+
|
|
79
|
+
## Quality bar
|
|
80
|
+
|
|
81
|
+
- **Every number is computed from the data,** by the script or a stated count. No "about", no "roughly half", no velocity the data can't support.
|
|
82
|
+
- **The RAG names its rule** and the number that triggered it. Green with no plan says so.
|
|
83
|
+
- **Blocked items name the blocker and the owner,** or say "not recorded".
|
|
84
|
+
- **Slipped is measured against a stated plan,** and unplanned work is shown separately, not folded into completion.
|
|
85
|
+
- **Facts from outside the tracker are attributed:** "3 Oct (security team, per user)".
|
|
86
|
+
- **Each ask has a who, a what and a when,** and points at the item it unblocks.
|
|
87
|
+
- **Nothing is invented:** no dates, causes, owners or blockers the export and the user didn't give.
|
|
88
|
+
|
|
89
|
+
## When to use this skill
|
|
90
|
+
|
|
91
|
+
- ✅ A weekly or fortnightly status update for a manager, a steering group or a client
|
|
92
|
+
- ✅ An end-of-sprint or end-of-cycle report against what was committed
|
|
93
|
+
- ✅ "Are we on track?" answered with numbers and a stated rule
|
|
94
|
+
- ✅ The same report every week, comparable because the counting doesn't change
|
|
95
|
+
|
|
96
|
+
## When NOT to use this skill
|
|
97
|
+
|
|
98
|
+
- ❌ Condensing a long document into a one-page summary for executives; use `exec-summary`
|
|
99
|
+
- ❌ Cleaning up the backlog itself (duplicates, stale items, ordering); use `backlog-triage`
|
|
100
|
+
- ❌ Recording a decision and its rationale; use `decision-log`
|
|
101
|
+
|
|
102
|
+
## Anti-patterns to avoid
|
|
103
|
+
|
|
104
|
+
- ❌ **"We're about 70% done."** Give planned-and-done of planned, from the script.
|
|
105
|
+
- ❌ **Amber by feel.** If no rule fired Amber, it isn't Amber. If the user wants Amber anyway, show the computed colour too.
|
|
106
|
+
- ❌ **"Blocked on infra."** Name the blocking item, the owner on our side, and what's expected when.
|
|
107
|
+
- ❌ **Counting unplanned work toward the plan** to make completion look better.
|
|
108
|
+
- ❌ **Inventing new dates for slipped items.** Leave them out until owners give them.
|
|
109
|
+
- ❌ **A status wall.** Twenty in-progress items listed in full. Count them; list the ones that matter.
|
|
110
|
+
- ❌ **Per-person scorecards.** WIP by owner is for spotting overload, not ranking people.
|
|
111
|
+
- ❌ **Showing the machinery.** The reply and the artifact are for the person who asked. Don't mention this skill, its files, templates, caps or internal terms, or that the run is non-interactive. Name another skill once, at the end, as a suggested next step, never inside the artifact.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"query": "Write this week's status report for the checkout team from the Jira export",
|
|
4
|
+
"should_trigger": true
|
|
5
|
+
},
|
|
6
|
+
{
|
|
7
|
+
"query": "Are we on track this sprint? Here's our Linear cycle export, give me shipped, blocked and slipped with a RAG",
|
|
8
|
+
"should_trigger": true
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"query": "Turn our GitHub project board into a weekly stakeholder update with risks and asks",
|
|
12
|
+
"should_trigger": true
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"query": "End-of-sprint report against what we committed: what shipped, what slipped, who's blocked",
|
|
16
|
+
"should_trigger": true
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"query": "Summarise this 30-page design doc into one page for the exec team",
|
|
20
|
+
"should_trigger": false
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"query": "Find the duplicates and stale tickets in our backlog export",
|
|
24
|
+
"should_trigger": false
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"query": "Record that we decided to delay Klarna to Q1, with the options we considered",
|
|
28
|
+
"should_trigger": false
|
|
29
|
+
}
|
|
30
|
+
]
|