@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,106 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: frontend-anti-slop
|
|
3
|
+
description: This skill should be used when auditing React/Next.js source for Hallmark-adapted anti-AI-slop patterns via a deterministic Tailwind/JSX scanner.
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
<!-- grok-harness-invoke:start -->
|
|
8
|
+
**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.
|
|
9
|
+
<!-- grok-harness-invoke:end -->
|
|
10
|
+
|
|
11
|
+
# frontend-anti-slop
|
|
12
|
+
|
|
13
|
+
A deterministic source-static audit for React/Next.js components that flags AI-default visual and microinteraction patterns adapted from [Nutlope/hallmark](https://github.com/Nutlope/hallmark) (MIT). v1 ships 18 Tier 1 ripgrep gates over `apps/web-platform/{app,components}/**/*.{tsx,jsx,css}`, `apps/web-platform/server/**/*.{ts,tsx}`, and the Eleventy docs site. v1.5 (post-calibration) adds a Tier 2 LLM-judgment reviewer agent for the ~12 gates regex cannot resolve.
|
|
14
|
+
|
|
15
|
+
> **Attribution.** Rule set and anti-pattern names adapted from Hallmark (Together AI, MIT). Verbatim license at [`/LICENSES/hallmark.MIT.txt`](../../../../LICENSES/hallmark.MIT.txt); upstream stanza in [`/plugins/soleur/NOTICE`](../../NOTICE).
|
|
16
|
+
|
|
17
|
+
## When this skill fires
|
|
18
|
+
|
|
19
|
+
- Invoked by `soleur:review` when a PR touches `apps/web-platform/(app|components)/.*\.(tsx|jsx|css)$`. See `plugins/soleur/skills/review/SKILL.md § Anti-slop Scanner Hook`.
|
|
20
|
+
- Manual: `soleur:frontend-anti-slop --paths <files-or-dirs> [--dry-run|--json] [--rule <ID>]`.
|
|
21
|
+
|
|
22
|
+
The scanner is **non-blocking by design** — exit code is 0 regardless of finding count. v1 ships in calibration mode: findings surface in PR review output for operator review, no auto-filing to GitHub issues. Calibration unlocks v1.5 (auto-file + Tier 2 agent) at ≤ 10% FP rate over ≥ 20 findings ≥ 2 weeks.
|
|
23
|
+
|
|
24
|
+
## Invocation
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
# Default — scans staged + modified frontend files vs. the index.
|
|
28
|
+
bun run plugins/soleur/skills/frontend-anti-slop/scripts/tier1-scan.ts
|
|
29
|
+
|
|
30
|
+
# Explicit paths (files or directories).
|
|
31
|
+
bun run plugins/soleur/skills/frontend-anti-slop/scripts/tier1-scan.ts \
|
|
32
|
+
--paths apps/web-platform/components/ui/ --json
|
|
33
|
+
|
|
34
|
+
# Single rule.
|
|
35
|
+
bun run plugins/soleur/skills/frontend-anti-slop/scripts/tier1-scan.ts \
|
|
36
|
+
--paths apps/web-platform/components/ --rule GRADIENT-TEXT --json
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Skill tool form:
|
|
40
|
+
|
|
41
|
+
```text
|
|
42
|
+
Skill(skill: "soleur:frontend-anti-slop")
|
|
43
|
+
Skill(skill: "soleur:frontend-anti-slop", args: "--paths apps/web-platform/components/ui/ --json")
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Scope
|
|
47
|
+
|
|
48
|
+
| In scope (v1) | Out of scope |
|
|
49
|
+
|---|---|
|
|
50
|
+
| `apps/web-platform/(app|components)/**/*.{tsx,jsx,css}` | Other apps in the monorepo (`web-platform-docs`, infra apps) |
|
|
51
|
+
| `apps/web-platform/server/**/*.{ts,tsx}` (email/HTML templates) | App-code remediation of pre-existing findings (forward-gate only) |
|
|
52
|
+
| 18 deterministic Tier 1 gates (regex-only) | Tier 2 LLM-judgment gates (deferred to v1.5) |
|
|
53
|
+
| Source-static analysis | Rendered-DOM / screenshot analysis (that's [`soleur:ux-audit`](../ux-audit/SKILL.md)) |
|
|
54
|
+
| JSON output matching [`finding.schema.json`](../ux-audit/references/finding.schema.json) | Auto-filing GitHub issues |
|
|
55
|
+
| `<!-- anti-slop:disable RULE_ID reason="..." -->` per-file overrides | AST-based gates (CARD-IN-CARD, focus states) — v1.5 with ts-morph |
|
|
56
|
+
|
|
57
|
+
## Rule set
|
|
58
|
+
|
|
59
|
+
The 18 Tier 1 gates live in [slop-rules.md](./references/slop-rules.md) as a parsed Markdown table. Each row: `id`, `tier`, `category`, `hallmark_gate`, `severity`, `pattern`, `message`, `suggested_fix`. The scanner filters to `tier === 1` and runs each `pattern` regex line-by-line over target files.
|
|
60
|
+
|
|
61
|
+
React/Tailwind code examples for each rule live in [anti-patterns.md](./references/anti-patterns.md).
|
|
62
|
+
|
|
63
|
+
### Brand rules (blocking)
|
|
64
|
+
|
|
65
|
+
Three `brand`-category gates ship alongside the Hallmark-derived anti-slop rules: BRAND-RAW-HEX (high), BRAND-WHITE-ON-GOLD (high), BRAND-NONZERO-CORNER (medium). Unlike the advisory anti-slop findings, a finding whose originating rule is `category: brand` **and** `severity: high` makes the scanner **exit non-zero (blocking)** — it is a required-fix gate, not calibration-mode triage. Brand `medium` findings and all non-brand `anti-slop` findings stay advisory (exit 0). The emitted Finding always serializes `category: "anti-slop"`; the `brand` discriminator lives only on the Rule, so `--json` output stays conformant to `finding.schema.json`.
|
|
66
|
+
|
|
67
|
+
BRAND-RAW-HEX ("use a wired design token, not a literal color") is **project-agnostic** — Soleur users adopting this scanner should keep it as-is, but re-base BRAND-WHITE-ON-GOLD / BRAND-NONZERO-CORNER on their own `brand-guide.md` palette and wired token file rather than the hardcoded Soleur gold identity.
|
|
68
|
+
|
|
69
|
+
Findings emit as JSON conforming to `finding.schema.json`:
|
|
70
|
+
|
|
71
|
+
```json
|
|
72
|
+
{
|
|
73
|
+
"route": "",
|
|
74
|
+
"selector": "<file-path>#<RULE-ID>",
|
|
75
|
+
"category": "anti-slop",
|
|
76
|
+
"severity": "high",
|
|
77
|
+
"title": "<rule message> (rule <ID>)",
|
|
78
|
+
"description": "<rule message>. Detected at <path>:<line>.",
|
|
79
|
+
"fix_hint": "<rule suggested_fix>",
|
|
80
|
+
"screenshot_ref": "/tmp/anti-slop/no-screenshot.png"
|
|
81
|
+
}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
The `selector` overload (`<file>#<RULE-ID>`) reuses the existing `soleur:ux-audit` dedup hash (`sha256("route|selector|category")`) without a `Finding` interface change — see plan §"Research Reconciliation #2".
|
|
85
|
+
|
|
86
|
+
## Per-file rule disable
|
|
87
|
+
|
|
88
|
+
To intentionally use a flagged pattern (designer-mandated gradient, brand-specific font), add a comment in the source file:
|
|
89
|
+
|
|
90
|
+
```tsx
|
|
91
|
+
{/* anti-slop:disable GRADIENT-TEXT reason="brand-mandated marketing hero gradient" */}
|
|
92
|
+
<h1 className="bg-clip-text text-transparent bg-gradient-to-r from-soleur-accent-gradient-start to-soleur-accent-gradient-end">
|
|
93
|
+
...
|
|
94
|
+
</h1>
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Disable comments work in JSX comment form (`{/* ... */}`), HTML-comment form (`<!-- ... -->`), or CSS-comment form (`/* ... */`) — the scanner matches the literal `anti-slop:disable <RULE_ID>` substring.
|
|
98
|
+
|
|
99
|
+
## Calibration mode
|
|
100
|
+
|
|
101
|
+
v1 ships in calibration mode (no auto-filing). The promotion gate to v1.5 (auto-file + Tier 2 agent):
|
|
102
|
+
|
|
103
|
+
- ≥ 20 findings logged over ≥ 2 weeks of dogfood
|
|
104
|
+
- ≤ 10% operator-confirmed false-positive rate
|
|
105
|
+
|
|
106
|
+
The follow-up issue filed at merge tracks the calibration window. v1.5 picks up when the gate trips.
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
<!-- Adapted from Hallmark (MIT) — see /LICENSES/hallmark.MIT.txt -->
|
|
2
|
+
|
|
3
|
+
# Anti-patterns — React/Next.js named tells
|
|
4
|
+
|
|
5
|
+
Each entry: the tell, why it reads as AI-generated, and the fix in JSX/Tailwind form.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Critical
|
|
10
|
+
|
|
11
|
+
### The gradient headline (rule GRADIENT-TEXT)
|
|
12
|
+
|
|
13
|
+
```tsx
|
|
14
|
+
<h1 className="bg-clip-text text-transparent bg-gradient-to-r from-purple-500 to-pink-500">
|
|
15
|
+
Build the future of your stack
|
|
16
|
+
</h1>
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Three-class `bg-clip-text + text-transparent + bg-gradient-to-*` triad signals AI-generated faster than almost anything else.
|
|
20
|
+
|
|
21
|
+
**Fix.** Solid ink. If you want presence, reach for weight, italic, or a display face.
|
|
22
|
+
|
|
23
|
+
```tsx
|
|
24
|
+
<h1 className="font-display text-5xl font-medium tracking-tight">
|
|
25
|
+
Build the future of your stack
|
|
26
|
+
</h1>
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### Purple→blue gradient backgrounds (rule PURPLE-BLUE-GRADIENT)
|
|
30
|
+
|
|
31
|
+
```tsx
|
|
32
|
+
<section className="bg-gradient-to-br from-purple-600 to-blue-500 ...">
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
The single most-recognised AI aesthetic. Hero, CTA, badge — anywhere.
|
|
36
|
+
|
|
37
|
+
**Fix.** Pick one anchor hue. Tint neutrals for warmth instead of pouring gradient.
|
|
38
|
+
|
|
39
|
+
### Inter / Roboto / Open Sans everywhere (rule GENERIC-DISPLAY-FONT)
|
|
40
|
+
|
|
41
|
+
```tsx
|
|
42
|
+
import { Inter } from "next/font/google";
|
|
43
|
+
const inter = Inter({ subsets: ["latin"] });
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
…and `<html className={inter.className}>`. One-face Inter page is a template page.
|
|
47
|
+
|
|
48
|
+
**Fix.** Pair a distinctive display face (Fraunces, Instrument Serif, GT America Mono, etc.) with a refined body face. Or load a real type file from a foundry.
|
|
49
|
+
|
|
50
|
+
### Card-in-card (deferred to v1.5 — CARD-IN-CARD)
|
|
51
|
+
|
|
52
|
+
```tsx
|
|
53
|
+
<div className="rounded-xl border ...">
|
|
54
|
+
<div className="rounded-lg border ...">
|
|
55
|
+
<div className="rounded border ...">{label}</div>
|
|
56
|
+
</div>
|
|
57
|
+
</div>
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Three layers of border + radius with no semantic reason. Visual nesting where one container would say it.
|
|
61
|
+
|
|
62
|
+
**Fix.** Pick one containment layer — usually the outer one is wrong.
|
|
63
|
+
|
|
64
|
+
### Side-stripe card (rule SIDE-STRIPE-CARD)
|
|
65
|
+
|
|
66
|
+
```tsx
|
|
67
|
+
<div className="border-l-4 border-purple-500 ...">
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Bootstrap-era hangover. Reads as "alert box" muscle memory.
|
|
71
|
+
|
|
72
|
+
**Fix.** Drop the stripe. Use the header rule, or vary the card surface tone.
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## Microinteractions
|
|
77
|
+
|
|
78
|
+
### `transition-all` (rule TRANSITION-ALL)
|
|
79
|
+
|
|
80
|
+
```tsx
|
|
81
|
+
<button className="transition-all duration-300 hover:scale-105 ...">
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Animates every property — including layout-affecting ones — at the same curve and duration. Composability fail.
|
|
85
|
+
|
|
86
|
+
**Fix.** Name the property.
|
|
87
|
+
|
|
88
|
+
```tsx
|
|
89
|
+
<button className="transition-opacity duration-200 hover:opacity-90 ...">
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Uniform `hover:scale-105` everywhere (rule UNIFORM-HOVER-SCALE)
|
|
93
|
+
|
|
94
|
+
When every card, button, and tile in a file lifts by the same 5 %, the page reads as one undifferentiated surface.
|
|
95
|
+
|
|
96
|
+
**Fix.** Reserve scale for primary CTAs. Other surfaces vary: opacity, colour, shadow.
|
|
97
|
+
|
|
98
|
+
### Bouncy easing on UI (rule BOUNCY-EASING-UI)
|
|
99
|
+
|
|
100
|
+
```css
|
|
101
|
+
transition-timing-function: cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Overshoot is a physical-world cue (a tossed envelope settles past the centre). On a tooltip or modal it reads as "look at me" — the opposite of what UI motion should do.
|
|
105
|
+
|
|
106
|
+
**Fix.** Reserve overshoot for physical interactions. Use cubic-out (`cubic-bezier(0.0, 0.0, 0.2, 1)`) for UI.
|
|
107
|
+
|
|
108
|
+
### Animating dimension props (rule ANIM-DIMENSION-PROPS)
|
|
109
|
+
|
|
110
|
+
```tsx
|
|
111
|
+
<div className="transition-width duration-500 ...">
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Width / height / top / left / margin / padding all trigger layout, which is expensive and jank-prone.
|
|
115
|
+
|
|
116
|
+
**Fix.** Animate `transform` + `opacity` only. For "growing" effects, use `scale` or `translate`.
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## Comprehension
|
|
121
|
+
|
|
122
|
+
### Placeholder names (rule PLACEHOLDER-NAMES)
|
|
123
|
+
|
|
124
|
+
```tsx
|
|
125
|
+
<blockquote>
|
|
126
|
+
"Soleur replaced our marketing team." — Jane Doe, CEO of Acme
|
|
127
|
+
</blockquote>
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Jane Doe / John Smith / Acme / Nexus / Seamless / Unleash are the AI-defaults the model reaches for when no real testimonial exists.
|
|
131
|
+
|
|
132
|
+
**Fix.** Use a real customer name (with permission) or remove the testimonial. An empty quote slot is taste; a fake one is slop.
|
|
133
|
+
|
|
134
|
+
### Prose width out of range (rule PROSE-WIDTH-OUT-OF-RANGE)
|
|
135
|
+
|
|
136
|
+
```tsx
|
|
137
|
+
<article className="max-w-[120ch] ...">
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Under 45 ch the measure is choppy; over 75 ch the eye loses the line return.
|
|
141
|
+
|
|
142
|
+
**Fix.** Stay in 45–75 ch.
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## Visual implementation
|
|
147
|
+
|
|
148
|
+
### Zero-chroma OKLCH neutrals (rule ZERO-CHROMA-OKLCH)
|
|
149
|
+
|
|
150
|
+
```css
|
|
151
|
+
--color-surface-1: oklch(98% 0 0);
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
Pure greys read as flat — every paper colour in the world is tinted somewhere.
|
|
155
|
+
|
|
156
|
+
**Fix.** Push chroma to at least 0.005 toward the anchor hue.
|
|
157
|
+
|
|
158
|
+
### Off-scale spacing (rule OFF-SCALE-SPACING)
|
|
159
|
+
|
|
160
|
+
```tsx
|
|
161
|
+
<div className="p-[17px] gap-[13px] m-[23px]">
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
Arbitrary px values not on the 4-px scale are an AI tell — the model picked a number to make something fit instead of using the system.
|
|
165
|
+
|
|
166
|
+
**Fix.** Use the named spacing scale, or adjust to the nearest 4-px multiple.
|
|
167
|
+
|
|
168
|
+
### Two icon libraries (rule TWO-ICON-LIBS)
|
|
169
|
+
|
|
170
|
+
```tsx
|
|
171
|
+
import { Search } from "lucide-react";
|
|
172
|
+
import { HomeIcon } from "@heroicons/react/24/outline";
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
Two icon faces on the same page is the icon-set tell — the model reached for whichever it remembered for each glyph.
|
|
176
|
+
|
|
177
|
+
**Fix.** Pick one library and commit. Lucide and Phosphor have full coverage.
|
|
178
|
+
|
|
179
|
+
### Pure `#000` / `#fff` base (rule PURE-BW-BASE)
|
|
180
|
+
|
|
181
|
+
```tsx
|
|
182
|
+
<html className="bg-black text-white">
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
Pure black / pure white are exhausted defaults. Real product palettes tint the base.
|
|
186
|
+
|
|
187
|
+
**Fix.** Tint every base. `oklch(98% 0.005 80)` instead of `oklch(100% 0 0)`.
|
|
188
|
+
|
|
189
|
+
### Centred-everything hero (rule MIN-H-SCREEN-CENTERED-HERO)
|
|
190
|
+
|
|
191
|
+
```tsx
|
|
192
|
+
<section className="min-h-screen flex items-center justify-center">
|
|
193
|
+
<div className="text-center"> ... </div>
|
|
194
|
+
</section>
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
Eyebrow, title, lede, CTA all centred on the same axis is the strongest hero fingerprint.
|
|
198
|
+
|
|
199
|
+
**Fix.** Pick at most two centred elements. Break alignment for the others.
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
<!-- Adapted from Hallmark (MIT) — see /LICENSES/hallmark.MIT.txt -->
|
|
2
|
+
|
|
3
|
+
# Slop rules — React/Next.js Tier 1 (v1) + Tier 2 (v1.5 documented)
|
|
4
|
+
|
|
5
|
+
The scanner parses the **active rules** table below. Rows with `tier: 1` ship in v1 as deterministic ripgrep gates over `apps/web-platform/{app,components}/**/*.{tsx,jsx,css}`. Rows with `tier: 2` are kept here so v1.5 can wire them into the LLM-judgment reviewer agent without re-derivation; the v1 scanner ignores them.
|
|
6
|
+
|
|
7
|
+
Each rule maps 1:1 (or 1:few) to a gate from Hallmark's slop-test. The `hallmark_gate` column points back to the gate number in [`hallmark/references/slop-test.md`](https://github.com/Nutlope/hallmark/blob/main/references/slop-test.md).
|
|
8
|
+
|
|
9
|
+
Per-file disable comment: `<!-- anti-slop:disable RULE_ID reason="..." -->` (the scanner honors this; emitted alongside a `disabled` finding in `--verbose` mode for audit trail).
|
|
10
|
+
|
|
11
|
+
## Active rules
|
|
12
|
+
|
|
13
|
+
| id | tier | category | hallmark_gate | severity | pattern | message | suggested_fix |
|
|
14
|
+
|---|---|---|---|---|---|---|---|
|
|
15
|
+
| GRADIENT-TEXT | 1 | visual | 5 | high | `\bbg-clip-text\b.*\btext-transparent\b.*\bbg-gradient-to-` | `bg-clip-text + text-transparent + bg-gradient-to-*` triad — gradient-fill headline reads as AI default. | Use solid ink. Reach for weight, italic, or a display face for emphasis. |
|
|
16
|
+
| GENERIC-DISPLAY-FONT | 1 | visual | 1 | medium | `import\s*\{\s*(Inter\|Roboto\|Open_Sans\|Poppins\|Lato)\s*[\},].*from\s*["']next/font/google` | Generic display-font import. One-font Inter/Roboto/Poppins page is a template page. | Pair a distinctive display face with a refined body face. |
|
|
17
|
+
| PURPLE-BLUE-GRADIENT | 1 | visual | 2 | medium | `bg-gradient-to-\w+\s+(?:[^"]*\s)?from-(?:purple\|violet\|fuchsia)-\d+\s+(?:[^"]*\s)?to-(?:blue\|cyan\|sky)-` | Purple→blue (or violet→cyan) gradient — single most-recognised AI aesthetic. | Pick a single anchor hue. No gradient backgrounds. Tint neutrals for warmth. |
|
|
18
|
+
| SIDE-STRIPE-CARD | 1 | visual | 6 | medium | `\bborder-l-4\b.*\bborder-(?:purple\|blue\|pink\|indigo\|emerald)-` | Thick coloured left side-stripe on card — common Bootstrap-era tell. | Drop the stripe. Use a single header rule or vary card surface instead. |
|
|
19
|
+
| MIN-H-SCREEN-CENTERED-HERO | 1 | visual | 7 | low | `\bmin-h-screen\b.*\bflex\b.*\bitems-center\b.*\bjustify-center\b` | `min-h-screen` + centred-everything hero. | Pick at most two centred elements; break alignment for the others. |
|
|
20
|
+
| PURE-BW-BASE | 1 | visual | 8 | medium | `<(?:html\|body\|main)\b[^>]*\bbg-(?:black\|white)\b\|\bbg-(?:black\|white)\b[^"]*\b(?:min-h-screen\|min-h-dvh\|h-screen)\b\|\b(?:min-h-screen\|min-h-dvh\|h-screen)\b[^"]*\bbg-(?:black\|white)\b` | Raw `bg-black` / `bg-white` on root layout / page wrapper. | Tint every neutral toward the anchor hue (≥ 0.005 chroma). |
|
|
21
|
+
| TRANSITION-ALL | 1 | microinteractions | 11 | low | `\btransition-all\b` | `transition-all` — animates every property. Composability fail. | Name the property: `transition-opacity`, `transition-colors`, etc. |
|
|
22
|
+
| UNIFORM-HOVER-SCALE | 1 | microinteractions | 12 | low | `\bhover:scale-105\b` | Uniform `hover:scale-105`. Fires when ≥ 4 occurrences in the same file. | Reserve scale for primary CTAs. Other surfaces vary: colour, shadow, opacity. |
|
|
23
|
+
| BOUNCY-EASING-UI | 1 | microinteractions | 13 | medium | `cubic-bezier\(0\.34,\s*1\.56` | Bouncy / overshoot easing on UI state changes. | Reserve overshoot for physical interactions only. Use cubic-out for UI. |
|
|
24
|
+
| ANIM-DIMENSION-PROPS | 1 | microinteractions | 15 | medium | `\btransition-(?:width\|height\|top\|left\|margin\|padding)\b` | Animating layout-shifting props (width/height/top/left/margin/padding). | Animate `transform` + `opacity` only. |
|
|
25
|
+
| PLACEHOLDER-NAMES | 1 | comprehension | 20 | low | `\b(?:Jane Doe\|John Smith\|Acme(?: Inc\|, Inc)?\|Nexus\|Seamless\|Unleash)\b` | Placeholder names / startup-cliché names. | Use the user's actual customer names or remove the section. |
|
|
26
|
+
| ZERO-CHROMA-OKLCH | 1 | visual | 24 | low | `oklch\(\s*[0-9.]+%?\s+0\s+` | Zero-chroma OKLCH neutral — reads as flat. | Tint every neutral ≥ 0.005 chroma toward the anchor hue. |
|
|
27
|
+
| OFF-SCALE-SPACING | 1 | visual | 26 | low | `\b(?:p\|m\|gap)-\[(?:[1-3]\|[5-9]\|1[0-9]\|2[1-9]\|3[1-9])px\]` | Arbitrary spacing value not on the 4 px scale. | Use the named scale (`--space-3xs` … `--space-5xl`, multiples of 4 px). |
|
|
28
|
+
| PROSE-WIDTH-OUT-OF-RANGE | 1 | comprehension | 27 | low | `\bmax-w-\[(?:[0-9]\|[1-3][0-9]\|4[0-4]\|7[6-9]\|[89][0-9]\|1[0-9]{2})ch\]` | Prose `max-width` outside the 45–75 ch readable range. | Measure must read: under 45 ch is choppy, over 75 ch loses the eye. |
|
|
29
|
+
| TWO-ICON-LIBS | 1 | visual | 32 | medium | `from\s+["'](?:lucide-react\|react-icons[^"']*\|@heroicons/react[^"']*)["']` | Multiple icon libraries imported in the same file. | Pick one library. Two icon faces on the page is the icon-set tell. |
|
|
30
|
+
| BRAND-RAW-HEX | 1 | brand | 58 | high | `\[#(?:[0-9a-fA-F]{3}\|[0-9a-fA-F]{6})\]\|(?:background\|color\|border\|fill\|stroke)[A-Za-z]*\s*[:=]\s*["'{ ]*#[0-9a-fA-F]{3,8}` | raw hex in component/template — use a wired design token, not a literal color | Reference a wired design token (Tailwind theme key or `var(--token)`), never a literal `[#hex]` arbitrary value or inline `prop: #hex`. |
|
|
31
|
+
| BRAND-WHITE-ON-GOLD | 1 | brand | 58 | high | `(?:gold\|gradient\|accent\|#[CcDdBb][0-9A-Fa-f]{5})[^"\n]*(?:color\s*:\s*#(?:fff\|ffffff)\b\|text-white\b)\|(?:color\s*:\s*#(?:fff\|ffffff)\b\|text-white\b)[^"\n]*(?:gold\|gradient\|accent)` | white-on-gold fails AA — use forge-ink text-on-accent | Put forge-ink (dark) text on the gold/accent surface; white-on-gold fails WCAG AA contrast. |
|
|
32
|
+
| BRAND-NONZERO-CORNER | 1 | brand | 58 | medium | `border-radius\s*:\s*(?:0?\.[0-9]\|[1-9])\|\brounded(?:-(?:sm\|md\|lg\|xl\|2xl\|3xl\|full\|t\|b\|l\|r))?\b(?![\w-]*-none)` | non-zero corner — brand mandates 0px sharp corners | Use sharp `0px` corners (`rounded-none` / `border-radius: 0`); the brand identity mandates square corners. |
|
|
33
|
+
|
|
34
|
+
### Brand rules (blocking)
|
|
35
|
+
|
|
36
|
+
The `brand`-category rules are the only **blocking** gates in this scanner. A finding whose originating rule is `category: brand` **and** `severity: high` (BRAND-RAW-HEX, BRAND-WHITE-ON-GOLD) makes the scanner exit non-zero — a required-fix gate, not advisory triage. All non-brand `anti-slop` findings, and brand findings below `high` (BRAND-NONZERO-CORNER, `medium`), stay advisory (exit 0). The emitted Finding still serializes `category: "anti-slop"` (the `brand` discriminator lives only on the Rule, keeping `--json` output conformant to `finding.schema.json`).
|
|
37
|
+
|
|
38
|
+
**Project-agnostic vs. Soleur-specific.** BRAND-RAW-HEX is fully project-agnostic — "use a wired design token, not a literal color" holds for any project. Soleur users adopting this scanner should keep BRAND-RAW-HEX as-is, but re-base BRAND-WHITE-ON-GOLD and BRAND-NONZERO-CORNER on *their own* `brand-guide.md` palette and wired token file (e.g. swap the gold/accent contrast rule and the 0px-corner mandate for whatever their brand guide specifies) rather than hardcoding the Soleur gold identity.
|
|
39
|
+
|
|
40
|
+
## Documented Tier 2 rules (deferred to v1.5 — judgment-required)
|
|
41
|
+
|
|
42
|
+
| id | tier | category | hallmark_gate | defer | rationale |
|
|
43
|
+
|---|---|---|---|---|---|
|
|
44
|
+
| STRUCTURAL-FINGERPRINT | 2 | structural | 9 | v1.5 | Requires page-level macrostructure knowledge — "Hero → 3 features → CTA → footer" pattern detection needs LLM judgment. |
|
|
45
|
+
| EQUAL-RHYTHM-SECTIONS | 2 | structural | 10 | v1.5 | "Sections separated only by equal whitespace" requires layout analysis. |
|
|
46
|
+
| MULTI-HOVER-EFFECT | 2 | microinteractions | 14 | v1.5 | Detecting > 1 simultaneous hover effect (translate + scale + shadow + colour) needs JSX-prop walk. |
|
|
47
|
+
| FOCUS-RING-FADE-IN | 2 | microinteractions | 16 | v1.5 | "Focus ring transitions into existence" requires CSS-rule pairing analysis. |
|
|
48
|
+
| CELEBRATORY-SUCCESS-TOAST | 2 | microinteractions | 17 | v1.5 | Judgment: does the action have a visible effect already? |
|
|
49
|
+
| TOOLTIP-EQUAL-DELAYS | 2 | microinteractions | 18 | v1.5 | Requires cross-prop comparison on tooltip components. |
|
|
50
|
+
| CAROUSEL-NO-PAUSE | 2 | microinteractions | 19 | v1.5 | Requires component-shape analysis (carousel without pause-on-hover/focus). |
|
|
51
|
+
| INVENTED-METRIC | 2 | comprehension | 56 | v1.5 | Hardest judgment gate — distinguishes user-supplied numbers from fabricated ones. |
|
|
52
|
+
| REDRAWN-CHROME | 2 | visual | 57 | v1.5 | Requires recognising fake browser bar / phone frame / IDE chrome — visual shape, not regex. |
|
|
53
|
+
| MID-RENDER-TOKEN | 2 | visual | 58 | v1.5 | Detecting raw hex / oklch outside `:root` token blocks needs CSS-rule context awareness. |
|
|
54
|
+
| TWO-LINE-CLICKABLE | 2 | responsive | 59 | v1.5 | "Wraps to 2 lines" requires rendered-layout measurement, not source-static check. |
|
|
55
|
+
| EMOJI-AS-ICON | 2 | visual | 60 | v1.5 | Requires distinguishing emoji-as-content from emoji-as-feature-icon. Glyph context. |
|
|
56
|
+
|
|
57
|
+
## Cut from v1 (require AST — deferred to v1.5 with ts-morph)
|
|
58
|
+
|
|
59
|
+
These gates need parent-walk / JSX shape analysis and are explicitly **out of scope** for v1's regex-only scanner per Sharp Edge `2026-04-02-lazy-regex-semicolons-typescript-structural-tests.md`. They land in v1.5 alongside Tier 2.
|
|
60
|
+
|
|
61
|
+
| id | hallmark_gate | reason |
|
|
62
|
+
|---|---|---|
|
|
63
|
+
| CARD-IN-CARD | 4 | Requires JSX parent-walk (card-shape element nested inside same-shape element). |
|
|
64
|
+
| MISSING-FOCUS-VISIBLE-ACTIVE-DISABLED | 28 | Multi-selector cross-cutting; regex would false-positive on inherited motion. |
|
|
65
|
+
| ANIM-WITHOUT-REDUCED-MOTION | 29 | Paired-regex (animation + media query) — needs structural pairing. |
|