@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,248 @@
|
|
|
1
|
+
<!-- Adapted from gosprinto/compliance-skills (MIT) — see NOTICE -->
|
|
2
|
+
# PII Leakage Vectors
|
|
3
|
+
|
|
4
|
+
Loaded during repo scan only. These are the places PII most commonly
|
|
5
|
+
leaks in production — outside of models and schemas.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## V-01: Logging (Highest Frequency)
|
|
10
|
+
|
|
11
|
+
What to grep:
|
|
12
|
+
```
|
|
13
|
+
console.log( console.error( console.info(
|
|
14
|
+
logger.info( logger.debug( logger.warn( logger.error(
|
|
15
|
+
|
|
16
|
+
# JavaScript / Node
|
|
17
|
+
winston. bunyan. Timber.log(
|
|
18
|
+
|
|
19
|
+
# Python
|
|
20
|
+
print( logging.info( logging.debug( logging.warning(
|
|
21
|
+
logger.info( logger.debug( log.info(
|
|
22
|
+
|
|
23
|
+
# Ruby / Rails
|
|
24
|
+
Rails.logger. logger.info logger.debug puts
|
|
25
|
+
|
|
26
|
+
# Go
|
|
27
|
+
log.Printf( log.Println( fmt.Println( fmt.Printf(
|
|
28
|
+
zap. logrus.
|
|
29
|
+
|
|
30
|
+
# Java / Kotlin
|
|
31
|
+
System.out.print( log.info( logger.info( Logger.getLogger(
|
|
32
|
+
Timber.log(
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Flag when:
|
|
36
|
+
- Full objects logged: `console.log(user)`, `logger.info(req.body)`
|
|
37
|
+
- PII field names near log call: `logger.debug("email:", user.email)`
|
|
38
|
+
- Request/response bodies logged in middleware
|
|
39
|
+
|
|
40
|
+
Fix pattern:
|
|
41
|
+
```javascript
|
|
42
|
+
// Wrong
|
|
43
|
+
console.log('User updated:', user)
|
|
44
|
+
logger.info(req.body)
|
|
45
|
+
|
|
46
|
+
// Right
|
|
47
|
+
console.log('User updated:', user.id) // log ID only
|
|
48
|
+
logger.info({ action: 'user_updated', userId: user.id })
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## V-02: Error Handling (Second Most Common)
|
|
54
|
+
|
|
55
|
+
What to grep:
|
|
56
|
+
```
|
|
57
|
+
catch ( except: rescue
|
|
58
|
+
.catch( on_error rescue =>
|
|
59
|
+
error.message err.toString() JSON.stringify(error)
|
|
60
|
+
res.status(500).json( render json: e raise
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Flag when:
|
|
64
|
+
- Raw error objects returned to client: `res.json({ error: err })`
|
|
65
|
+
- Stack traces exposed: `res.send(err.stack)`
|
|
66
|
+
- Request body in error response: `res.json({ error: e, input: req.body })`
|
|
67
|
+
|
|
68
|
+
Fix pattern:
|
|
69
|
+
```javascript
|
|
70
|
+
// Wrong
|
|
71
|
+
app.use((err, req, res, next) => {
|
|
72
|
+
res.status(500).json({ error: err.message, stack: err.stack })
|
|
73
|
+
})
|
|
74
|
+
|
|
75
|
+
// Right
|
|
76
|
+
app.use((err, req, res, next) => {
|
|
77
|
+
logger.error({ errorId: uuid(), message: err.message }) // log server-side only
|
|
78
|
+
res.status(500).json({ error: 'Something went wrong', errorId })
|
|
79
|
+
})
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## V-03: Analytics / Tracking
|
|
85
|
+
|
|
86
|
+
What to grep:
|
|
87
|
+
```
|
|
88
|
+
mixpanel.track( amplitude.track( analytics.track(
|
|
89
|
+
segment.identify( heap.identify( posthog.capture(
|
|
90
|
+
gtag( fbq( _hsq.push(
|
|
91
|
+
rudderstack. braze. klaviyo.
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Flag when:
|
|
95
|
+
- PII passed as event properties: `track('Signup', { email, phone })`
|
|
96
|
+
- Full user object in identify: `identify(userId, { ...user })`
|
|
97
|
+
- Health or financial data in any analytics call
|
|
98
|
+
|
|
99
|
+
Fix pattern:
|
|
100
|
+
```javascript
|
|
101
|
+
// Wrong
|
|
102
|
+
mixpanel.track('Purchase', { email: user.email, card_last4, amount })
|
|
103
|
+
|
|
104
|
+
// Right
|
|
105
|
+
mixpanel.track('Purchase', { userId: user.id, amount }) // no PII in events
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## V-04: Caching
|
|
111
|
+
|
|
112
|
+
What to grep:
|
|
113
|
+
```
|
|
114
|
+
redis.set( redis.setex( cache.set(
|
|
115
|
+
Rails.cache.write( memcache.set( client.set(
|
|
116
|
+
Cache.put( CacheManager.
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Flag when:
|
|
120
|
+
- PII cached without TTL: `redis.set('user:123', JSON.stringify(user))`
|
|
121
|
+
- Full user object cached: includes email, phone, sensitive fields
|
|
122
|
+
- No encryption on cached PII
|
|
123
|
+
|
|
124
|
+
Fix pattern:
|
|
125
|
+
```javascript
|
|
126
|
+
// Wrong
|
|
127
|
+
redis.set(`user:${id}`, JSON.stringify(user))
|
|
128
|
+
|
|
129
|
+
// Right
|
|
130
|
+
redis.setex(`user:${id}`, 3600, JSON.stringify({
|
|
131
|
+
id: user.id,
|
|
132
|
+
name: user.name // only cache what's needed, set TTL
|
|
133
|
+
}))
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## V-05: External API Calls
|
|
139
|
+
|
|
140
|
+
What to grep:
|
|
141
|
+
```
|
|
142
|
+
fetch( axios.post( axios.get(
|
|
143
|
+
requests.post( http.Post( HTTParty.post(
|
|
144
|
+
RestClient.post( urllib.request( curl
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
Flag when:
|
|
148
|
+
- PII fields in request body to third-party URLs
|
|
149
|
+
- Full user object forwarded to external service
|
|
150
|
+
- Sensitive data in query parameters (visible in logs)
|
|
151
|
+
|
|
152
|
+
Fix pattern:
|
|
153
|
+
```javascript
|
|
154
|
+
// Wrong
|
|
155
|
+
await axios.post('https://api.vendor.com/users', {
|
|
156
|
+
email: user.email, ssn: user.ssn, dob: user.dob
|
|
157
|
+
})
|
|
158
|
+
|
|
159
|
+
// Right — send only what vendor actually needs
|
|
160
|
+
await axios.post('https://api.vendor.com/users', {
|
|
161
|
+
externalId: user.id,
|
|
162
|
+
verified: true
|
|
163
|
+
})
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
## V-06: API Responses / Serializers
|
|
169
|
+
|
|
170
|
+
What to grep:
|
|
171
|
+
```
|
|
172
|
+
res.json(user render json: @user jsonify(user)
|
|
173
|
+
to_json as_json serialize
|
|
174
|
+
JSON.stringify(user toJSON( transform(user
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
Flag when:
|
|
178
|
+
- Full model returned: `res.json(user)` — includes all fields
|
|
179
|
+
- `password_hash` included in response
|
|
180
|
+
- SSN, health fields, or financial data in response body
|
|
181
|
+
- `SELECT *` used in query feeding into response
|
|
182
|
+
|
|
183
|
+
Fix pattern:
|
|
184
|
+
```javascript
|
|
185
|
+
// Wrong
|
|
186
|
+
res.json(user)
|
|
187
|
+
|
|
188
|
+
// Right
|
|
189
|
+
res.json({
|
|
190
|
+
id: user.id,
|
|
191
|
+
name: user.name,
|
|
192
|
+
email: user.email
|
|
193
|
+
// password_hash, ssn, dob excluded explicitly
|
|
194
|
+
})
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
## V-07: File / Object Storage
|
|
200
|
+
|
|
201
|
+
What to grep:
|
|
202
|
+
```
|
|
203
|
+
s3.upload( s3.putObject( bucket.file(
|
|
204
|
+
fs.writeFile( fs.appendFile( open(filename, 'w')
|
|
205
|
+
Storage.upload( blob.upload( writeStream(
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
Flag when:
|
|
209
|
+
- PII written to unencrypted local files
|
|
210
|
+
- S3 bucket ACL not set to private
|
|
211
|
+
- No server-side encryption on S3 uploads
|
|
212
|
+
- Export files (CSV, JSON) containing PII stored without encryption
|
|
213
|
+
|
|
214
|
+
Fix pattern:
|
|
215
|
+
```javascript
|
|
216
|
+
// Wrong
|
|
217
|
+
s3.putObject({ Bucket: 'exports', Key: 'users.csv', Body: csvData })
|
|
218
|
+
|
|
219
|
+
// Right
|
|
220
|
+
s3.putObject({
|
|
221
|
+
Bucket: 'exports',
|
|
222
|
+
Key: 'users.csv',
|
|
223
|
+
Body: csvData,
|
|
224
|
+
ServerSideEncryption: 'AES256',
|
|
225
|
+
ACL: 'private'
|
|
226
|
+
})
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
---
|
|
230
|
+
|
|
231
|
+
## V-08: Config / Environment Files
|
|
232
|
+
|
|
233
|
+
What to grep:
|
|
234
|
+
```
|
|
235
|
+
.env .env.example config/database.yml
|
|
236
|
+
seed.rb seeds.js fixtures/
|
|
237
|
+
hardcoded @ hardcoded phone hardcoded SSN
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
Flag when:
|
|
241
|
+
- Real email addresses, phone numbers, SSNs in seed/fixture files
|
|
242
|
+
- PII in `.env.example` (often committed to git)
|
|
243
|
+
- Real credentials or PII in any committed config file
|
|
244
|
+
|
|
245
|
+
Fix:
|
|
246
|
+
- Replace with obviously fake data: `user@example.com`, `555-0100`, `000-00-0000`
|
|
247
|
+
- Add `.env` to `.gitignore` if not already present
|
|
248
|
+
- Audit git history for accidentally committed PII (use `git-secrets` or `truffleHog`)
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
<!-- Archived v1 prose-shape — preserved for one release cycle for regulatory-citation provenance. Will be removed at v3. -->
|
|
2
|
+
|
|
3
|
+
# Legal consent — ePrivacy + GDPR Art. 7 / 13 / 14 / 35
|
|
4
|
+
|
|
5
|
+
Written from scratch for Soleur. Consent and disclosure flows that the gate checks at design time. Output is advisory; the load-bearing enforcement is in the privacy policy + cookie banner + DPIA docs (`legal-audit` and `legal-generate` skills handle the document side).
|
|
6
|
+
|
|
7
|
+
## ePrivacy Directive (2002/58/EC) — cookie consent
|
|
8
|
+
|
|
9
|
+
The ePrivacy Directive predates GDPR but governs storage and access to information on terminal equipment (cookies, localStorage, IndexedDB, fingerprinting).
|
|
10
|
+
|
|
11
|
+
What the gate checks at plan time:
|
|
12
|
+
- Plan prose introducing analytics, A/B-testing, advertising, or cross-site tracking → check for a cookie-consent precondition (`Suggestion` if missing).
|
|
13
|
+
- Plan prose introducing a cookie banner → check it implements opt-IN (consent before set), not opt-OUT (set first, ask later) — opt-out cookie banners are non-compliant in EEA.
|
|
14
|
+
|
|
15
|
+
## Art. 7 — Conditions for consent
|
|
16
|
+
- Consent must be **freely given, specific, informed, unambiguous**.
|
|
17
|
+
- Withdrawal must be **as easy as giving** consent.
|
|
18
|
+
- Consent for special-category processing under Art. 9(2)(a) must be **explicit**.
|
|
19
|
+
|
|
20
|
+
What the gate checks: schema additions for `consent_given`, `terms_accepted_at`, `privacy_accepted_at` columns flag a `Suggestion` reminder to verify the UX matches Art. 7 ("freely given" rules out pre-checked boxes; "specific" rules out catch-all consent).
|
|
21
|
+
|
|
22
|
+
## Art. 13 + 14 — Information to be provided
|
|
23
|
+
|
|
24
|
+
Art. 13 (data collected from the subject) and Art. 14 (data collected from third parties) require disclosure of:
|
|
25
|
+
- Identity + contact of the controller
|
|
26
|
+
- DPO contact (if applicable)
|
|
27
|
+
- Purposes + lawful basis
|
|
28
|
+
- Recipients / categories of recipients
|
|
29
|
+
- Cross-border transfer destinations + safeguards
|
|
30
|
+
- Retention periods
|
|
31
|
+
- Data subject rights (access, rectification, erasure, restriction, portability, objection, withdrawal of consent, complaint to supervisory authority)
|
|
32
|
+
- Source (Art. 14 only)
|
|
33
|
+
|
|
34
|
+
What the gate checks: new schema columns / new vendor SDKs route to a one-liner reminder to update the privacy policy. The actual policy content lives in `legal-audit`.
|
|
35
|
+
|
|
36
|
+
## Art. 35 — Data Protection Impact Assessment (DPIA)
|
|
37
|
+
|
|
38
|
+
Required when processing is **likely to result in high risk** to data subjects. Indicators:
|
|
39
|
+
- Systematic + extensive automated evaluation (Art. 22 profiling).
|
|
40
|
+
- Large-scale special-category processing (Art. 9 columns + production scale).
|
|
41
|
+
- Systematic monitoring of public space.
|
|
42
|
+
|
|
43
|
+
What the gate checks: plan-time prose introducing one of the indicators surfaces a DPIA-required note. The DPIA template lives outside this skill.
|
|
44
|
+
|
|
45
|
+
## Boundary with other skills
|
|
46
|
+
- **legal-audit**: scans existing policy / terms / cookie / DPA documents for compliance gaps.
|
|
47
|
+
- **legal-generate**: drafts new legal documents.
|
|
48
|
+
- **gdpr-gate**: scans diffs and plans for design-time signals that demand a legal-audit / legal-generate follow-up.
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
<!-- Soleur-authored — see NOTICE -->
|
|
2
|
+
|
|
3
|
+
# Layer: Legal Consent (ePrivacy + GDPR Art. 7 / 13 / 14 / 35)
|
|
4
|
+
|
|
5
|
+
## When This Layer Loads
|
|
6
|
+
|
|
7
|
+
Auto-trigger inline when the gate is about to evaluate:
|
|
8
|
+
|
|
9
|
+
- Cookie banner code, consent UI, or any `consent` / `optIn` / `optOut` columns or fields
|
|
10
|
+
- A privacy notice, cookie policy, or terms-of-service text change
|
|
11
|
+
- A new third-party SDK / pixel / analytics integration
|
|
12
|
+
- A schema column whose name matches the Art. 9 special-category list (`fields.md`)
|
|
13
|
+
- A new automated-decision or profiling code path (Art. 22)
|
|
14
|
+
- A diff that touches `apps/web-platform/lib/auth/consent`, `apps/web-platform/app/api/consent`, or any path containing `consent`, `cookie-banner`, `privacy-notice`, or `dpia`
|
|
15
|
+
|
|
16
|
+
Also loads during full repo scan.
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## LC-01: ePrivacy cookie consent — strict opt-in, not opt-out
|
|
21
|
+
|
|
22
|
+
What to grep:
|
|
23
|
+
- `localStorage.setItem`, `sessionStorage.setItem`, `document.cookie =`, `Set-Cookie:`
|
|
24
|
+
- `consent.*=.*true` literals (presumed opt-in)
|
|
25
|
+
- Cookie-banner code that loads SDKs (`<script src=`, `gtag(`, `fbq(`, `posthog.init(`, `mixpanel.init(`) BEFORE a consent decision is captured
|
|
26
|
+
- HTML attributes `checked` on consent inputs
|
|
27
|
+
- Strings: "by using this site you agree", "implied consent", "we use cookies"
|
|
28
|
+
|
|
29
|
+
Flag when:
|
|
30
|
+
- A non-essential cookie or storage write happens before a consent decision is recorded
|
|
31
|
+
- A consent UI defaults to opt-in (pre-checked box, "Accept" pre-selected, no "Reject" parity button)
|
|
32
|
+
- Third-party scripts load on first paint without a consent-gate guard
|
|
33
|
+
- The "Reject all" path is harder to reach than "Accept all" (cookie-wall pattern)
|
|
34
|
+
|
|
35
|
+
Why it matters: ePrivacy Directive 2002/58/EC Art. 5(3) and German TTDSG §25 require **prior, freely-given, specific, informed, unambiguous** consent before any non-essential storage or transmission to the user terminal. Implied consent does not satisfy ePrivacy. Pre-checked boxes are explicitly invalid (CJEU C-673/17 *Planet49*).
|
|
36
|
+
|
|
37
|
+
Fix pattern:
|
|
38
|
+
- Gate every non-essential storage write and SDK load on a recorded consent decision.
|
|
39
|
+
- Default to "Reject all" — the consent banner must surface "Accept" and "Reject" with equal prominence on the same screen layer.
|
|
40
|
+
- Persist consent records (`consent_decisions` table) with timestamp, jurisdiction, banner version, and lawful-basis snapshot.
|
|
41
|
+
|
|
42
|
+
Regulation: ePrivacy Directive 2002/58/EC Art. 5(3); TTDSG §25; CJEU C-673/17 *Planet49*; EDPB Guidelines 05/2020 on consent.
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## LC-02: Art. 7 freely-given consent — no bundling, no pre-checks
|
|
47
|
+
|
|
48
|
+
What to grep:
|
|
49
|
+
- A single consent checkbox covering multiple processing purposes (marketing + analytics + product)
|
|
50
|
+
- `required.*consent`, `consent.*required` patterns where consent is a precondition for service access
|
|
51
|
+
- Pre-checked boxes (`<input type="checkbox" checked`)
|
|
52
|
+
- Consent text that lists multiple recipients or purposes in one bullet
|
|
53
|
+
|
|
54
|
+
Flag when:
|
|
55
|
+
- One consent action covers more than one processing purpose
|
|
56
|
+
- Consent is required to use the core service (consent is not freely given when refusal blocks access to a service the user paid for)
|
|
57
|
+
- Boxes default to checked
|
|
58
|
+
- Consent for marketing is bundled with consent for terms-of-service acceptance
|
|
59
|
+
|
|
60
|
+
Why it matters: Art. 7(2) requires consent to be **clearly distinguishable** from other matters; Art. 7(4) requires the freely-given nature to be assessed against bundling. EDPB Guidelines 05/2020 §3.1.2 explicitly bans pre-ticked boxes.
|
|
61
|
+
|
|
62
|
+
Fix pattern:
|
|
63
|
+
- Split consent into per-purpose toggles, each defaulting to OFF.
|
|
64
|
+
- Decouple service access from consent — the service must remain usable on refusal of non-essential consent.
|
|
65
|
+
- Render terms-of-service acceptance as a separate, non-bundled control.
|
|
66
|
+
|
|
67
|
+
Regulation: GDPR Art. 7; Recital 32; Recital 43; EDPB Guidelines 05/2020 on consent.
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## LC-03: Art. 13/14 disclosure — purposes, lawful basis, retention, recipients
|
|
72
|
+
|
|
73
|
+
What to grep:
|
|
74
|
+
- Privacy-notice copy, cookie-policy copy, account-creation flows
|
|
75
|
+
- Strings: "we may use", "we collect", "we share with"
|
|
76
|
+
- Schema migrations that add a new PII column without a corresponding privacy-notice update in the same diff
|
|
77
|
+
- API endpoints that send user data to a third party without a disclosure entry
|
|
78
|
+
|
|
79
|
+
Flag when:
|
|
80
|
+
- A new PII column is added but the privacy notice is unchanged in the same diff
|
|
81
|
+
- Disclosure copy lacks any of: processing purposes, lawful basis (Art. 6 / Art. 9), retention period, recipient categories, transfer mechanisms (Chapter V)
|
|
82
|
+
- A new third-party SDK is added without listing the recipient in the privacy notice
|
|
83
|
+
|
|
84
|
+
Why it matters: Art. 13 (data collected from the data subject) and Art. 14 (data collected from third parties) require disclosure at the moment data is obtained. Missing disclosure is a documentable Art. 13/14 violation regardless of any operational harm.
|
|
85
|
+
|
|
86
|
+
Fix pattern:
|
|
87
|
+
- Pair every PII-collecting code change with a privacy-notice diff in the same PR.
|
|
88
|
+
- Maintain a recipient register (`compliance-posture.md` Vendor DPAs) and link each disclosure entry to a register row.
|
|
89
|
+
- Render retention periods per data category, not as a single site-wide blanket.
|
|
90
|
+
|
|
91
|
+
Regulation: GDPR Art. 13; Art. 14; Recitals 60–62; EDPB Guidelines 04/2019 on transparency.
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## LC-04: Art. 35 DPIA trigger — profiling, Art. 9 at scale, public-space monitoring
|
|
96
|
+
|
|
97
|
+
What to grep:
|
|
98
|
+
- New automated-decision code paths (`if (score > X) reject`)
|
|
99
|
+
- ML-model inference for credit, hiring, insurance, or eligibility decisions
|
|
100
|
+
- Schema columns named `risk_score`, `eligibility`, `profile_*`, `predicted_*`
|
|
101
|
+
- Art. 9 special-category columns from `fields.md` combined with high-volume / public-facing endpoints
|
|
102
|
+
- Camera, microphone, location-tracking, or biometric capture in public spaces
|
|
103
|
+
|
|
104
|
+
Flag when:
|
|
105
|
+
- An automated decision produces a legal effect or similarly significant effect on a data subject without a human-review override (Art. 22)
|
|
106
|
+
- Art. 9 data is processed at scale (recital 91: "large scale" assessed by data subjects, volume, duration, geographic coverage)
|
|
107
|
+
- Public-space monitoring is added (CCTV, biometric kiosk, geolocation aggregation)
|
|
108
|
+
|
|
109
|
+
Why it matters: Art. 35 requires a Data Protection Impact Assessment **before** processing where a high risk is likely. Failing to run a DPIA is itself an Art. 35 violation (and indirectly an Art. 5(2) accountability violation) regardless of whether harm materialises. The CNIL, ICO, and BfDI have all issued fines for missing DPIAs.
|
|
110
|
+
|
|
111
|
+
Fix pattern:
|
|
112
|
+
- Run an Art. 35(7)-shaped DPIA before the feature ships. Required elements: (i) systematic description of the processing operations and purposes, (ii) assessment of necessity and proportionality, (iii) assessment of risks to data-subject rights and freedoms, (iv) measures envisaged to address the risks. Track the assessment in `compliance-posture.md` Active Items.
|
|
113
|
+
- Consult `soleur:legal:clo` and (for high-risk residual) the supervisory authority under Art. 36.
|
|
114
|
+
|
|
115
|
+
Regulation: GDPR Art. 35; Art. 36; Recitals 84, 89–96; EDPB Guidelines on DPIA (WP 248 rev.01).
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## LC-05: Art. 7(3) withdrawal — as easy as giving
|
|
120
|
+
|
|
121
|
+
What to grep:
|
|
122
|
+
- Account-settings UI, preference center, unsubscribe links
|
|
123
|
+
- API endpoints `POST /consent`, `DELETE /consent`, `PATCH /preferences`
|
|
124
|
+
- Email-template footers
|
|
125
|
+
- Strings: "to unsubscribe, contact support", "to revoke consent, email us"
|
|
126
|
+
|
|
127
|
+
Flag when:
|
|
128
|
+
- Withdrawal of consent requires more steps, more authentication, or more friction than giving consent did
|
|
129
|
+
- Withdrawal is gated behind a support ticket, email, or phone call when consent was a one-click action
|
|
130
|
+
- The withdrawal control is not present on the same surface where consent was originally given
|
|
131
|
+
- Withdrawal triggers downstream service degradation that wasn't disclosed at consent time
|
|
132
|
+
|
|
133
|
+
Why it matters: Art. 7(3) requires withdrawal to be **as easy as giving** consent. EDPB Guidelines 05/2020 §5.4 expand this to mean same channel, same number of steps, same UX surface. Asymmetric withdrawal is a documented violation regardless of intent.
|
|
134
|
+
|
|
135
|
+
Fix pattern:
|
|
136
|
+
- Mirror every consent control with a withdrawal control on the same surface.
|
|
137
|
+
- One-click consent → one-click withdrawal.
|
|
138
|
+
- Persist withdrawal events in `consent_decisions` with the same fidelity as the original consent grant; downstream processing must terminate within a documented SLA.
|
|
139
|
+
|
|
140
|
+
Regulation: GDPR Art. 7(3); Recital 42; EDPB Guidelines 05/2020 on consent §5.4.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Non-negotiables — GDPR-first, CCPA + HIPAA secondary
|
|
2
|
+
|
|
3
|
+
Written from scratch for Soleur. The gate's findings sit on these load-bearing articles. Treat each item as a falsifiable claim — if it cannot be answered "yes" against the change under audit, the gate emits a finding.
|
|
4
|
+
|
|
5
|
+
## GDPR (first-class)
|
|
6
|
+
|
|
7
|
+
### Art. 5 — Principles relating to processing
|
|
8
|
+
- **5(1)(a) lawfulness, fairness, transparency** — every processing activity has a lawful basis (Art. 6 / Art. 9) declared and reachable.
|
|
9
|
+
- **5(1)(b) purpose limitation** — purposes are specified explicitly; new uses cannot silently piggyback on old consent.
|
|
10
|
+
- **5(1)(c) data minimisation** — collect only what's needed for the declared purpose.
|
|
11
|
+
- **5(1)(d) accuracy** — corrections are propagated; no stale duplicates linger in audit logs.
|
|
12
|
+
- **5(1)(e) storage limitation** — retention is bounded; "forever" is not a retention policy.
|
|
13
|
+
- **5(1)(f) integrity and confidentiality** — encryption at rest + in transit (see data-in-transit layer).
|
|
14
|
+
|
|
15
|
+
### Art. 6 — Lawful basis (REQUIRED)
|
|
16
|
+
Every column or processing path needs ONE of: consent, contract, legal obligation, vital interests, public task, or legitimate interests. The gate looks for an annotated lawful basis (e.g., comment `-- LAWFUL_BASIS: contract`) on new schema columns. Missing annotation → `Important` finding (`check_id: GDPR-Art-6`).
|
|
17
|
+
|
|
18
|
+
### Art. 9 — Special categories (LOAD-BEARING)
|
|
19
|
+
Health, genetic, biometric, sex life, sexual orientation, trade-union, religious / philosophical, political, racial / ethnic — see `references/fields.md` Art. 9 list. Column-name match → `Critical` finding (`check_id: GDPR-Art-9`). Critical is reserved for Art. 9 in v1; demoting other findings to Important keeps the Critical signal load-bearing.
|
|
20
|
+
|
|
21
|
+
### Art. 17 — Right to erasure
|
|
22
|
+
Schema additions linking to a `users` table need a deletion path. `ON DELETE CASCADE` or an explicit anonymisation migration counts; bare FKs without either → `Important` finding (`check_id: GDPR-Art-17`).
|
|
23
|
+
|
|
24
|
+
### Art. 20 — Portability
|
|
25
|
+
See `layers/data-lifecycle.md` DL-04. Structured machine-readable export reachable for every PII table.
|
|
26
|
+
|
|
27
|
+
### Art. 25 — Data protection by design
|
|
28
|
+
The gate itself is a Soleur-side embodiment. New features touching regulated data must show evidence of the design-time decisions (DPIA when applicable, see Art. 35).
|
|
29
|
+
|
|
30
|
+
### Art. 30 — Records of processing activities (RoPA)
|
|
31
|
+
Every controller/processor with regular processing of regulated data maintains a RoPA. Schema additions that introduce a new processing purpose surface a RoPA-update reminder (advisory note, not a gated finding in v1).
|
|
32
|
+
|
|
33
|
+
### Art. 32 — Security of processing
|
|
34
|
+
Encryption, pseudonymisation, integrity, restoration. See `data-in-transit.md` and `api-layer.md`. Boundary with `soleur:engineering:review:security-sentinel`: OWASP/CWE patterns route to `soleur:engineering:review:security-sentinel`; column-level encryption-at-rest gaps route here.
|
|
35
|
+
|
|
36
|
+
### Art. 33 — Breach notification (72 hours)
|
|
37
|
+
Plan-time advisory only — the gate cannot enforce an incident-response runbook. Surfaces as a one-line note when `incident`, `breach`, or `notification` keywords appear in plan prose without a corresponding 72h handler.
|
|
38
|
+
|
|
39
|
+
### Art. 35 — DPIA threshold
|
|
40
|
+
High-risk processing (large-scale special-category, systematic monitoring, automated decision-making with significant effects) triggers a DPIA. The gate flags new schemas matching these patterns with a DPIA-required note.
|
|
41
|
+
|
|
42
|
+
### Chapter V — Cross-border transfers
|
|
43
|
+
See `layers/data-in-transit.md` DT-EU-CB. Each new non-EEA vendor demands a Vendor DPA row in `compliance-posture.md`.
|
|
44
|
+
|
|
45
|
+
## CCPA / CPRA (secondary)
|
|
46
|
+
|
|
47
|
+
- **§1798.100–.130** access + deletion + portability (mostly covered by GDPR Art. 15/17/20 audits).
|
|
48
|
+
- **§1798.135** opt-out signal — if the codebase processes browser hits, the gate notes Global Privacy Control handling absence as a `Suggestion`.
|
|
49
|
+
- **§1798.150** private right of action for data breaches — overlaps with Art. 32; no separate finding in v1.
|
|
50
|
+
|
|
51
|
+
## HIPAA (secondary)
|
|
52
|
+
|
|
53
|
+
- **45 CFR §164.502 minimum necessary** — overlaps with GDPR data minimisation.
|
|
54
|
+
- **45 CFR §164.312 technical safeguards** — encryption, audit controls, integrity. See data-in-transit, api-layer.
|
|
55
|
+
- **45 CFR §164.520 notice of privacy practices** — enforced at content layer (see `legal-audit` skill), not at this gate.
|
|
56
|
+
|
|
57
|
+
## What this gate is NOT
|
|
58
|
+
- Not a legal review. The disclaimer at top of every gate output says so.
|
|
59
|
+
- Not a runtime enforcement layer. v1 fires advisory output; v2 may add preflight gates.
|
|
60
|
+
- Not a substitute for a DPO. Critical findings prompt operator acknowledgment + GitHub issue creation; the issue is the human-routing channel.
|