@soleur/opencode 0.0.0-stage → 1.0.0
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.
- package/.claude-plugin/agents.manifest.json +476 -0
- package/.claude-plugin/plugin.json +42 -0
- package/README.md +44 -2
- package/agents/community/.gitkeep +0 -0
- package/agents/engineering/cto.md +87 -0
- package/agents/engineering/design/ddd-architect.md +95 -0
- package/agents/engineering/discovery/agent-finder.md +214 -0
- package/agents/engineering/discovery/functional-discovery.md +182 -0
- package/agents/engineering/infra/infra-security.md +151 -0
- package/agents/engineering/infra/platform-strategist.md +109 -0
- package/agents/engineering/infra/terraform-architect.md +171 -0
- package/agents/engineering/prompt-engineer.md +37 -0
- package/agents/engineering/research/best-practices-researcher.md +115 -0
- package/agents/engineering/research/framework-docs-researcher.md +93 -0
- package/agents/engineering/research/git-history-analyzer.md +53 -0
- package/agents/engineering/research/learnings-researcher.md +285 -0
- package/agents/engineering/research/repo-research-analyst.md +118 -0
- package/agents/engineering/review/agent-native-reviewer.md +279 -0
- package/agents/engineering/review/architecture-strategist.md +61 -0
- package/agents/engineering/review/code-quality-analyst.md +92 -0
- package/agents/engineering/review/code-simplicity-reviewer.md +109 -0
- package/agents/engineering/review/data-integrity-guardian.md +82 -0
- package/agents/engineering/review/data-migration-expert.md +98 -0
- package/agents/engineering/review/deployment-verification-agent.md +183 -0
- package/agents/engineering/review/dhh-rails-reviewer.md +46 -0
- package/agents/engineering/review/kieran-rails-reviewer.md +87 -0
- package/agents/engineering/review/legacy-code-expert.md +55 -0
- package/agents/engineering/review/observability-coverage-reviewer.md +147 -0
- package/agents/engineering/review/pattern-recognition-specialist.md +59 -0
- package/agents/engineering/review/performance-oracle.md +130 -0
- package/agents/engineering/review/security-sentinel.md +167 -0
- package/agents/engineering/review/semgrep-sast.md +36 -0
- package/agents/engineering/review/test-design-reviewer.md +150 -0
- package/agents/engineering/review/user-impact-reviewer.md +70 -0
- package/agents/engineering/workflow/pr-comment-resolver.md +69 -0
- package/agents/finance/budget-analyst.md +29 -0
- package/agents/finance/cfo.md +44 -0
- package/agents/finance/financial-reporter.md +30 -0
- package/agents/finance/revenue-analyst.md +30 -0
- package/agents/legal/clo.md +115 -0
- package/agents/legal/legal-compliance-auditor.md +110 -0
- package/agents/legal/legal-document-generator.md +134 -0
- package/agents/marketing/analytics-analyst.md +25 -0
- package/agents/marketing/brand-architect.md +181 -0
- package/agents/marketing/cmo.md +76 -0
- package/agents/marketing/conversion-optimizer.md +19 -0
- package/agents/marketing/copywriter.md +20 -0
- package/agents/marketing/fact-checker.md +70 -0
- package/agents/marketing/growth-strategist.md +145 -0
- package/agents/marketing/paid-media-strategist.md +28 -0
- package/agents/marketing/pricing-strategist.md +17 -0
- package/agents/marketing/programmatic-seo-specialist.md +25 -0
- package/agents/marketing/retention-strategist.md +23 -0
- package/agents/marketing/seo-aeo-analyst.md +164 -0
- package/agents/operations/coo.md +50 -0
- package/agents/operations/ops-advisor.md +78 -0
- package/agents/operations/ops-provisioner.md +101 -0
- package/agents/operations/ops-research.md +52 -0
- package/agents/operations/service-automator.md +278 -0
- package/agents/product/business-validator.md +206 -0
- package/agents/product/competitive-intelligence.md +89 -0
- package/agents/product/cpo.md +63 -0
- package/agents/product/design/ux-design-lead.md +209 -0
- package/agents/product/spec-flow-analyzer.md +122 -0
- package/agents/sales/cro.md +44 -0
- package/agents/sales/deal-architect.md +29 -0
- package/agents/sales/outbound-strategist.md +29 -0
- package/agents/sales/pipeline-analyst.md +29 -0
- package/agents/support/cco.md +48 -0
- package/agents/support/community-manager.md +570 -0
- package/agents/support/ticket-triage.md +70 -0
- package/bin/soleur-opencode.js +29 -0
- package/commands/go.md +659 -0
- package/commands/help.md +273 -0
- package/commands/sync.md +977 -0
- package/commands/version.md +103 -0
- package/hooks/antigravity-hooks.json +84 -0
- package/hooks/antigravity-session-start.sh +15 -0
- package/hooks/bare-root-cwd-guard.sh +131 -0
- package/hooks/browser-snapshot-credential-guard.sh +200 -0
- package/hooks/codex-session-start.sh +9 -0
- package/hooks/compaction-state.sh +525 -0
- package/hooks/destructive-command-guard.sh +1387 -0
- package/hooks/devin-session-start.sh +90 -0
- package/hooks/ext-filter-detect.sh +171 -0
- package/hooks/hooks.json +133 -0
- package/hooks/lib/hook-tool-kind.sh +24 -0
- package/hooks/lib/log-rotation.sh +176 -0
- package/hooks/lib/shell-argv.pl +576 -0
- package/hooks/memory-backstop.sh +1114 -0
- package/hooks/operator-stage-approval.sh +391 -0
- package/hooks/stop-hook.sh +367 -0
- package/hooks/unkept-promise-hook.sh +383 -0
- package/hooks/version-banner.sh +127 -0
- package/hooks/welcome-hook.sh +50 -0
- package/install.js +108 -0
- package/lib/agent-registry.ts +154 -0
- package/lib/c4-canonical-cli.mjs +34 -0
- package/lib/c4-canonical.mjs +46 -0
- package/lib/c4-from-components.ts +554 -0
- package/lib/go-routing.ts +81 -0
- package/lib/grok-inspect-contract.ts +311 -0
- package/lib/harness-model-map.ts +101 -0
- package/lib/harness-parity.ts +726 -0
- package/lib/harness-tool-map.ts +180 -0
- package/lib/harness.ts +716 -0
- package/lib/heartbeat-live-reconcile.ts +1153 -0
- package/lib/heartbeat-manifest.ts +342 -0
- package/lib/kb-coverage.ts +252 -0
- package/lib/pr-merge-poll.ts +103 -0
- package/lib/workflow-fidelity.ts +388 -0
- package/opencode/INSTRUCTIONS.md +152 -0
- package/opencode/agents/engineering/cto.md +10 -0
- package/opencode/agents/engineering/design/ddd-architect.md +10 -0
- package/opencode/agents/engineering/discovery/agent-finder.md +10 -0
- package/opencode/agents/engineering/discovery/functional-discovery.md +10 -0
- package/opencode/agents/engineering/infra/infra-security.md +10 -0
- package/opencode/agents/engineering/infra/platform-strategist.md +10 -0
- package/opencode/agents/engineering/infra/terraform-architect.md +10 -0
- package/opencode/agents/engineering/prompt-engineer.md +10 -0
- package/opencode/agents/engineering/research/best-practices-researcher.md +10 -0
- package/opencode/agents/engineering/research/framework-docs-researcher.md +10 -0
- package/opencode/agents/engineering/research/git-history-analyzer.md +10 -0
- package/opencode/agents/engineering/research/learnings-researcher.md +10 -0
- package/opencode/agents/engineering/research/repo-research-analyst.md +10 -0
- package/opencode/agents/engineering/review/agent-native-reviewer.md +10 -0
- package/opencode/agents/engineering/review/architecture-strategist.md +10 -0
- package/opencode/agents/engineering/review/code-quality-analyst.md +10 -0
- package/opencode/agents/engineering/review/code-simplicity-reviewer.md +10 -0
- package/opencode/agents/engineering/review/data-integrity-guardian.md +10 -0
- package/opencode/agents/engineering/review/data-migration-expert.md +10 -0
- package/opencode/agents/engineering/review/deployment-verification-agent.md +10 -0
- package/opencode/agents/engineering/review/dhh-rails-reviewer.md +10 -0
- package/opencode/agents/engineering/review/kieran-rails-reviewer.md +10 -0
- package/opencode/agents/engineering/review/legacy-code-expert.md +10 -0
- package/opencode/agents/engineering/review/observability-coverage-reviewer.md +10 -0
- package/opencode/agents/engineering/review/pattern-recognition-specialist.md +10 -0
- package/opencode/agents/engineering/review/performance-oracle.md +10 -0
- package/opencode/agents/engineering/review/security-sentinel.md +10 -0
- package/opencode/agents/engineering/review/semgrep-sast.md +10 -0
- package/opencode/agents/engineering/review/test-design-reviewer.md +10 -0
- package/opencode/agents/engineering/review/user-impact-reviewer.md +10 -0
- package/opencode/agents/engineering/workflow/pr-comment-resolver.md +10 -0
- package/opencode/agents/finance/budget-analyst.md +10 -0
- package/opencode/agents/finance/cfo.md +10 -0
- package/opencode/agents/finance/financial-reporter.md +10 -0
- package/opencode/agents/finance/revenue-analyst.md +10 -0
- package/opencode/agents/legal/clo.md +10 -0
- package/opencode/agents/legal/legal-compliance-auditor.md +10 -0
- package/opencode/agents/legal/legal-document-generator.md +10 -0
- package/opencode/agents/marketing/analytics-analyst.md +10 -0
- package/opencode/agents/marketing/brand-architect.md +10 -0
- package/opencode/agents/marketing/cmo.md +10 -0
- package/opencode/agents/marketing/conversion-optimizer.md +10 -0
- package/opencode/agents/marketing/copywriter.md +10 -0
- package/opencode/agents/marketing/fact-checker.md +10 -0
- package/opencode/agents/marketing/growth-strategist.md +10 -0
- package/opencode/agents/marketing/paid-media-strategist.md +10 -0
- package/opencode/agents/marketing/pricing-strategist.md +10 -0
- package/opencode/agents/marketing/programmatic-seo-specialist.md +10 -0
- package/opencode/agents/marketing/retention-strategist.md +10 -0
- package/opencode/agents/marketing/seo-aeo-analyst.md +10 -0
- package/opencode/agents/operations/coo.md +10 -0
- package/opencode/agents/operations/ops-advisor.md +10 -0
- package/opencode/agents/operations/ops-provisioner.md +10 -0
- package/opencode/agents/operations/ops-research.md +10 -0
- package/opencode/agents/operations/service-automator.md +10 -0
- package/opencode/agents/product/business-validator.md +10 -0
- package/opencode/agents/product/competitive-intelligence.md +10 -0
- package/opencode/agents/product/cpo.md +10 -0
- package/opencode/agents/product/design/ux-design-lead.md +10 -0
- package/opencode/agents/product/spec-flow-analyzer.md +10 -0
- package/opencode/agents/sales/cro.md +10 -0
- package/opencode/agents/sales/deal-architect.md +10 -0
- package/opencode/agents/sales/outbound-strategist.md +10 -0
- package/opencode/agents/sales/pipeline-analyst.md +10 -0
- package/opencode/agents/support/cco.md +10 -0
- package/opencode/agents/support/community-manager.md +10 -0
- package/opencode/agents/support/ticket-triage.md +10 -0
- package/opencode/commands/go.md +10 -0
- package/opencode/commands/help.md +10 -0
- package/opencode/commands/sync.md +10 -0
- package/opencode/commands/version.md +11 -0
- package/opencode/opencode.json +8 -0
- package/opencode/plugin.ts +493 -0
- package/package.json +36 -4
- package/scripts/admin-merge-ready.sh +545 -0
- package/scripts/admin-merge-ready.test.sh +753 -0
- package/scripts/affected-tests.sh +908 -0
- package/scripts/affected-tests.test.sh +1797 -0
- package/scripts/alpha-metrics.sh +78 -0
- package/scripts/alpha-metrics.test.sh +115 -0
- package/scripts/ancestor-signal-helpers.baseline.txt +16 -0
- package/scripts/audit-flag-flip.sh +107 -0
- package/scripts/check-red-on-main.sh +316 -0
- package/scripts/ci-head-verdict.sh +363 -0
- package/scripts/cloud-detect.sh +193 -0
- package/scripts/delegation-verify.sh +657 -0
- package/scripts/delegation-verify.test.sh +1424 -0
- package/scripts/deploy-arm.sh +475 -0
- package/scripts/domain-model-drift.sh +419 -0
- package/scripts/emit-decision.sh +144 -0
- package/scripts/emit-decision.test.sh +144 -0
- package/scripts/ext-filter-divergence-corpus.txt +15 -0
- package/scripts/ext-filter-divergence.sh +189 -0
- package/scripts/generate-c4-from-components.ts +442 -0
- package/scripts/grok-fidelity-gate.sh +68 -0
- package/scripts/grok-pre-push-gate.sh +232 -0
- package/scripts/harness-discovery-smoke.ts +906 -0
- package/scripts/harness-parity-census.ts +92 -0
- package/scripts/inngest-luks-alert-armed-probe.ts +29 -0
- package/scripts/install-opencode-adapter.ts +520 -0
- package/scripts/lib/affected-tests/common.sh +365 -0
- package/scripts/lib/affected-tests/go.sh +157 -0
- package/scripts/lib/affected-tests/js.sh +188 -0
- package/scripts/lib/affected-tests/nx-turbo.sh +98 -0
- package/scripts/lib/affected-tests/python.sh +185 -0
- package/scripts/lib/context-sanitize.sh +49 -0
- package/scripts/lib/domain-model-lib.sh +180 -0
- package/scripts/lib/ext-filter-grammar.tsv +34 -0
- package/scripts/lib/operator-script.sh +1236 -0
- package/scripts/lib/proc.sh +580 -0
- package/scripts/lib/session-state.sh +748 -0
- package/scripts/lib/tmp-classify.sh +843 -0
- package/scripts/lib/wrapper-boundary.sh +47 -0
- package/scripts/lint-ratchet.py +1547 -0
- package/scripts/monitor-pr-checks.sh +441 -0
- package/scripts/pipeline-tally.sh +756 -0
- package/scripts/pipeline-tally.test.sh +740 -0
- package/scripts/plugin-version.sh +528 -0
- package/scripts/precommit-guard.sh +113 -0
- package/scripts/precommit-guard.test.sh +254 -0
- package/scripts/reconcile-live-heartbeats.ts +705 -0
- package/scripts/render-c4-model.sh +217 -0
- package/scripts/resolve-git-root.sh +55 -0
- package/scripts/resolve-regenerable-conflicts.sh +363 -0
- package/scripts/resolve-regenerable-conflicts.test.sh +780 -0
- package/scripts/ruff-requirements.txt +22 -0
- package/scripts/run-in-pid-namespace.sh +98 -0
- package/scripts/run-in-pid-namespace.test.sh +290 -0
- package/scripts/scan-ancestor-signal-helpers.py +556 -0
- package/scripts/scan-ancestor-signal-helpers.test.sh +670 -0
- package/scripts/setup-ralph-loop.sh +238 -0
- package/scripts/sync-cursor-name-map.ts +316 -0
- package/scripts/sync-grok-agent-compat.ts +188 -0
- package/scripts/sync-npm-package.ts +178 -0
- package/scripts/sync-opencode-adapter.ts +479 -0
- package/scripts/sync-pr-behind.sh +534 -0
- package/scripts/sync-pr-behind.test.sh +252 -0
- package/scripts/taste-profile-update.sh +180 -0
- package/scripts/taste-profile-update.test.sh +167 -0
- package/scripts/write-budget-marker.sh +23 -0
- package/scripts/write-kb-coverage.ts +113 -0
- package/skills/admin-ip-refresh/SKILL.md +81 -0
- package/skills/admin-ip-refresh/references/admin-ip-refresh-procedure.md +201 -0
- package/skills/agent-browser/SKILL.md +698 -0
- package/skills/agent-browser/scripts/playwright-mcp-profile-slot.sh +304 -0
- package/skills/agent-browser/scripts/playwright-mcp-redact-proxy.py +964 -0
- package/skills/agent-browser/scripts/redact-a11y-snapshot.py +443 -0
- package/skills/agent-browser/test/fixtures/capture-playwright-mcp-fixtures.py +217 -0
- package/skills/agent-browser/test/fixtures/fake-passthrough-proxy.py +24 -0
- package/skills/agent-browser/test/fixtures/fake-playwright-mcp.py +131 -0
- package/skills/agent-browser/test/fixtures/make-proxy-mutant.py +48 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/dialog-link-injection.json +10 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/empty-content.json +5 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/error-and-result.json +4 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/error-code-bool.json +6 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/error-code-string.json +6 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/error-message-tree.json +6 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/error-no-data.json +6 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/error-string.json +4 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/error-with-data.json +9 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/evaluate-escaped-object.json +10 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/invalid-utf8.json +4 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/link-result.json +10 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/list-two-results.json +6 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/meta-in-result.json +13 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/no-content.json +5 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/quoted-key.json +10 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/resource-block.json +18 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/result-and-method.json +11 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/result-string.json +3 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/run-code-escaped-one-row.json +10 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/run-code-escaped.json +10 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/structured-content.json +13 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/tools-list-no-tools.json +5 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/tree-no-credential.json +10 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/two-text-blocks.json +14 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/unparsable-line.json +3 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/value-contains-brace.json +10 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/value-contains-link-substring.json +10 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/close.json +12 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/evaluate.json +12 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/find.json +12 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/framing.json +6 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/initialize.json +14 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/navigate-link.json +12 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/navigate.json +12 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/roots-list-request.json +5 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/screenshot.json +17 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/snapshot-filename.json +12 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/snapshot-meta-json.json +12 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/snapshot-meta-raw.json +12 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/snapshot.json +12 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/tools-list.json +827 -0
- package/skills/agent-browser/test/fixtures/proxy-session-driver.py +138 -0
- package/skills/agent-browser/test/fixtures/session-facts.py +102 -0
- package/skills/agent-browser/test/playwright-mcp-lifetime.test.sh +1620 -0
- package/skills/agent-browser/test/playwright-mcp-redact-proxy.test.sh +1599 -0
- package/skills/agent-browser/test/redact-a11y-snapshot.test.sh +527 -0
- package/skills/agent-native-architecture/SKILL.md +479 -0
- package/skills/agent-native-architecture/references/action-parity-discipline.md +430 -0
- package/skills/agent-native-architecture/references/agent-execution-patterns.md +483 -0
- package/skills/agent-native-architecture/references/agent-native-testing.md +605 -0
- package/skills/agent-native-architecture/references/architecture-patterns.md +493 -0
- package/skills/agent-native-architecture/references/dynamic-context-injection.md +358 -0
- package/skills/agent-native-architecture/references/files-universal-interface.md +314 -0
- package/skills/agent-native-architecture/references/from-primitives-to-domain-tools.md +381 -0
- package/skills/agent-native-architecture/references/mcp-tool-design.md +524 -0
- package/skills/agent-native-architecture/references/mobile-patterns.md +897 -0
- package/skills/agent-native-architecture/references/product-implications.md +478 -0
- package/skills/agent-native-architecture/references/refactoring-to-prompt-native.md +342 -0
- package/skills/agent-native-architecture/references/self-modification.md +294 -0
- package/skills/agent-native-architecture/references/shared-workspace-architecture.md +700 -0
- package/skills/agent-native-architecture/references/system-prompt-design.md +263 -0
- package/skills/agent-native-audit/SKILL.md +300 -0
- package/skills/agent-native-audit/workflows/agent-native-audit.workflow.js +423 -0
- package/skills/andrew-kane-gem-writer/SKILL.md +189 -0
- package/skills/andrew-kane-gem-writer/references/database-adapters.md +231 -0
- package/skills/andrew-kane-gem-writer/references/module-organization.md +121 -0
- package/skills/andrew-kane-gem-writer/references/rails-integration.md +183 -0
- package/skills/andrew-kane-gem-writer/references/resources.md +126 -0
- package/skills/andrew-kane-gem-writer/references/testing-patterns.md +261 -0
- package/skills/architecture/SKILL.md +436 -0
- package/skills/architecture/references/adr-template.md +154 -0
- package/skills/architecture/references/likec4-reference.md +136 -0
- package/skills/architecture/references/nfr-reference.md +126 -0
- package/skills/archive-kb/SKILL.md +86 -0
- package/skills/archive-kb/scripts/archive-kb.sh +300 -0
- package/skills/archive-kb/test/archive-kb-partial-run.test.sh +276 -0
- package/skills/atdd-developer/SKILL.md +65 -0
- package/skills/brainstorm/SKILL.md +701 -0
- package/skills/brainstorm/references/brainstorm-brand-workshop.md +153 -0
- package/skills/brainstorm/references/brainstorm-domain-config.md +63 -0
- package/skills/brainstorm/references/brainstorm-validation-workshop.md +65 -0
- package/skills/brainstorm/references/ui-surface-terms.md +42 -0
- package/skills/brainstorm-techniques/SKILL.md +231 -0
- package/skills/brainstorm-techniques/references/decision-principles.md +150 -0
- package/skills/brainstorm-techniques/references/phase-boundaries.md +103 -0
- package/skills/brainstorm-techniques/references/standing-delegation.md +407 -0
- package/skills/brainstorm-techniques/references/technical-ruling-delegation.md +174 -0
- package/skills/campaign-calendar/SKILL.md +145 -0
- package/skills/cf-token-scope/SKILL.md +164 -0
- package/skills/cf-token-scope/references/widen-playbook.md +114 -0
- package/skills/cf-token-scope/scripts/cf-token-scope.sh +253 -0
- package/skills/changelog/SKILL.md +142 -0
- package/skills/code-to-prd/SKILL.md +66 -0
- package/skills/code-to-prd/references/banner-template.md +12 -0
- package/skills/code-to-prd/references/prd-template.md +41 -0
- package/skills/code-to-prd/scripts/code-to-prd.sh +634 -0
- package/skills/code-to-prd/test/code-to-prd.test.sh +447 -0
- package/skills/code-to-prd/test/fixture/.env.example +7 -0
- package/skills/code-to-prd/test/fixture/app/about/page.tsx +11 -0
- package/skills/code-to-prd/test/fixture/app/api/health/route.ts +10 -0
- package/skills/code-to-prd/test/fixture/app/page.tsx +14 -0
- package/skills/code-to-prd/test/fixture/next.config.mjs +3 -0
- package/skills/code-to-prd/test/fixture/package.json +6 -0
- package/skills/cohort-status/SKILL.md +62 -0
- package/skills/community/SKILL.md +210 -0
- package/skills/community/scripts/bsky-community.sh +644 -0
- package/skills/community/scripts/bsky-setup.sh +631 -0
- package/skills/community/scripts/community-router.sh +93 -0
- package/skills/community/scripts/discord-community.sh +487 -0
- package/skills/community/scripts/discord-setup.sh +784 -0
- package/skills/community/scripts/github-community.sh +706 -0
- package/skills/community/scripts/hn-community.sh +233 -0
- package/skills/community/scripts/lib/hmac-sha1-b64.sh +126 -0
- package/skills/community/scripts/linkedin-community.sh +750 -0
- package/skills/community/scripts/linkedin-setup.sh +758 -0
- package/skills/community/scripts/x-community.sh +890 -0
- package/skills/community/scripts/x-setup.sh +713 -0
- package/skills/community/test/community-argv.test.sh +2922 -0
- package/skills/community/test/github-community.test.sh +981 -0
- package/skills/competitive-analysis/SKILL.md +69 -0
- package/skills/competitive-analysis/references/peer-plugin-audit.md +218 -0
- package/skills/compound/SKILL.md +673 -0
- package/skills/compound/scripts/token-efficiency-report.sh +334 -0
- package/skills/compound/test/phase-16.test.sh +379 -0
- package/skills/compound-capture/SKILL.md +791 -0
- package/skills/compound-capture/assets/critical-pattern-template.md +37 -0
- package/skills/compound-capture/assets/resolution-template.md +116 -0
- package/skills/compound-capture/references/yaml-schema.md +67 -0
- package/skills/compound-capture/schema.yaml +181 -0
- package/skills/constraint-scaffold/SKILL.md +175 -0
- package/skills/constraint-scaffold/references/boundary-readme.template +35 -0
- package/skills/constraint-scaffold/references/constraint-gates-workflow.template +69 -0
- package/skills/constraint-scaffold/references/depcruise-config.template +230 -0
- package/skills/constraint-scaffold/references/fix-constraints-stage-a.template +240 -0
- package/skills/constraint-scaffold/references/fix-constraints-stage-b.template +313 -0
- package/skills/constraint-scaffold/references/shared-runner.template +135 -0
- package/skills/constraint-scaffold/scripts/constraint-scaffold.sh +589 -0
- package/skills/constraint-scaffold/test/bite-proof.test.sh +1338 -0
- package/skills/constraint-scaffold/test/boundary.test.sh +734 -0
- package/skills/constraint-scaffold/test/emit-fix-constraints.test.sh +193 -0
- package/skills/constraint-scaffold/test/generator.test.sh +93 -0
- package/skills/constraint-scaffold/test/parity.test.sh +285 -0
- package/skills/content-writer/SKILL.md +242 -0
- package/skills/content-writer/scripts/blog-jargon-scan.sh +42 -0
- package/skills/cron-delete/SKILL.md +56 -0
- package/skills/cron-list/SKILL.md +54 -0
- package/skills/deepen-plan/SKILL.md +937 -0
- package/skills/deepen-plan/workflows/deepen-plan.workflow.js +488 -0
- package/skills/deploy/SKILL.md +115 -0
- package/skills/deploy/references/hetzner-setup.md +65 -0
- package/skills/deploy/scripts/deploy.sh +37 -0
- package/skills/deploy-docs/SKILL.md +95 -0
- package/skills/dhh-rails-style/SKILL.md +203 -0
- package/skills/dhh-rails-style/references/architecture.md +717 -0
- package/skills/dhh-rails-style/references/controllers.md +323 -0
- package/skills/dhh-rails-style/references/frontend.md +556 -0
- package/skills/dhh-rails-style/references/gems.md +316 -0
- package/skills/dhh-rails-style/references/models.md +388 -0
- package/skills/dhh-rails-style/references/testing.md +354 -0
- package/skills/discord-content/SKILL.md +126 -0
- package/skills/docs-site/SKILL.md +214 -0
- package/skills/drain-labeled-backlog/SKILL.md +203 -0
- package/skills/drain-labeled-backlog/scripts/group-by-area.sh +208 -0
- package/skills/drain-labeled-backlog/workflows/drain-labeled-backlog.workflow.js +433 -0
- package/skills/drain-prs/SKILL.md +142 -0
- package/skills/drain-prs/scripts/triage-prs.sh +192 -0
- package/skills/drain-prs/test/argv-ceiling.test.sh +183 -0
- package/skills/dspy-ruby/SKILL.md +634 -0
- package/skills/dspy-ruby/assets/config-template.rb +359 -0
- package/skills/dspy-ruby/assets/module-template.rb +326 -0
- package/skills/dspy-ruby/assets/signature-template.rb +143 -0
- package/skills/dspy-ruby/references/core-concepts.md +268 -0
- package/skills/dspy-ruby/references/optimization.md +623 -0
- package/skills/dspy-ruby/references/providers.md +335 -0
- package/skills/eval-harness/README.md +194 -0
- package/skills/eval-harness/SKILL.md +157 -0
- package/skills/eval-harness/enums/go-routes.json +13 -0
- package/skills/eval-harness/enums/incident-threshold.json +5 -0
- package/skills/eval-harness/enums/lane.json +5 -0
- package/skills/eval-harness/enums/tool-selection.json +20 -0
- package/skills/eval-harness/enums/triage-levels.json +5 -0
- package/skills/eval-harness/gated-skills.json +34 -0
- package/skills/eval-harness/models.generated.json +5 -0
- package/skills/eval-harness/promptfooconfig-go-routing.yaml +35 -0
- package/skills/eval-harness/promptfooconfig-incident-threshold.yaml +32 -0
- package/skills/eval-harness/promptfooconfig-lane-inference.yaml +33 -0
- package/skills/eval-harness/promptfooconfig-ticket-triage.yaml +34 -0
- package/skills/eval-harness/promptfooconfig-tool-selection.yaml +33 -0
- package/skills/eval-harness/prompts/go-baseline.txt +6 -0
- package/skills/eval-harness/prompts/go-skill.txt +21 -0
- package/skills/eval-harness/prompts/incident-threshold-baseline.txt +6 -0
- package/skills/eval-harness/prompts/incident-threshold-skill.txt +12 -0
- package/skills/eval-harness/prompts/lane-inference-baseline.txt +6 -0
- package/skills/eval-harness/prompts/lane-inference-skill.txt +15 -0
- package/skills/eval-harness/prompts/tool-selection-baseline.txt +19 -0
- package/skills/eval-harness/prompts/tool-selection-skill.txt +22 -0
- package/skills/eval-harness/prompts/triage-baseline.txt +7 -0
- package/skills/eval-harness/prompts/triage-skill.txt +10 -0
- package/skills/eval-harness/scripts/eval-gate.cjs +318 -0
- package/skills/eval-harness/scripts/extract-block.cjs +87 -0
- package/skills/eval-harness/scripts/gate-classification.cjs +28 -0
- package/skills/eval-harness/scripts/gen-models.sh +41 -0
- package/skills/eval-harness/scripts/gen-skill-prompt.cjs +177 -0
- package/skills/eval-harness/scripts/measure-classification.cjs +30 -0
- package/skills/eval-harness/scripts/parse-label.cjs +93 -0
- package/skills/eval-harness/scripts/verdict.cjs +132 -0
- package/skills/eval-harness/tasks/go-routing.jsonl +8 -0
- package/skills/eval-harness/tasks/incident-threshold.jsonl +7 -0
- package/skills/eval-harness/tasks/lane-inference.jsonl +7 -0
- package/skills/eval-harness/tasks/ticket-triage.jsonl +6 -0
- package/skills/eval-harness/tasks/tool-selection.jsonl +15 -0
- package/skills/eval-harness/test/eval-gate.test.sh +132 -0
- package/skills/eval-harness/test/extract-block.test.sh +87 -0
- package/skills/eval-harness/test/gate-classification.test.sh +77 -0
- package/skills/eval-harness/test/gen-models.test.sh +75 -0
- package/skills/eval-harness/test/measure-classification.test.sh +74 -0
- package/skills/eval-harness/test/parse-label.test.sh +129 -0
- package/skills/eval-harness/test/registry-completeness.test.sh +109 -0
- package/skills/eval-harness/test/verdict.test.sh +123 -0
- package/skills/every-style-editor/SKILL.md +142 -0
- package/skills/every-style-editor/references/EVERY_WRITE_STYLE.md +529 -0
- package/skills/feature-tweet/SKILL.md +199 -0
- package/skills/feature-video/SKILL.md +412 -0
- package/skills/feature-video/scripts/check_deps.sh +281 -0
- package/skills/file-todos/SKILL.md +267 -0
- package/skills/file-todos/assets/todo-template.md +166 -0
- package/skills/fix-issue/SKILL.md +278 -0
- package/skills/fix-issue/references/agent-authored-exclusion.md +118 -0
- package/skills/fix-issue/references/exclude-label-jq-snippet.md +96 -0
- package/skills/flag-bootstrap/SETUP.md +142 -0
- package/skills/flag-create/SKILL.md +145 -0
- package/skills/flag-create/scripts/create.sh +273 -0
- package/skills/flag-delete/SKILL.md +167 -0
- package/skills/flag-delete/scripts/delete.sh +288 -0
- package/skills/flag-list/SKILL.md +99 -0
- package/skills/flag-list/scripts/list.sh +275 -0
- package/skills/flag-set-role/SKILL.md +229 -0
- package/skills/flag-set-role/scripts/flip.sh +774 -0
- package/skills/frontend-anti-slop/SKILL.md +106 -0
- package/skills/frontend-anti-slop/references/anti-patterns.md +199 -0
- package/skills/frontend-anti-slop/references/slop-rules.md +65 -0
- package/skills/frontend-anti-slop/scripts/tier1-scan.ts +525 -0
- package/skills/frontend-design/SKILL.md +77 -0
- package/skills/gdpr-gate/NOTICE +136 -0
- package/skills/gdpr-gate/SKILL.md +341 -0
- package/skills/gdpr-gate/references/fields.md +160 -0
- package/skills/gdpr-gate/references/layers/api-layer.md +355 -0
- package/skills/gdpr-gate/references/layers/auth-sessions.md +290 -0
- package/skills/gdpr-gate/references/layers/data-in-transit.md +331 -0
- package/skills/gdpr-gate/references/layers/data-lifecycle.md +341 -0
- package/skills/gdpr-gate/references/layers/frontend.md +249 -0
- package/skills/gdpr-gate/references/layers/testing-seeding.md +256 -0
- package/skills/gdpr-gate/references/leakage-vectors.md +248 -0
- package/skills/gdpr-gate/references/legacy/legal-consent-v1-prose.md +48 -0
- package/skills/gdpr-gate/references/legal-consent.md +140 -0
- package/skills/gdpr-gate/references/non-negotiables.md +60 -0
- package/skills/gdpr-gate/scripts/gdpr-gate.sh +271 -0
- package/skills/gdpr-gate/scripts/notice-frontmatter.sh +337 -0
- package/skills/gdpr-gate/scripts/path-denylist.txt +39 -0
- package/skills/gdpr-gate/scripts/repo-scan.sh +158 -0
- package/skills/gdpr-gate/scripts/vendor-drift-classify.sh +120 -0
- package/skills/gdpr-gate/scripts/vendor-pin-integrity.sh +237 -0
- package/skills/gemini-imagegen/SKILL.md +283 -0
- package/skills/gemini-imagegen/requirements.txt +5 -0
- package/skills/gemini-imagegen/scripts/_error_handling.py +146 -0
- package/skills/gemini-imagegen/scripts/compose_images.py +150 -0
- package/skills/gemini-imagegen/scripts/edit_image.py +137 -0
- package/skills/gemini-imagegen/scripts/gemini_images.py +256 -0
- package/skills/gemini-imagegen/scripts/generate_image.py +147 -0
- package/skills/gemini-imagegen/scripts/multi_turn_chat.py +223 -0
- package/skills/gemini-imagegen/scripts/test_error_handling.py +179 -0
- package/skills/git-worktree/SKILL.md +534 -0
- package/skills/git-worktree/scripts/git-repo-readiness-diag.sh +98 -0
- package/skills/git-worktree/scripts/worktree-manager.sh +4773 -0
- package/skills/git-worktree/test/create-from-origin-main.test.sh +116 -0
- package/skills/git-worktree/test/lease-protects-active.test.sh +1056 -0
- package/skills/git-worktree/test/no-repo-fail-loud.test.sh +88 -0
- package/skills/git-worktree/test/orphan-reaper-honest-count.test.sh +379 -0
- package/skills/git-worktree/test/reap-archive-persistence.test.sh +725 -0
- package/skills/git-worktree/test/stale-lock-sweep.test.sh +176 -0
- package/skills/go/SKILL.md +54 -0
- package/skills/growth/SKILL.md +164 -0
- package/skills/harvest-debt/SKILL.md +78 -0
- package/skills/harvest-debt/scripts/harvest-debt.sh +114 -0
- package/skills/heal-skill/SKILL.md +173 -0
- package/skills/help/SKILL.md +46 -0
- package/skills/incident/NOTICE +39 -0
- package/skills/incident/SKILL.md +395 -0
- package/skills/incident/scripts/dry-run.sh +448 -0
- package/skills/incident/scripts/redact-engine.py +412 -0
- package/skills/incident/scripts/redact-sentinel.sh +44 -0
- package/skills/incident/templates/pir.md +139 -0
- package/skills/incident/test/fixtures/dry-run-incident.json +26 -0
- package/skills/incident/test/fixtures/dry-run-secret-leak.json +26 -0
- package/skills/incident/test/fixtures/legacy-bash-scanner.sh +82 -0
- package/skills/incident/test/fixtures/positive-corpus.md +87 -0
- package/skills/incident/test/redact-sentinel.test.sh +1420 -0
- package/skills/invoice/SKILL.md +206 -0
- package/skills/kb-glossary/SKILL.md +71 -0
- package/skills/kb-glossary/references/glossary-format.md +111 -0
- package/skills/kb-glossary/references/rejected-request-register.md +115 -0
- package/skills/kb-search/SKILL.md +276 -0
- package/skills/kb-search/scripts/kb-search-cache.sh +123 -0
- package/skills/legal-audit/SKILL.md +161 -0
- package/skills/legal-generate/NOTICE +242 -0
- package/skills/legal-generate/SKILL.md +244 -0
- package/skills/legal-generate/references/templates/advisor-agreement/template.md +12 -0
- package/skills/legal-generate/references/templates/business-associate-agreement/template.md +112 -0
- package/skills/legal-generate/references/templates/cookie-notice/template.md +82 -0
- package/skills/legal-generate/references/templates/dpa-global/template.md +439 -0
- package/skills/legal-generate/references/templates/dpa-us/template.md +222 -0
- package/skills/legal-generate/references/templates/employee-offer-letter/template.md +75 -0
- package/skills/legal-generate/references/templates/master-services-agreement/template.md +252 -0
- package/skills/legal-generate/references/templates/mutual-nda/template.md +66 -0
- package/skills/legal-generate/references/templates/one-way-nda/template.md +38 -0
- package/skills/legal-generate/references/templates/privacy-policy-gdpr/template.md +427 -0
- package/skills/legal-generate/references/templates/privacy-policy-us/template.md +313 -0
- package/skills/legal-generate/references/templates/terms-of-use/template.md +75 -0
- package/skills/legal-generate/scripts/strip-vendor-credit.sh +96 -0
- package/skills/linear-fetch/SKILL.md +247 -0
- package/skills/linear-fetch/scripts/assert-no-linear-telemetry.sh +66 -0
- package/skills/linear-fetch/scripts/redact-linear-urls.sh +51 -0
- package/skills/linear-fetch/scripts/render-caller-template.sh +36 -0
- package/skills/linear-fetch/test/assert-no-linear-telemetry.test.sh +113 -0
- package/skills/linear-fetch/test/parity.test.sh +112 -0
- package/skills/linear-fetch/test/persist-safe-integration.test.sh +191 -0
- package/skills/linear-fetch/test/redact-linear-urls.test.sh +226 -0
- package/skills/merge-pr/SKILL.md +668 -0
- package/skills/model-launch-review/SKILL.md +255 -0
- package/skills/model-launch-review/scripts/audit-models.sh +501 -0
- package/skills/one-shot/SKILL.md +316 -0
- package/skills/one-shot/references/token-discipline.md +74 -0
- package/skills/operator-bootstrap/SKILL.md +412 -0
- package/skills/operator-bootstrap/template.sh +439 -0
- package/skills/operator-digest/SKILL.md +287 -0
- package/skills/operator-digest/assets/operator-digest.workflow.yml +175 -0
- package/skills/operator-digest/scripts/digest-scrub.sh +119 -0
- package/skills/operator-digest/scripts/provision-operator-digest-repo.sh +147 -0
- package/skills/operator-rephrase/SKILL.md +98 -0
- package/skills/pencil-setup/SKILL.md +201 -0
- package/skills/pencil-setup/scripts/check_deps.sh +556 -0
- package/skills/pencil-setup/scripts/copy_adapter.sh +80 -0
- package/skills/pencil-setup/scripts/package-lock.json +1172 -0
- package/skills/pencil-setup/scripts/package.json +14 -0
- package/skills/pencil-setup/scripts/pencil-error-enrichment.mjs +21 -0
- package/skills/pencil-setup/scripts/pencil-mcp-adapter.mjs +733 -0
- package/skills/pencil-setup/scripts/pencil-response-classify.mjs +38 -0
- package/skills/pencil-setup/scripts/pencil-save-gate.mjs +26 -0
- package/skills/pencil-setup/scripts/sanitize-filename.mjs +25 -0
- package/skills/plan/SKILL.md +1140 -0
- package/skills/plan/references/differential-migration-testing.md +185 -0
- package/skills/plan/references/plan-community-discovery.md +42 -0
- package/skills/plan/references/plan-founder-check.md +137 -0
- package/skills/plan/references/plan-functional-overlap.md +25 -0
- package/skills/plan/references/plan-host-fanout.md +51 -0
- package/skills/plan/references/plan-issue-templates.md +779 -0
- package/skills/plan/references/plan-network-outage-checklist.md +131 -0
- package/skills/plan/references/plan-scope-check.md +126 -0
- package/skills/plan/references/plan-sharp-edges.md +325 -0
- package/skills/plan/references/plan-signoff-lifecycle.md +12 -0
- package/skills/plan/references/webapp-cwv-observability.md +143 -0
- package/skills/plan-review/SKILL.md +91 -0
- package/skills/plan-review/lib/named-panel.mjs +58 -0
- package/skills/plan-review/workflows/plan-review.workflow.js +477 -0
- package/skills/postmerge/SKILL.md +642 -0
- package/skills/postmerge/references/deploy-status-debugging.md +138 -0
- package/skills/postmerge/references/graceful-degradation.md +20 -0
- package/skills/postmerge/references/sentry-error-count-delta.md +137 -0
- package/skills/preflight/SKILL.md +1553 -0
- package/skills/preflight/references/check-13-founder-check.md +286 -0
- package/skills/preflight/scripts/founder-check.py +1640 -0
- package/skills/preflight/scripts/parse-form-a.awk +107 -0
- package/skills/preflight/scripts/probe-verb-gate.sh +108 -0
- package/skills/product-roadmap/SKILL.md +357 -0
- package/skills/product-roadmap/scripts/roadmap-reconcile.sh +327 -0
- package/skills/provision-cloudflare/SKILL.md +67 -0
- package/skills/provision-cloudflare/scripts/provision-cloudflare.sh +271 -0
- package/skills/provision-doppler/SKILL.md +58 -0
- package/skills/provision-doppler/scripts/provision-doppler.sh +358 -0
- package/skills/provision-github/SKILL.md +59 -0
- package/skills/provision-github/scripts/provision-github.sh +300 -0
- package/skills/provision-hetzner/SKILL.md +76 -0
- package/skills/provision-hetzner/scripts/provision-hetzner.sh +262 -0
- package/skills/provision-hetzner/test/fixture/knowledge-base/legal/tenant-dpa-register.md +26 -0
- package/skills/provision-hetzner/test/fixture/provision-hetzner-dry-run.golden +34 -0
- package/skills/provision-hetzner/test/provision-hetzner-characterization.test.sh +227 -0
- package/skills/qa/SKILL.md +263 -0
- package/skills/qa/references/browser-preflight.md +22 -0
- package/skills/questionnaire-generate/SKILL.md +328 -0
- package/skills/questionnaire-generate/references/questionnaire.template +60 -0
- package/skills/rclone/SKILL.md +162 -0
- package/skills/rclone/scripts/check_setup.sh +63 -0
- package/skills/release-announce/SKILL.md +65 -0
- package/skills/release-docs/SKILL.md +92 -0
- package/skills/reproduce-bug/SKILL.md +358 -0
- package/skills/resolve-debt/SKILL.md +85 -0
- package/skills/resolve-debt/scripts/resolve-debt.py +584 -0
- package/skills/resolve-parallel/SKILL.md +45 -0
- package/skills/resolve-parallel/workflows/resolve-parallel.workflow.js +415 -0
- package/skills/resolve-pr-parallel/SKILL.md +68 -0
- package/skills/resolve-pr-parallel/workflows/resolve-pr-parallel.workflow.js +419 -0
- package/skills/resolve-todo-parallel/SKILL.md +57 -0
- package/skills/resolve-todo-parallel/workflows/resolve-todo-parallel.workflow.js +398 -0
- package/skills/review/SKILL.md +1621 -0
- package/skills/review/references/anti-slop-scanner-hook.md +40 -0
- package/skills/review/references/defect-classes-migrations.md +9 -0
- package/skills/review/references/generated-input-oracle-surfaces.md +15 -0
- package/skills/review/references/review-e2e-testing.md +116 -0
- package/skills/review/references/review-todo-structure.md +165 -0
- package/skills/review/references/risk-tier-and-fix-rounds.md +95 -0
- package/skills/review/references/semgrep-custom-rules.yaml +174 -0
- package/skills/review/references/ultrathink-phases.md +98 -0
- package/skills/review/references/wfs.md +6 -0
- package/skills/review/scripts/emit-review-trailer.sh +499 -0
- package/skills/review/scripts/ensure-semgrep.sh +99 -0
- package/skills/review/scripts/fix-round-seats.sh +197 -0
- package/skills/review/test/emit-review-trailer.test.sh +387 -0
- package/skills/review/test/ensure-semgrep.test.sh +111 -0
- package/skills/review/test/fix-round-seats.test.sh +237 -0
- package/skills/review/workflows/README.md +147 -0
- package/skills/review/workflows/review.workflow.js +667 -0
- package/skills/schedule/SKILL.md +796 -0
- package/skills/seo-aeo/SKILL.md +139 -0
- package/skills/seo-aeo/scripts/validate-csp.sh +233 -0
- package/skills/seo-aeo/scripts/validate-seo.sh +262 -0
- package/skills/ship/SKILL.md +3022 -0
- package/skills/ship/references/adr-ordinal-collision.md +47 -0
- package/skills/ship/references/affected-gate-contract.md +115 -0
- package/skills/ship/references/ci-run-diagnosis.md +29 -0
- package/skills/ship/references/ci-workflow-authoring.md +68 -0
- package/skills/ship/references/counsel-review-clo-attestation.md +38 -0
- package/skills/ship/references/cto-ruling-armed-push.md +5 -0
- package/skills/ship/references/decision-challenges-render.md +71 -0
- package/skills/ship/references/detached-battery-verdict.md +13 -0
- package/skills/ship/references/feature-tweet-draft.md +42 -0
- package/skills/ship/references/followthrough-issue-body-template.md +47 -0
- package/skills/ship/references/followthrough-stub-template.sh +92 -0
- package/skills/ship/references/merge-queue-dequeue.md +39 -0
- package/skills/ship/references/operator-holds.md +149 -0
- package/skills/ship/references/pipeline-tally-render.md +43 -0
- package/skills/ship/references/pr-overlap.md +153 -0
- package/skills/ship/references/queue-mode.md +7 -0
- package/skills/ship/references/ready-run-wait.md +36 -0
- package/skills/ship/references/red-on-main-quarantine.md +110 -0
- package/skills/ship/references/register-update-pr-pattern.md +88 -0
- package/skills/ship/references/settle-then-admin-merge.md +130 -0
- package/skills/ship/references/supabase-column-probe.md +13 -0
- package/skills/ship/scripts/auto-close-scan.sh +76 -0
- package/skills/ship/scripts/battery-owed.sh +403 -0
- package/skills/ship/scripts/hold-gate-eval.sh +410 -0
- package/skills/ship/scripts/net-issue-flow.sh +665 -0
- package/skills/ship/scripts/pr-overlap-preflight.sh +483 -0
- package/skills/ship/scripts/ship-pir-action-items-gate.sh +246 -0
- package/skills/ship/scripts/technical-ruling-gate.sh +444 -0
- package/skills/skill-creator/SKILL.md +299 -0
- package/skills/skill-creator/references/api-security.md +248 -0
- package/skills/skill-creator/references/authoring-levers.md +110 -0
- package/skills/skill-creator/references/be-clear-and-direct.md +587 -0
- package/skills/skill-creator/references/best-practices.md +431 -0
- package/skills/skill-creator/references/common-patterns.md +639 -0
- package/skills/skill-creator/references/core-principles.md +193 -0
- package/skills/skill-creator/references/executable-code.md +188 -0
- package/skills/skill-creator/references/iteration-and-testing.md +509 -0
- package/skills/skill-creator/references/official-spec.md +193 -0
- package/skills/skill-creator/references/recommended-structure.md +180 -0
- package/skills/skill-creator/references/skill-structure.md +396 -0
- package/skills/skill-creator/references/using-scripts.md +122 -0
- package/skills/skill-creator/references/using-templates.md +120 -0
- package/skills/skill-creator/references/workflows-and-validation.md +541 -0
- package/skills/skill-creator/scripts/init_skill.py +322 -0
- package/skills/skill-creator/scripts/package_skill.py +110 -0
- package/skills/skill-creator/scripts/quick_validate.py +64 -0
- package/skills/skill-creator/templates/router-skill.md +73 -0
- package/skills/skill-creator/templates/simple-skill.md +34 -0
- package/skills/skill-creator/workflows/add-reference.md +96 -0
- package/skills/skill-creator/workflows/add-script.md +104 -0
- package/skills/skill-creator/workflows/add-template.md +83 -0
- package/skills/skill-creator/workflows/add-workflow.md +128 -0
- package/skills/skill-creator/workflows/audit-skill.md +159 -0
- package/skills/skill-creator/workflows/create-domain-expertise-skill.md +623 -0
- package/skills/skill-creator/workflows/create-new-skill.md +207 -0
- package/skills/skill-creator/workflows/get-guidance.md +134 -0
- package/skills/skill-creator/workflows/upgrade-to-router.md +170 -0
- package/skills/skill-creator/workflows/verify-skill.md +226 -0
- package/skills/skill-security-scan/SKILL.md +145 -0
- package/skills/skill-security-scan/references/disclaimer.md +21 -0
- package/skills/skill-security-scan/references/first-party-allowlist.yaml +38 -0
- package/skills/skill-security-scan/references/override-artifact-schema.json +68 -0
- package/skills/skill-security-scan/references/override-mechanism.md +171 -0
- package/skills/skill-security-scan/references/redirect-domains.yaml +27 -0
- package/skills/skill-security-scan/references/regex-patterns.md +136 -0
- package/skills/skill-security-scan/references/rules/code-exec.yaml +70 -0
- package/skills/skill-security-scan/references/rules/filesystem-boundary.yaml +29 -0
- package/skills/skill-security-scan/references/rules/manifest.yaml +44 -0
- package/skills/skill-security-scan/references/rules/supply-chain.yaml +36 -0
- package/skills/skill-security-scan/references/scan-meta-schema.json +63 -0
- package/skills/skill-security-scan/references/test-fixtures/clean-soleur-style.skill.md +23 -0
- package/skills/skill-security-scan/references/test-fixtures/clean-third-party.skill.md +26 -0
- package/skills/skill-security-scan/references/test-fixtures/malicious-codeexec.skill.md +23 -0
- package/skills/skill-security-scan/references/test-fixtures/malicious-curl-pipe-bash.skill.md +69 -0
- package/skills/skill-security-scan/references/test-fixtures/malicious-prompt-injection.skill.md +17 -0
- package/skills/skill-security-scan/references/test-fixtures/malicious-telemetry-beacon.skill.md +23 -0
- package/skills/skill-security-scan/references/typosquat-targets.yaml +65 -0
- package/skills/skill-security-scan/scripts/check-codeexec.sh +41 -0
- package/skills/skill-security-scan/scripts/check-filesystem-boundary.sh +19 -0
- package/skills/skill-security-scan/scripts/check-prompt-injection.sh +95 -0
- package/skills/skill-security-scan/scripts/check-supply-chain.sh +219 -0
- package/skills/skill-security-scan/scripts/check-telemetry-surface.sh +126 -0
- package/skills/skill-security-scan/scripts/lib.sh +197 -0
- package/skills/skill-security-scan/scripts/parse-override.sh +231 -0
- package/skills/skill-security-scan/scripts/run-scan.sh +342 -0
- package/skills/skill-security-scan/scripts/run-self-test.sh +95 -0
- package/skills/skill-security-scan/test/argv-ceiling.test.sh +180 -0
- package/skills/skill-security-scan/test/meta-dir-reap.test.sh +411 -0
- package/skills/skill-security-scan/test/parse-override.test.sh +607 -0
- package/skills/skill-security-scan/test/redact-pii-ghs-shape.test.sh +251 -0
- package/skills/social-distribute/SKILL.md +485 -0
- package/skills/spec-templates/SKILL.md +274 -0
- package/skills/sync/SKILL.md +49 -0
- package/skills/test-browser/SKILL.md +464 -0
- package/skills/test-browser/references/feature-map.md +161 -0
- package/skills/test-fix-loop/SKILL.md +159 -0
- package/skills/test-fix-loop/references/determinism-checklist.md +154 -0
- package/skills/triage/SKILL.md +402 -0
- package/skills/trigger-cron/SKILL.md +136 -0
- package/skills/trigger-cron/scripts/trigger.sh +198 -0
- package/skills/user-set-role/SKILL.md +147 -0
- package/skills/user-set-role/scripts/set-role.sh +218 -0
- package/skills/user-story-writer/SKILL.md +77 -0
- package/skills/ux-audit/SKILL.md +251 -0
- package/skills/ux-audit/references/finding.schema.json +62 -0
- package/skills/ux-audit/references/route-list.yaml +95 -0
- package/skills/ux-audit/scripts/bot-fixture.ts +270 -0
- package/skills/ux-audit/scripts/bot-signin.ts +135 -0
- package/skills/ux-audit/scripts/dedup-hash.ts +46 -0
- package/skills/work/SKILL.md +1479 -0
- package/skills/work/references/end-of-work-resume.md +7 -0
- package/skills/work/references/hook-test-main-cwd.md +24 -0
- package/skills/work/references/key-principles.md +83 -0
- package/skills/work/references/property-testing.md +122 -0
- package/skills/work/references/sql-security-definer-rpc-scaffold.sql +78 -0
- package/skills/work/references/work-agent-teams.md +97 -0
- package/skills/work/references/work-lifecycle-parallel.md +147 -0
- package/skills/work/references/work-lockfile-bumps.md +97 -0
- package/skills/work/references/work-scratch-sandboxes.md +212 -0
- package/skills/work/references/work-subagent-fanout.md +61 -0
- package/skills/work/references/work-test-harness-sharp-edges.md +73 -0
- package/skills/xcode-test/SKILL.md +360 -0
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Deterministic test for scripts/gen-models.sh: the generated models.generated.json
|
|
3
|
+
# must contain exactly the three current model IDs read VERBATIM from the TS registry
|
|
4
|
+
# (single source of truth), each wrapped in the `anthropic:messages:` provider prefix.
|
|
5
|
+
# No hardcoded model literals here — every expected value is re-derived from the registry.
|
|
6
|
+
set -euo pipefail
|
|
7
|
+
|
|
8
|
+
HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
9
|
+
SKILL_DIR="$(cd "$HERE/.." && pwd)"
|
|
10
|
+
ROOT="$(git -C "$SKILL_DIR" rev-parse --show-toplevel)"
|
|
11
|
+
CONST="$ROOT/apps/web-platform/server/inngest/leader-prompts/constants.ts"
|
|
12
|
+
TIERS="$ROOT/apps/web-platform/server/inngest/model-tiers.ts"
|
|
13
|
+
GEN="$SKILL_DIR/scripts/gen-models.sh"
|
|
14
|
+
OUT="$SKILL_DIR/models.generated.json"
|
|
15
|
+
fails=0
|
|
16
|
+
|
|
17
|
+
# Re-derive the expected IDs from the registry (mirrors gen-models.sh extraction).
|
|
18
|
+
extract() { grep -E "^export const $2" "$1" | grep -oE '"claude-[^"]+"' | tr -d '"' | head -1; }
|
|
19
|
+
SONNET=$(extract "$CONST" "SONNET_MODEL")
|
|
20
|
+
HAIKU=$(extract "$CONST" "HAIKU_MODEL")
|
|
21
|
+
OPUS=$(extract "$TIERS" "AUDIT_MODEL")
|
|
22
|
+
|
|
23
|
+
for v in "$SONNET" "$HAIKU" "$OPUS"; do
|
|
24
|
+
if [[ -z "$v" ]]; then echo "FAIL: could not read a model ID from the registry"; exit 1; fi
|
|
25
|
+
done
|
|
26
|
+
|
|
27
|
+
# COMMITTED-ARTIFACT PARITY. Running the generator in place and then asserting
|
|
28
|
+
# against what it just wrote can only prove the generator is self-consistent —
|
|
29
|
+
# it silently CLOBBERS a hand-edit instead of reporting it, so the checked-in
|
|
30
|
+
# file could drift from the registry indefinitely with this test green. Snapshot
|
|
31
|
+
# first, regenerate, and diff: the committed file must already be correct.
|
|
32
|
+
if [[ ! -f "$OUT" ]]; then
|
|
33
|
+
echo "FAIL: $OUT is missing from the repo"; exit 1
|
|
34
|
+
fi
|
|
35
|
+
_committed="$(mktemp)"
|
|
36
|
+
# Single owning trap (ADR-129) — covers every exit path below, including the
|
|
37
|
+
# STALE failure and any unexpected die between allocation and the diff.
|
|
38
|
+
trap 'rm -f "$_committed"' EXIT
|
|
39
|
+
cp "$OUT" "$_committed"
|
|
40
|
+
|
|
41
|
+
bash "$GEN"
|
|
42
|
+
|
|
43
|
+
if ! diff -q "$_committed" "$OUT" >/dev/null 2>&1; then
|
|
44
|
+
echo "FAIL: $OUT is STALE — it differs from what gen-models.sh produces."
|
|
45
|
+
echo " Run: bash $GEN (and commit the result)"
|
|
46
|
+
diff -u "$_committed" "$OUT" || true
|
|
47
|
+
exit 1
|
|
48
|
+
fi
|
|
49
|
+
echo "ok committed artifact matches the generator (no drift)"
|
|
50
|
+
|
|
51
|
+
check() {
|
|
52
|
+
local needle="anthropic:messages:$1"
|
|
53
|
+
if node -e 'const a=require(process.argv[1]); process.exit(a.includes(process.argv[2])?0:1)' "$OUT" "$needle"; then
|
|
54
|
+
echo "ok present: $needle"
|
|
55
|
+
else
|
|
56
|
+
echo "FAIL missing: $needle"
|
|
57
|
+
fails=$((fails + 1))
|
|
58
|
+
fi
|
|
59
|
+
}
|
|
60
|
+
check "$OPUS"
|
|
61
|
+
check "$SONNET"
|
|
62
|
+
check "$HAIKU"
|
|
63
|
+
|
|
64
|
+
# Exactly three providers, no extras, no hardcoded literals leaked.
|
|
65
|
+
COUNT=$(node -e 'const a=require(process.argv[1]); process.stdout.write(String(a.length))' "$OUT")
|
|
66
|
+
if [[ "$COUNT" != "3" ]]; then
|
|
67
|
+
echo "FAIL: expected 3 providers, got $COUNT"
|
|
68
|
+
fails=$((fails + 1))
|
|
69
|
+
fi
|
|
70
|
+
|
|
71
|
+
if [[ "$fails" -gt 0 ]]; then
|
|
72
|
+
echo "gen-models: $fails assertion(s) failed"
|
|
73
|
+
exit 1
|
|
74
|
+
fi
|
|
75
|
+
echo "gen-models: all assertions passed"
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Deterministic unit test for the MEASUREMENT assert (scripts/measure-classification.cjs).
|
|
3
|
+
# No live LLM: every "model output" is a stubbed string. Asserts the contract:
|
|
4
|
+
# - ALWAYS pass: true (the measurement records, never gates)
|
|
5
|
+
# - score 1.0 when the parsed label matches golden_label, 0.0 otherwise
|
|
6
|
+
# - works for BOTH a /go route AND a ticket-triage P-level
|
|
7
|
+
set -euo pipefail
|
|
8
|
+
|
|
9
|
+
HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
10
|
+
SKILL_DIR="$(cd "$HERE/.." && pwd)"
|
|
11
|
+
ASSERT="$SKILL_DIR/scripts/measure-classification.cjs"
|
|
12
|
+
fails=0
|
|
13
|
+
|
|
14
|
+
# run <output> <golden_label> <enum-json> <expect-pass> <expect-score> <label>
|
|
15
|
+
run() {
|
|
16
|
+
local output="$1" golden="$2" enumjson="$3" want_pass="$4" want_score="$5" label="$6"
|
|
17
|
+
local result
|
|
18
|
+
result=$(node -e '
|
|
19
|
+
const fn = require(process.argv[1]);
|
|
20
|
+
const r = fn(process.argv[2], { vars: { golden_label: process.argv[3], enum: JSON.parse(process.argv[4]) } });
|
|
21
|
+
process.stdout.write(JSON.stringify({ pass: r.pass, score: r.score }));
|
|
22
|
+
' "$ASSERT" "$output" "$golden" "$enumjson" )
|
|
23
|
+
local got_pass got_score
|
|
24
|
+
got_pass=$(node -e 'process.stdout.write(String(JSON.parse(process.argv[1]).pass))' "$result")
|
|
25
|
+
got_score=$(node -e 'process.stdout.write(String(JSON.parse(process.argv[1]).score))' "$result")
|
|
26
|
+
if [[ "$got_pass" != "$want_pass" || "$got_score" != "$want_score" ]]; then
|
|
27
|
+
echo "FAIL [$label]: output='$output' golden='$golden' -> pass=$got_pass score=$got_score (want pass=$want_pass score=$want_score)"
|
|
28
|
+
fails=$((fails + 1))
|
|
29
|
+
else
|
|
30
|
+
echo "ok [$label]: pass=$got_pass score=$got_score"
|
|
31
|
+
fi
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
GO='["fix","drain","clo-attestation","review","legal-threshold","incident","default"]'
|
|
35
|
+
TR='["P1","P2","P3"]'
|
|
36
|
+
|
|
37
|
+
# --- /go route cases ---
|
|
38
|
+
run "fix" "fix" "$GO" "true" "1" "route exact match"
|
|
39
|
+
run "The route is \`fix\`." "fix" "$GO" "true" "1" "route embedded in prose"
|
|
40
|
+
run "default" "fix" "$GO" "true" "0" "route mismatch scores 0 but still passes"
|
|
41
|
+
run "incident" "incident" "$GO" "true" "1" "non-default route match"
|
|
42
|
+
run "banana" "fix" "$GO" "true" "0" "hallucinated route scores 0 but still passes"
|
|
43
|
+
|
|
44
|
+
# --- ticket-triage P-level cases ---
|
|
45
|
+
run "P1" "P1" "$TR" "true" "1" "P-level exact match"
|
|
46
|
+
run "Priority: P2" "P2" "$TR" "true" "1" "P-level embedded in prose"
|
|
47
|
+
run "p3" "P3" "$TR" "true" "1" "P-level case-insensitive match"
|
|
48
|
+
run "P1" "P3" "$TR" "true" "0" "P-level mismatch scores 0 but still passes"
|
|
49
|
+
|
|
50
|
+
# --- file:// enum shape (the promptfoo defaultTest.vars shape — #5358 regression).
|
|
51
|
+
# enum arrives as a RAW STRING; loadEnum must read the SSOT file to score. ---
|
|
52
|
+
fileref() {
|
|
53
|
+
local output="$1" golden="$2" enumref="$3" want_score="$4" label="$5"
|
|
54
|
+
local got
|
|
55
|
+
got=$(node -e '
|
|
56
|
+
const fn = require(process.argv[1]);
|
|
57
|
+
const r = fn(process.argv[2], { vars: { golden_label: process.argv[3], enum: process.argv[4] } });
|
|
58
|
+
process.stdout.write(String(r.score));
|
|
59
|
+
' "$ASSERT" "$output" "$golden" "$enumref")
|
|
60
|
+
if [[ "$got" != "$want_score" ]]; then
|
|
61
|
+
echo "FAIL [$label]: output='$output' enum='$enumref' -> score=$got (want $want_score)"
|
|
62
|
+
fails=$((fails + 1))
|
|
63
|
+
else
|
|
64
|
+
echo "ok [$label]: score=$got"
|
|
65
|
+
fi
|
|
66
|
+
}
|
|
67
|
+
fileref "fix" "fix" "file://enums/go-routes.json" "1" "file:// enum + correct route scores 1"
|
|
68
|
+
fileref "P2" "P2" "file://enums/triage-levels.json" "1" "file:// enum + correct P-level scores 1"
|
|
69
|
+
|
|
70
|
+
if [[ "$fails" -gt 0 ]]; then
|
|
71
|
+
echo "measure-classification: $fails assertion(s) failed"
|
|
72
|
+
exit 1
|
|
73
|
+
fi
|
|
74
|
+
echo "measure-classification: all assertions passed"
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Deterministic unit test for the shared label parser (scripts/parse-label.cjs).
|
|
3
|
+
# Pins the documented three-tier contract:
|
|
4
|
+
# 1. exact (case-insensitive) match against the whole trimmed output
|
|
5
|
+
# 2. word-boundary search → the EARLIEST-occurring allowed label (not enum order)
|
|
6
|
+
# 3. fallback → the raw first non-empty line (so the gate can reject it)
|
|
7
|
+
# Also pins the documented limitations: hyphenated labels are not split, a label
|
|
8
|
+
# that is a strict substring of a longer token does not match, and hedged/negated
|
|
9
|
+
# prose resolves to the first-mentioned label.
|
|
10
|
+
set -euo pipefail
|
|
11
|
+
|
|
12
|
+
HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
13
|
+
SKILL_DIR="$(cd "$HERE/.." && pwd)"
|
|
14
|
+
PARSER="$SKILL_DIR/scripts/parse-label.cjs"
|
|
15
|
+
fails=0
|
|
16
|
+
|
|
17
|
+
# run <output> <enum-json> <expected-label> <case-label>
|
|
18
|
+
run() {
|
|
19
|
+
local output="$1" enumjson="$2" want="$3" label="$4"
|
|
20
|
+
local got
|
|
21
|
+
got=$(node -e '
|
|
22
|
+
const { extractLabel } = require(process.argv[1]);
|
|
23
|
+
process.stdout.write(String(extractLabel(process.argv[2], JSON.parse(process.argv[3]))));
|
|
24
|
+
' "$PARSER" "$output" "$enumjson")
|
|
25
|
+
if [[ "$got" != "$want" ]]; then
|
|
26
|
+
echo "FAIL [$label]: output='$output' -> '$got' (want '$want')"
|
|
27
|
+
fails=$((fails + 1))
|
|
28
|
+
else
|
|
29
|
+
echo "ok [$label]: '$got'"
|
|
30
|
+
fi
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
# run_empty <enum-json> <expected> <case-label> (output is the empty/undefined case)
|
|
34
|
+
run_empty() {
|
|
35
|
+
local enumjson="$1" want="$2" label="$3"
|
|
36
|
+
local got
|
|
37
|
+
got=$(node -e '
|
|
38
|
+
const { extractLabel } = require(process.argv[1]);
|
|
39
|
+
const out = process.argv[3] === "__NULL__" ? null : process.argv[3];
|
|
40
|
+
process.stdout.write(String(extractLabel(out, JSON.parse(process.argv[2]))));
|
|
41
|
+
' "$PARSER" "$enumjson" "$4")
|
|
42
|
+
if [[ "$got" != "$want" ]]; then
|
|
43
|
+
echo "FAIL [$label]: -> '$got' (want '$want')"
|
|
44
|
+
fails=$((fails + 1))
|
|
45
|
+
else
|
|
46
|
+
echo "ok [$label]: '$got'"
|
|
47
|
+
fi
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
GO='["fix","drain","clo-attestation","review","legal-threshold","incident","default"]'
|
|
51
|
+
TR='["P1","P2","P3"]'
|
|
52
|
+
|
|
53
|
+
# --- Tier 1: exact match ---
|
|
54
|
+
run "fix" "$GO" "fix" "tier1 exact route"
|
|
55
|
+
run "P1" "$TR" "P1" "tier1 exact P-level"
|
|
56
|
+
run "p2" "$TR" "P2" "tier1 exact case-insensitive"
|
|
57
|
+
run " review " "$GO" "review" "tier1 exact after trim"
|
|
58
|
+
|
|
59
|
+
# --- Tier 2: word-boundary, EARLIEST-occurrence wins (not enum order) ---
|
|
60
|
+
run "The route is review." "$GO" "review" "tier2 single label in prose"
|
|
61
|
+
run "review, not fix" "$GO" "review" "tier2 earliest wins over enum order (fix precedes review in enum)"
|
|
62
|
+
run "default, or maybe fix" "$GO" "default" "tier2 earliest wins (default precedes fix in text)"
|
|
63
|
+
run "Route: incident" "$GO" "incident" "tier2 label after prompt label"
|
|
64
|
+
run "clo-attestation" "$GO" "clo-attestation" "tier2 hyphenated label not split"
|
|
65
|
+
run "use legal-threshold here" "$GO" "legal-threshold" "tier2 hyphenated label in prose"
|
|
66
|
+
# Documented limitation: negation resolves to the first-mentioned label.
|
|
67
|
+
run "not P1, use P2" "$TR" "P1" "tier2 documented negation limitation (first-mentioned)"
|
|
68
|
+
|
|
69
|
+
# --- Tier 2 substring safety: a strict substring of a longer token must NOT match ---
|
|
70
|
+
run "P10" "$TR" "P10" "tier2 P1 not matched inside P10 (falls to raw)"
|
|
71
|
+
|
|
72
|
+
# --- Tier 3: fallback to raw first non-empty line (gate will reject) ---
|
|
73
|
+
run "banana" "$GO" "banana" "tier3 out-of-enum raw token"
|
|
74
|
+
run $' \nfirst junk line\nsecond' "$GO" "first junk line" "tier3 first non-empty line"
|
|
75
|
+
|
|
76
|
+
# --- Null / empty handling ---
|
|
77
|
+
run_empty "$GO" "" "empty string output" ""
|
|
78
|
+
run_empty "$GO" "" "null output" "__NULL__"
|
|
79
|
+
|
|
80
|
+
# --- loadEnum: the var shapes promptfoo actually passes ---
|
|
81
|
+
# promptfoo's handling of a `defaultTest.vars` `file://*.json` value is
|
|
82
|
+
# version-dependent: it may pass the RESOLVED FILE CONTENTS (JSON array text as a
|
|
83
|
+
# string) OR the literal unresolved `file://...` ref. loadEnum must handle BOTH
|
|
84
|
+
# (plus a direct array), returning [] (gate fails closed) on anything else. The
|
|
85
|
+
# resolved-contents case is the one a prior simplification dropped, vacuuming the
|
|
86
|
+
# gate — these cases lock both shapes so it cannot recur.
|
|
87
|
+
loadenum() {
|
|
88
|
+
local enumval="$1" want_len="$2" want_first="$3" label="$4"
|
|
89
|
+
local got
|
|
90
|
+
got=$(node -e '
|
|
91
|
+
const { loadEnum } = require(process.argv[1]);
|
|
92
|
+
const v = process.argv[2] === "__ARRAY__"
|
|
93
|
+
? ["a","b","c"]
|
|
94
|
+
: process.argv[2];
|
|
95
|
+
const e = loadEnum({ enum: v });
|
|
96
|
+
process.stdout.write(JSON.stringify({ len: e.length, first: (e[0] ?? null) }));
|
|
97
|
+
' "$SKILL_DIR/scripts/parse-label.cjs" "$enumval")
|
|
98
|
+
local got_len got_first
|
|
99
|
+
got_len=$(node -e 'process.stdout.write(String(JSON.parse(process.argv[1]).len))' "$got")
|
|
100
|
+
got_first=$(node -e 'process.stdout.write(String(JSON.parse(process.argv[1]).first))' "$got")
|
|
101
|
+
if [[ "$got_len" != "$want_len" || "$got_first" != "$want_first" ]]; then
|
|
102
|
+
echo "FAIL [$label]: enum='$enumval' -> len=$got_len first=$got_first (want len=$want_len first=$want_first)"
|
|
103
|
+
fails=$((fails + 1))
|
|
104
|
+
else
|
|
105
|
+
echo "ok [$label]: len=$got_len first=$got_first"
|
|
106
|
+
fi
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
# promptfoo's file:// var handling is version-dependent: it may pass the literal
|
|
110
|
+
# `file://...` ref OR the RESOLVED FILE CONTENTS (JSON array text). Both must work.
|
|
111
|
+
loadenum "file://enums/go-routes.json" 11 "fix" "loadEnum file:// literal ref (one promptfoo shape)"
|
|
112
|
+
loadenum "file://enums/triage-levels.json" 3 "P1" "loadEnum file:// triage-levels"
|
|
113
|
+
loadenum "enums/go-routes.json" 11 "fix" "loadEnum bare relative path"
|
|
114
|
+
# The resolved-contents shape — what promptfoo actually passes when it resolves a
|
|
115
|
+
# defaultTest.vars file:// ref to the file's CONTENTS. Regression guard for the
|
|
116
|
+
# gate-vacuous bug (loadEnum must JSON.parse a JSON-array-text string, not treat it
|
|
117
|
+
# as a path). JSON array text as a string.
|
|
118
|
+
loadenum '["fix","drain","drain-prs","clo-attestation","review","legal-threshold","incident","implement","questionnaire","glossary","default"]' 11 "fix" "loadEnum JSON-array-text contents (promptfoo file:// resolved-contents shape)"
|
|
119
|
+
loadenum '[ "a", "b", "c" ]' 3 "a" "loadEnum whitespaced JSON-array-text contents"
|
|
120
|
+
loadenum "__ARRAY__" 3 "a" "loadEnum direct array passthrough"
|
|
121
|
+
loadenum "file://enums/does-not-exist.json" 0 "null" "loadEnum unreadable file -> [] (gate fails closed)"
|
|
122
|
+
loadenum "not json and not a path" 0 "null" "loadEnum garbage -> [] (gate fails closed)"
|
|
123
|
+
loadenum "" 0 "null" "loadEnum empty string -> []"
|
|
124
|
+
|
|
125
|
+
if [[ "$fails" -gt 0 ]]; then
|
|
126
|
+
echo "parse-label: $fails assertion(s) failed"
|
|
127
|
+
exit 1
|
|
128
|
+
fi
|
|
129
|
+
echo "parse-label: all assertions passed"
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Deterministic completeness test for the gated-skills registry — NO API.
|
|
3
|
+
# Asserts bidirectional parity between `eval-gate:block:<id>:start` markers in
|
|
4
|
+
# source files and `block_id` entries in gated-skills.json, so a new/renamed
|
|
5
|
+
# gated classifier cannot be added without wiring its projection check.
|
|
6
|
+
# DEDUP — each scanned id appears exactly once in source (sort -u can't hide a dup).
|
|
7
|
+
# PARITY — source-scanned id set == registry block_id set (block-id level).
|
|
8
|
+
# CHARSET — every registry block_id matches ^[a-z][a-z0-9-]*$ (scanner-recognizable).
|
|
9
|
+
# NEGATIVE — in-memory injected id/dup is flagged (verify-the-verifier).
|
|
10
|
+
# Mirrors test/eval-gate.test.sh: pure bash + node one-liners (no jq), accumulate-then-exit.
|
|
11
|
+
set -euo pipefail
|
|
12
|
+
|
|
13
|
+
HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
14
|
+
SKILL_DIR="$(cd "$HERE/.." && pwd)"
|
|
15
|
+
REPO_ROOT="$(cd "$SKILL_DIR/../../../.." && pwd)"
|
|
16
|
+
REGISTRY="$SKILL_DIR/gated-skills.json"
|
|
17
|
+
fails=0
|
|
18
|
+
|
|
19
|
+
pass() { echo "ok [$1]"; }
|
|
20
|
+
fail() { echo "FAIL [$1]: $2"; fails=$((fails + 1)); }
|
|
21
|
+
|
|
22
|
+
cd "$REPO_ROOT"
|
|
23
|
+
|
|
24
|
+
# Source-marker scan: ids from `eval-gate:block:<id>:start` across plugins/soleur/, minus the
|
|
25
|
+
# eval-harness skill dir itself (its SKILL.md / registry / tests quote the literal markers in
|
|
26
|
+
# prose, so including them would false-positive the parity check). `|| true` keeps a
|
|
27
|
+
# legitimately-empty scan from aborting under errexit — PARITY then reports it cleanly.
|
|
28
|
+
# Scope assumption (fail-open corner, unreachable today): every gated source_file lives under
|
|
29
|
+
# plugins/soleur/ and outside eval-harness/. If the registry ever gains a source_file outside
|
|
30
|
+
# this scan root (or inside eval-harness/), widen/adjust the pathspec or its marker is invisible.
|
|
31
|
+
scan_ids() {
|
|
32
|
+
git grep -hoE 'eval-gate:block:[a-z][a-z0-9-]*:start' \
|
|
33
|
+
-- 'plugins/soleur/' ':(exclude)plugins/soleur/skills/eval-harness/' 2>/dev/null \
|
|
34
|
+
| sed -E 's/eval-gate:block:(.*):start/\1/' || true
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
# Registry block_ids (no jq dependency — node one-liner, mirrors eval-gate.test.sh).
|
|
38
|
+
registry_ids() {
|
|
39
|
+
node -e 'JSON.parse(require("fs").readFileSync(process.argv[1],"utf8")).forEach(e=>console.log(e.block_id))' "$REGISTRY"
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
# --- DEDUP guard: each source id appears exactly once (BEFORE sort -u would hide a dup) ---
|
|
43
|
+
dups="$(scan_ids | sort | uniq -d)"
|
|
44
|
+
if [[ -z "$dups" ]]; then
|
|
45
|
+
pass "DEDUP — each gated block_id appears exactly once in source"
|
|
46
|
+
else
|
|
47
|
+
fail "DEDUP — duplicate source marker(s)" "gated block '$(echo "$dups" | tr '\n' ' ')' appears more than once in source — each block_id maps to one registry source_file"
|
|
48
|
+
fi
|
|
49
|
+
|
|
50
|
+
# --- PARITY (the feature): source-scanned id set == registry id set, block-id level ---
|
|
51
|
+
src_set="$(scan_ids | sort -u)"
|
|
52
|
+
reg_set="$(registry_ids | sort -u)"
|
|
53
|
+
|
|
54
|
+
# Characterize the live scan (Kieran: don't just exit-0; pin the production command's output).
|
|
55
|
+
# Sorted set; update when a gated classifier surface is added/removed (PARITY below is the
|
|
56
|
+
# robust invariant — this literal is the belt-and-suspenders scanner-output pin).
|
|
57
|
+
expected_set=$'go-routing\nincident-threshold\nlane-inference\nticket-triage'
|
|
58
|
+
if [[ "$src_set" == "$expected_set" ]]; then
|
|
59
|
+
pass "live scan characterized as exactly {go-routing, incident-threshold, lane-inference, ticket-triage}"
|
|
60
|
+
else
|
|
61
|
+
fail "live scan characterization" "scanned ids: [$(echo "$src_set" | tr '\n' ' ')] (want: go-routing incident-threshold lane-inference ticket-triage)"
|
|
62
|
+
fi
|
|
63
|
+
|
|
64
|
+
# `|| true` inside the substitution: diff exits 1 on differences, which would otherwise
|
|
65
|
+
# abort the script (set -e + pipefail) BEFORE fail() prints the clear drift message.
|
|
66
|
+
parity_diff="$(diff <(echo "$src_set") <(echo "$reg_set") || true)"
|
|
67
|
+
if [[ -z "$parity_diff" ]]; then
|
|
68
|
+
pass "PARITY — source markers and registry block_ids match"
|
|
69
|
+
else
|
|
70
|
+
fail "PARITY — registry/source drift" "$(echo "$parity_diff" | tr '\n' ' ') ('<' source-only = unregistered marker: add a registry entry + enums/tasks/promptfooconfig + node scripts/gen-skill-prompt.cjs <id>; '>' registry-only = orphan/renamed entry)"
|
|
71
|
+
fi
|
|
72
|
+
|
|
73
|
+
# --- CHARSET guard: every registry block_id is scanner-recognizable ---
|
|
74
|
+
bad_ids=""
|
|
75
|
+
while IFS= read -r id; do
|
|
76
|
+
[[ "$id" =~ ^[a-z][a-z0-9-]*$ ]] || bad_ids+="$id "
|
|
77
|
+
done < <(registry_ids)
|
|
78
|
+
if [[ -z "$bad_ids" ]]; then
|
|
79
|
+
pass "CHARSET — every registry block_id matches ^[a-z][a-z0-9-]*\$"
|
|
80
|
+
else
|
|
81
|
+
fail "CHARSET — non-conforming block_id" "registry block_id(s) '$bad_ids' must match ^[a-z][a-z0-9-]*\$ — the scanner regex only recognizes lowercase-hyphen ids"
|
|
82
|
+
fi
|
|
83
|
+
|
|
84
|
+
# --- NEGATIVE sanity (in-memory; git grep is tracked-only and cannot see a tmp fixture, so a
|
|
85
|
+
# file-based negative would test a different backend than production and false-pass) ---
|
|
86
|
+
# (a) an injected unregistered id must be flagged by the PARITY comparison — exercised through the
|
|
87
|
+
# SAME captured-string idiom the live check uses, and asserting the injected id lands on the
|
|
88
|
+
# source-only ('<') side, so this verifies the verifier rather than just that diff(A+x,A)≠∅.
|
|
89
|
+
inj_src="$(printf '%s\nzz-injected-unregistered' "$src_set" | sort -u)"
|
|
90
|
+
inj_diff="$(diff <(echo "$inj_src") <(echo "$reg_set") || true)"
|
|
91
|
+
if [[ -n "$inj_diff" && "$inj_diff" == *"< zz-injected-unregistered"* ]]; then
|
|
92
|
+
pass "NEGATIVE — injected unregistered id is flagged by PARITY (source-only side)"
|
|
93
|
+
else
|
|
94
|
+
fail "NEGATIVE parity sanity" "injected unregistered id was NOT flagged on the source-only side (got: $(echo "$inj_diff" | tr '\n' ' '))"
|
|
95
|
+
fi
|
|
96
|
+
|
|
97
|
+
# (b) an injected duplicate id must be flagged by the DEDUP guard.
|
|
98
|
+
inj_dups="$(printf '%s\ngo-routing' "$(scan_ids)" | sort | uniq -d)"
|
|
99
|
+
if [[ -n "$inj_dups" ]]; then
|
|
100
|
+
pass "NEGATIVE — injected duplicate id is flagged by DEDUP"
|
|
101
|
+
else
|
|
102
|
+
fail "NEGATIVE dedup sanity" "an injected duplicate id was NOT flagged by the dedup check"
|
|
103
|
+
fi
|
|
104
|
+
|
|
105
|
+
if [[ "$fails" -gt 0 ]]; then
|
|
106
|
+
echo "registry-completeness: $fails assertion(s) failed"
|
|
107
|
+
exit 1
|
|
108
|
+
fi
|
|
109
|
+
echo "registry-completeness: all assertions passed"
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Deterministic unit test for the PURE verdict engine (scripts/verdict.cjs).
|
|
3
|
+
# ZERO live API — every input is a recorded normalized-results fixture.
|
|
4
|
+
#
|
|
5
|
+
# Normalized results shape (the seam the orchestrator wires compound/heal-skill to):
|
|
6
|
+
# currentResults, candidateResults : Array<{ task_id: string, correct: boolean }>
|
|
7
|
+
# — one entry per model×repeat sample per corpus task.
|
|
8
|
+
# targetTask : { task_id } — the row whose candidate samples must pass (>= 0.5).
|
|
9
|
+
# opts : { epsilon?, targetThreshold=0.5 } — epsilon default = 1/(#distinct corpus task_ids).
|
|
10
|
+
#
|
|
11
|
+
# Cases (AC2): (a) accept, (b) reject-corpus-regress, (c) reject-target-fail,
|
|
12
|
+
# (d) epsilon-boundary (inclusive == not-regressed).
|
|
13
|
+
set -euo pipefail
|
|
14
|
+
|
|
15
|
+
HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
16
|
+
SKILL_DIR="$(cd "$HERE/.." && pwd)"
|
|
17
|
+
VERDICT="$SKILL_DIR/scripts/verdict.cjs"
|
|
18
|
+
export SKILL_DIR
|
|
19
|
+
|
|
20
|
+
node -e "$(cat <<'EOF'
|
|
21
|
+
const assert = require("node:assert");
|
|
22
|
+
const path = require("node:path");
|
|
23
|
+
const { computeVerdict } = require(path.join(process.env.SKILL_DIR, "scripts", "verdict.cjs"));
|
|
24
|
+
|
|
25
|
+
let fails = 0;
|
|
26
|
+
function check(label, fn) {
|
|
27
|
+
try { fn(); console.log("ok [" + label + "]"); }
|
|
28
|
+
catch (e) { console.log("FAIL [" + label + "]: " + e.message); fails++; }
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// Helper: N samples of a task with `c` correct, rest incorrect.
|
|
32
|
+
function samples(task_id, total, correct) {
|
|
33
|
+
const out = [];
|
|
34
|
+
for (let i = 0; i < total; i++) out.push({ task_id, correct: i < correct });
|
|
35
|
+
return out;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const TARGET = { task_id: "T" };
|
|
39
|
+
|
|
40
|
+
// --- (a) accept: corpus flat (0.75 -> 0.75), target passes (1.0). epsilon = 1/4 = 0.25
|
|
41
|
+
check("accept: improve target, corpus flat", () => {
|
|
42
|
+
const corpusCur = [...samples("t1",1,1), ...samples("t2",1,1), ...samples("t3",1,1), ...samples("t4",1,0)];
|
|
43
|
+
const corpusCand = [...samples("t1",1,1), ...samples("t2",1,1), ...samples("t3",1,1), ...samples("t4",1,0)];
|
|
44
|
+
const cur = [...corpusCur, ...samples("T",3,1)];
|
|
45
|
+
const cand = [...corpusCand, ...samples("T",3,3)];
|
|
46
|
+
const v = computeVerdict(cur, cand, TARGET, {});
|
|
47
|
+
assert.strictEqual(v.epsilon, 0.25, "epsilon default = 1/4");
|
|
48
|
+
assert.strictEqual(v.corpus_regressed, false);
|
|
49
|
+
assert.strictEqual(v.target_task_passes, true);
|
|
50
|
+
assert.strictEqual(v.accept, true);
|
|
51
|
+
assert.ok(Array.isArray(v.per_task));
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
// --- (b) reject: corpus regresses beyond epsilon (1.0 -> 0.25), target passes
|
|
55
|
+
check("reject: corpus regresses beyond epsilon", () => {
|
|
56
|
+
const cur = [...samples("t1",1,1), ...samples("t2",1,1), ...samples("t3",1,1), ...samples("t4",1,1), ...samples("T",1,1)];
|
|
57
|
+
const cand = [...samples("t1",1,1), ...samples("t2",1,0), ...samples("t3",1,0), ...samples("t4",1,0), ...samples("T",1,1)];
|
|
58
|
+
const v = computeVerdict(cur, cand, TARGET, {});
|
|
59
|
+
assert.strictEqual(v.corpus_regressed, true);
|
|
60
|
+
assert.strictEqual(v.accept, false);
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
// --- (c) reject: target task fails (<0.5), corpus flat
|
|
64
|
+
check("reject: target task fails (<0.5)", () => {
|
|
65
|
+
const corpus = [...samples("t1",1,1), ...samples("t2",1,1), ...samples("t3",1,1), ...samples("t4",1,0)];
|
|
66
|
+
const cur = [...corpus, ...samples("T",3,2)];
|
|
67
|
+
const cand = [...corpus, ...samples("T",3,1)]; // 1/3 = 0.333 < 0.5
|
|
68
|
+
const v = computeVerdict(cur, cand, TARGET, {});
|
|
69
|
+
assert.strictEqual(v.corpus_regressed, false);
|
|
70
|
+
assert.strictEqual(v.target_task_passes, false);
|
|
71
|
+
assert.strictEqual(v.accept, false);
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
// --- (d) epsilon-boundary: candidate exactly at current_rate - epsilon => NOT regressed
|
|
75
|
+
check("epsilon-boundary inclusive == not regressed", () => {
|
|
76
|
+
// current corpus rate = 1.0, epsilon = 0.25, candidate corpus = 0.75 exactly.
|
|
77
|
+
const cur = [...samples("t1",1,1), ...samples("t2",1,1), ...samples("t3",1,1), ...samples("t4",1,1), ...samples("T",1,1)];
|
|
78
|
+
const cand = [...samples("t1",1,1), ...samples("t2",1,1), ...samples("t3",1,1), ...samples("t4",1,0), ...samples("T",1,1)];
|
|
79
|
+
const v = computeVerdict(cur, cand, TARGET, {});
|
|
80
|
+
assert.strictEqual(v.current_rate, 1.0);
|
|
81
|
+
assert.strictEqual(v.candidate_rate, 0.75);
|
|
82
|
+
assert.strictEqual(v.corpus_regressed, false, "boundary is inclusive: == is not a regression");
|
|
83
|
+
assert.strictEqual(v.accept, true);
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
// --- (e) reject: corpus below the absolute trust floor (both arms degraded) ---
|
|
87
|
+
// current corpus rate = 0.25 (< MIN_TRUSTED_CORPUS_RATE 0.5); candidate flat at 0.25 so
|
|
88
|
+
// there is no *relative* regression, and the target passes — but the baseline is too
|
|
89
|
+
// degraded to trust, so accept must be forced false.
|
|
90
|
+
check("reject: corpus below trust floor (both arms degraded)", () => {
|
|
91
|
+
const corpus = [...samples("t1",1,1), ...samples("t2",1,0), ...samples("t3",1,0), ...samples("t4",1,0)]; // 0.25
|
|
92
|
+
const cur = [...corpus, ...samples("T",3,3)];
|
|
93
|
+
const cand = [...corpus, ...samples("T",3,3)];
|
|
94
|
+
const v = computeVerdict(cur, cand, TARGET, {});
|
|
95
|
+
assert.strictEqual(v.current_rate, 0.25);
|
|
96
|
+
assert.strictEqual(v.corpus_regressed, false, "flat corpus is not a relative regression");
|
|
97
|
+
assert.strictEqual(v.target_task_passes, true);
|
|
98
|
+
assert.strictEqual(v.corpus_untrustworthy, true);
|
|
99
|
+
assert.strictEqual(v.min_trusted_corpus_rate, 0.5);
|
|
100
|
+
assert.strictEqual(v.accept, false, "untrustworthy baseline forces accept=false");
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
// --- malformed input throws (fail-closed) ---
|
|
104
|
+
check("throws on non-array currentResults", () => {
|
|
105
|
+
assert.throws(() => computeVerdict(null, [], TARGET, {}));
|
|
106
|
+
});
|
|
107
|
+
check("throws on entry missing correct boolean", () => {
|
|
108
|
+
assert.throws(() => computeVerdict([{ task_id: "t1" }], [{ task_id: "t1", correct: true }], TARGET, {}));
|
|
109
|
+
});
|
|
110
|
+
check("throws on missing targetTask.task_id", () => {
|
|
111
|
+
const ok = [...samples("t1",1,1), ...samples("T",1,1)];
|
|
112
|
+
assert.throws(() => computeVerdict(ok, ok, {}, {}));
|
|
113
|
+
});
|
|
114
|
+
check("throws when target has no candidate samples", () => {
|
|
115
|
+
const cur = [...samples("t1",1,1), ...samples("T",1,1)];
|
|
116
|
+
const cand = [...samples("t1",1,1)]; // no T
|
|
117
|
+
assert.throws(() => computeVerdict(cur, cand, TARGET, {}));
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
if (fails > 0) { console.log("verdict: " + fails + " assertion(s) failed"); process.exit(1); }
|
|
121
|
+
console.log("verdict: all assertions passed");
|
|
122
|
+
EOF
|
|
123
|
+
)"
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: every-style-editor
|
|
3
|
+
description: "This skill should be used when reviewing or editing copy for adherence to Every's style guide. It provides systematic line-by-line review for grammar, punctuation, mechanics, and style compliance."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<!-- grok-harness-invoke:start -->
|
|
7
|
+
**Grok Build (`plugins/soleur/lib/harness.ts` `invokeSkill()`):** Read this SKILL.md in this process and run it to completion. A one-segment `soleur:<name>` in this document names a SKILL — on Grok Build, Read `plugins/soleur/skills/<name>/SKILL.md` in this process; it is not a nested tool_use. A multi-segment id such as `soleur:<domain>:<name>` names an AGENT: spawn it, never Read it, and on Grok Build spawn_subagent takes the id with its colons replaced by hyphens (`agentIdToGrokSubagentType`). **Claude Code:** Skill tool for a skill (`soleur:<name>`), Task tool with `subagent_type` for an agent. Forbidden is executing a subset, not the Read.
|
|
8
|
+
<!-- grok-harness-invoke:end -->
|
|
9
|
+
|
|
10
|
+
# Every Style Editor
|
|
11
|
+
|
|
12
|
+
This skill provides a systematic approach to reviewing copy against Every's comprehensive style guide. It transforms Claude into a meticulous line editor and proofreader specializing in grammar, mechanics, and style guide compliance.
|
|
13
|
+
|
|
14
|
+
## When to Use This Skill
|
|
15
|
+
|
|
16
|
+
Use this skill when:
|
|
17
|
+
|
|
18
|
+
- Reviewing articles, blog posts, newsletters, or any written content
|
|
19
|
+
- Ensuring copy follows Every's specific style conventions
|
|
20
|
+
- Providing feedback on grammar, punctuation, and mechanics
|
|
21
|
+
- Flagging deviations from the Every style guide
|
|
22
|
+
- Preparing clean copy for human editorial review
|
|
23
|
+
|
|
24
|
+
## Skill Overview
|
|
25
|
+
|
|
26
|
+
This skill enables performing a comprehensive review of written content in four phases:
|
|
27
|
+
|
|
28
|
+
1. **Initial Assessment** - Understanding context and document type
|
|
29
|
+
2. **Detailed Line Edit** - Checking every sentence for compliance
|
|
30
|
+
3. **Mechanical Review** - Verifying formatting and consistency
|
|
31
|
+
4. **Recommendations** - Providing actionable improvement suggestions
|
|
32
|
+
|
|
33
|
+
## How to Use This Skill
|
|
34
|
+
|
|
35
|
+
### Step 1: Initial Assessment
|
|
36
|
+
|
|
37
|
+
Begin by reading the entire piece to understand:
|
|
38
|
+
|
|
39
|
+
- Document type (article, knowledge base entry, social post, etc.)
|
|
40
|
+
- Target audience
|
|
41
|
+
- Overall tone and voice
|
|
42
|
+
- Content context
|
|
43
|
+
|
|
44
|
+
### Step 2: Detailed Line Edit
|
|
45
|
+
|
|
46
|
+
Review each paragraph systematically, checking for:
|
|
47
|
+
|
|
48
|
+
- Sentence structure and grammar correctness
|
|
49
|
+
- Punctuation usage (commas, semicolons, em dashes, etc.)
|
|
50
|
+
- Capitalization rules (especially job titles, headlines)
|
|
51
|
+
- Word choice and usage (overused words, passive voice)
|
|
52
|
+
- Adherence to Every style guide rules
|
|
53
|
+
|
|
54
|
+
Reference the complete [EVERY_WRITE_STYLE.md](./references/EVERY_WRITE_STYLE.md) for specific rules when in doubt.
|
|
55
|
+
|
|
56
|
+
### Step 3: Mechanical Review
|
|
57
|
+
|
|
58
|
+
Verify:
|
|
59
|
+
|
|
60
|
+
- Spacing and formatting consistency
|
|
61
|
+
- Style choices applied uniformly throughout
|
|
62
|
+
- Special elements (lists, quotes, citations)
|
|
63
|
+
- Proper use of italics and formatting
|
|
64
|
+
- Number formatting (numerals vs. spelled out)
|
|
65
|
+
- Link formatting and descriptions
|
|
66
|
+
|
|
67
|
+
### Step 4: Output Results
|
|
68
|
+
|
|
69
|
+
Present findings using this structure:
|
|
70
|
+
|
|
71
|
+
```
|
|
72
|
+
DOCUMENT REVIEW SUMMARY
|
|
73
|
+
=====================
|
|
74
|
+
Document Type: [type]
|
|
75
|
+
Word Count: [approximate]
|
|
76
|
+
Overall Assessment: [brief overview]
|
|
77
|
+
|
|
78
|
+
ERRORS FOUND: [total number]
|
|
79
|
+
|
|
80
|
+
DETAILED CORRECTIONS
|
|
81
|
+
===================
|
|
82
|
+
|
|
83
|
+
[For each error found:]
|
|
84
|
+
|
|
85
|
+
**Location**: [Paragraph #, Sentence #]
|
|
86
|
+
**Issue Type**: [Grammar/Punctuation/Mechanics/Style Guide]
|
|
87
|
+
**Original**: "[exact text with error]"
|
|
88
|
+
**Correction**: "[corrected text]"
|
|
89
|
+
**Rule Reference**: [Specific style guide rule violated]
|
|
90
|
+
**Explanation**: [Brief explanation of why this is an error]
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
RECURRING ISSUES
|
|
95
|
+
===============
|
|
96
|
+
[List patterns of errors that appear multiple times]
|
|
97
|
+
|
|
98
|
+
STYLE GUIDE COMPLIANCE CHECKLIST
|
|
99
|
+
==============================
|
|
100
|
+
✓ [Rule followed correctly]
|
|
101
|
+
✗ [Rule violated - with count of violations]
|
|
102
|
+
|
|
103
|
+
FINAL RECOMMENDATIONS
|
|
104
|
+
===================
|
|
105
|
+
[2-3 actionable suggestions for improving the draft]
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## Style Guide Reference
|
|
109
|
+
|
|
110
|
+
The complete Every style guide is included in [EVERY_WRITE_STYLE.md](./references/EVERY_WRITE_STYLE.md). Key areas to focus on:
|
|
111
|
+
|
|
112
|
+
- **Quick Rules**: Title case for headlines, sentence case elsewhere
|
|
113
|
+
- **Tone**: Active voice, avoid overused words (actually, very, just), be specific
|
|
114
|
+
- **Numbers**: Spell out one through nine; use numerals for 10+
|
|
115
|
+
- **Punctuation**: Oxford commas, em dashes without spaces, proper quotation mark usage
|
|
116
|
+
- **Capitalization**: Lowercase job titles, company as singular (it), teams as plural (they)
|
|
117
|
+
- **Emphasis**: Italics only (no bold for emphasis)
|
|
118
|
+
- **Links**: 2-4 words, don't say "click here"
|
|
119
|
+
|
|
120
|
+
## Key Principles
|
|
121
|
+
|
|
122
|
+
- **Be specific**: Always quote the exact text with the error
|
|
123
|
+
- **Reference rules**: Cite the specific style guide rule for each correction
|
|
124
|
+
- **Maintain voice**: Preserve the author's voice while correcting errors
|
|
125
|
+
- **Prioritize clarity**: Focus on changes that improve readability
|
|
126
|
+
- **Be constructive**: Frame feedback to help writers improve
|
|
127
|
+
- **Flag ambiguous cases**: When style guide doesn't address an issue, explain options and recommend the clearest choice
|
|
128
|
+
|
|
129
|
+
## Common Areas to Focus On
|
|
130
|
+
|
|
131
|
+
Based on Every's style guide, pay special attention to:
|
|
132
|
+
|
|
133
|
+
- Punctuation (comma usage, semicolons, apostrophes, quotation marks)
|
|
134
|
+
- Capitalization (proper nouns, titles, sentence starts)
|
|
135
|
+
- Numbers (when to spell out vs. use numerals)
|
|
136
|
+
- Passive voice (replace with active whenever possible)
|
|
137
|
+
- Overused words (actually, very, just)
|
|
138
|
+
- Lists (parallel structure, punctuation, capitalization)
|
|
139
|
+
- Hyphenation (compound adjectives, except adverbs)
|
|
140
|
+
- Word usage (fewer vs. less, they vs. them)
|
|
141
|
+
- Company references (singular "it", teams as plural "they")
|
|
142
|
+
- Job title capitalization
|