@thedecipherist/claude-packs 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/CHANGELOG.md +680 -0
- package/LICENSE +21 -0
- package/README.md +316 -2
- package/bin/claude-packs.mjs +204 -0
- package/configurations/base/config.json +85 -0
- package/configurations/cpp/config.json +92 -0
- package/configurations/full-stack/config.json +152 -0
- package/configurations/go/config.json +96 -0
- package/configurations/node/config.json +100 -0
- package/configurations/python/config.json +97 -0
- package/configurations/synth-creator/config.json +148 -0
- package/global/hooks/gnu-shell.mjs +131 -0
- package/global/hooks/lib/program-read.mjs +196 -0
- package/global/hooks/lib/program-writes.mjs +177 -0
- package/global/hooks/lib/shell-writes.mjs +293 -0
- package/global/hooks/shell-traps.mjs +79 -0
- package/global/hooks/version-pin-guard.mjs +280 -0
- package/global/skills/latest-versions/SKILL.md +49 -0
- package/lib/backup.mjs +34 -0
- package/lib/claude-md.mjs +58 -0
- package/lib/config-cli.mjs +36 -0
- package/lib/configs.mjs +145 -0
- package/lib/coverage.mjs +86 -0
- package/lib/custom-packs.mjs +93 -0
- package/lib/doctor.mjs +115 -0
- package/lib/fix-plan.mjs +71 -0
- package/lib/git-tokens.mjs +64 -0
- package/lib/global.mjs +125 -0
- package/lib/hook-proof.mjs +28 -0
- package/lib/hook-timing.mjs +42 -0
- package/lib/hover-gate.mjs +29 -0
- package/lib/kit-lock.mjs +149 -0
- package/lib/layout.mjs +75 -0
- package/lib/logs.mjs +69 -0
- package/lib/manifest.mjs +24 -0
- package/lib/new.mjs +49 -0
- package/lib/once-only-report.mjs +54 -0
- package/lib/pack-manifest.mjs +20 -0
- package/lib/packs.mjs +107 -0
- package/lib/planner.mjs +59 -0
- package/lib/repeats.mjs +65 -0
- package/lib/repo-weight.mjs +28 -0
- package/lib/rules.mjs +40 -0
- package/lib/scan-detect.mjs +94 -0
- package/lib/scan.mjs +168 -0
- package/lib/selftest-cache.mjs +39 -0
- package/lib/settings.mjs +138 -0
- package/lib/shape-cli.mjs +76 -0
- package/lib/shape.mjs +4 -0
- package/lib/suggest.mjs +18 -0
- package/lib/switches.mjs +44 -0
- package/lib/symmetry-doctor.mjs +26 -0
- package/lib/sync.mjs +130 -0
- package/package.json +34 -4
- package/packs/ai/checks/boundary-computes-its-own-hash.json +30 -0
- package/packs/ai/checks/model-call-needs-boundary.json +29 -0
- package/packs/ai/checks/model-id-from-config.json +28 -0
- package/packs/ai/checks/model-output-validated.json +26 -0
- package/packs/ai/pack.json +38 -0
- package/packs/ai/rules/ai-input-sha-boundary.md +31 -0
- package/packs/ai/rules/llm-pipeline-security.md +26 -0
- package/packs/audio-core/checks/denormals-not-in-prepare.json +12 -0
- package/packs/audio-core/checks/dsp-without-apvts.json +12 -0
- package/packs/audio-core/checks/float-phase-or-rate.json +12 -0
- package/packs/audio-core/checks/juce-snap-to-zero-off.json +12 -0
- package/packs/audio-core/checks/keep-werror.json +12 -0
- package/packs/audio-core/checks/no-fast-math.json +14 -0
- package/packs/audio-core/checks/no-locale-change.json +12 -0
- package/packs/audio-core/checks/no-march-native.json +14 -0
- package/packs/audio-core/clang-tidy +28 -0
- package/packs/audio-core/hooks/lib/realtime-checks.mjs +56 -0
- package/packs/audio-core/hooks/param-id-lock.mjs +129 -0
- package/packs/audio-core/hooks/realtime-guard.mjs +67 -0
- package/packs/audio-core/pack.json +187 -0
- package/packs/audio-core/rules/audio-thread-realtime-safe.md +27 -0
- package/packs/audio-core/rules/audio-ui-thread-handoff.md +21 -0
- package/packs/audio-core/rules/boundary-tests-cross-the-boundary.md +16 -0
- package/packs/audio-core/rules/build-flags-safe.md +20 -0
- package/packs/audio-core/rules/cached-parameter-pointers.md +28 -0
- package/packs/audio-core/rules/clang-tidy-core-guidelines.md +21 -0
- package/packs/audio-core/rules/control-reaches-every-surface.md +23 -0
- package/packs/audio-core/rules/cpu-worst-case-per-block.md +26 -0
- package/packs/audio-core/rules/dc-block-after-asymmetry.md +22 -0
- package/packs/audio-core/rules/discrete-params-snap.md +19 -0
- package/packs/audio-core/rules/double-where-precision-matters.md +20 -0
- package/packs/audio-core/rules/filters-stable-under-modulation.md +29 -0
- package/packs/audio-core/rules/host-parameters-at-scale.md +24 -0
- package/packs/audio-core/rules/house-control-behaviours.md +34 -0
- package/packs/audio-core/rules/math-domain-guards.md +19 -0
- package/packs/audio-core/rules/modulated-delay-interpolation.md +22 -0
- package/packs/audio-core/rules/multiband-phase-coherent.md +22 -0
- package/packs/audio-core/rules/nonlinear-stages-antialiased.md +28 -0
- package/packs/audio-core/rules/note-ledger-and-pedals.md +22 -0
- package/packs/audio-core/rules/one-formula-per-value.md +20 -0
- package/packs/audio-core/rules/optimisations-are-null-tested.md +23 -0
- package/packs/audio-core/rules/oscillators-bandlimited.md +23 -0
- package/packs/audio-core/rules/output-limiter.md +23 -0
- package/packs/audio-core/rules/parameter-ids-never-change.md +20 -0
- package/packs/audio-core/rules/params-and-state-thread-safe.md +19 -0
- package/packs/audio-core/rules/params-snapshot-per-block.md +21 -0
- package/packs/audio-core/rules/patch-excludes-performance-controls.md +18 -0
- package/packs/audio-core/rules/per-sample-code-inlinable.md +22 -0
- package/packs/audio-core/rules/prepare-is-repeatable.md +23 -0
- package/packs/audio-core/rules/recursive-state-nan-guard.md +20 -0
- package/packs/audio-core/rules/reverb-loop-gain-bounded.md +24 -0
- package/packs/audio-core/rules/sample-accurate-midi.md +22 -0
- package/packs/audio-core/rules/sample-rate-and-block-size-from-host.md +23 -0
- package/packs/audio-core/rules/scoped-no-denormals.md +26 -0
- package/packs/audio-core/rules/smooth-continuous-parameters.md +22 -0
- package/packs/audio-core/rules/state-load-versioned-and-safe.md +22 -0
- package/packs/audio-core/rules/straight-on-and-aligned.md +21 -0
- package/packs/audio-core/rules/ui-matches-reference-look.md +21 -0
- package/packs/audio-core/rules/undo-one-gesture-one-step.md +21 -0
- package/packs/audio-core/rules/voice-steal-fades.md +21 -0
- package/packs/audio-core/rules/voice-sum-headroom.md +20 -0
- package/packs/audio-core/skills/analyse-reference-look/SKILL.md +21 -0
- package/packs/audio-core/skills/copy-and-prove/SKILL.md +98 -0
- package/packs/audio-core/skills/juce-realtime-audit/SKILL.md +22 -0
- package/packs/audio-core/skills/measure-tone/SKILL.md +20 -0
- package/packs/audio-core/skills/new-panel-control/SKILL.md +15 -0
- package/packs/audio-core/skills/prove-control/SKILL.md +23 -0
- package/packs/audio-core/skills/trace-parameter/SKILL.md +29 -0
- package/packs/audio-core/tools/lib/spectrum.mjs +112 -0
- package/packs/audio-core/tools/lib/wav.mjs +41 -0
- package/packs/audio-core/tools/tone-report.mjs +47 -0
- package/packs/base/checks/field-map-over-if-runs.json +25 -0
- package/packs/base/checks/lookup-over-if-chains.json +25 -0
- package/packs/base/checks/lookup-over-ternary-chains.json +20 -0
- package/packs/base/checks/no-code-after-midline-comment.json +12 -0
- package/packs/base/checks/one-walk-per-template.json +23 -0
- package/packs/base/checks/stub-reports-success.json +31 -0
- package/packs/base/checks/test-skip-on-failed-setup.json +17 -0
- package/packs/base/hooks/brief-guard.mjs +96 -0
- package/packs/base/hooks/code-shape.mjs +95 -0
- package/packs/base/hooks/dispatch-once.mjs +87 -0
- package/packs/base/hooks/file-size-guard.mjs +61 -0
- package/packs/base/hooks/folder-law.mjs +74 -0
- package/packs/base/hooks/git-guard.mjs +289 -0
- package/packs/base/hooks/lesson-checks.mjs +174 -0
- package/packs/base/hooks/lib/apply-edit.mjs +20 -0
- package/packs/base/hooks/lib/code-shapes.mjs +137 -0
- package/packs/base/hooks/lib/content.mjs +14 -0
- package/packs/base/hooks/lib/cpp-scan.mjs +94 -0
- package/packs/base/hooks/lib/dup-index.mjs +199 -0
- package/packs/base/hooks/lib/dup.mjs +127 -0
- package/packs/base/hooks/lib/elements.mjs +87 -0
- package/packs/base/hooks/lib/event-log.mjs +67 -0
- package/packs/base/hooks/lib/function-shapes.mjs +90 -0
- package/packs/base/hooks/lib/git-adds.mjs +20 -0
- package/packs/base/hooks/lib/git-guard-selftest.mjs +99 -0
- package/packs/base/hooks/lib/glob.mjs +33 -0
- package/packs/base/hooks/lib/hook-log.mjs +100 -0
- package/packs/base/hooks/lib/house.py +77 -0
- package/packs/base/hooks/lib/languages.mjs +66 -0
- package/packs/base/hooks/lib/layout.mjs +54 -0
- package/packs/base/hooks/lib/making-check-selftest.mjs +109 -0
- package/packs/base/hooks/lib/near-copies.mjs +76 -0
- package/packs/base/hooks/lib/program-read.mjs +196 -0
- package/packs/base/hooks/lib/program-writes.mjs +177 -0
- package/packs/base/hooks/lib/project.mjs +81 -0
- package/packs/base/hooks/lib/prose.mjs +11 -0
- package/packs/base/hooks/lib/pushed.mjs +201 -0
- package/packs/base/hooks/lib/repo-index.mjs +52 -0
- package/packs/base/hooks/lib/secret-patterns.mjs +18 -0
- package/packs/base/hooks/lib/selftest.mjs +45 -0
- package/packs/base/hooks/lib/shape-code.mjs +126 -0
- package/packs/base/hooks/lib/shape.mjs +294 -0
- package/packs/base/hooks/lib/shell-writes-selftest.mjs +65 -0
- package/packs/base/hooks/lib/shell-writes.mjs +293 -0
- package/packs/base/hooks/lib/turn.mjs +81 -0
- package/packs/base/hooks/lib/writes.mjs +71 -0
- package/packs/base/hooks/making-check.mjs +243 -0
- package/packs/base/hooks/making.mjs +106 -0
- package/packs/base/hooks/once-only.mjs +150 -0
- package/packs/base/hooks/placement-law.mjs +84 -0
- package/packs/base/hooks/repo-litter.mjs +75 -0
- package/packs/base/hooks/reuse-hint.mjs +75 -0
- package/packs/base/hooks/run-hooks.mjs +132 -0
- package/packs/base/hooks/secrets-guard.mjs +99 -0
- package/packs/base/hooks/shape-law.mjs +133 -0
- package/packs/base/hooks/suite-once.mjs +80 -0
- package/packs/base/hooks/template-law.mjs +148 -0
- package/packs/base/hooks/untrusted-boundary.mjs +53 -0
- package/packs/base/pack.json +214 -0
- package/packs/base/rules/a-control-is-seen-to-fire.md +27 -0
- package/packs/base/rules/behaviour-lives-with-its-kind.md +51 -0
- package/packs/base/rules/bug-fix-starts-red.md +25 -0
- package/packs/base/rules/field-map-over-if-runs.md +47 -0
- package/packs/base/rules/finished-work-lands.md +17 -0
- package/packs/base/rules/git-right-first-time.md +19 -0
- package/packs/base/rules/instances-by-index-identities-by-id.md +54 -0
- package/packs/base/rules/lookup-over-if-chains.md +49 -0
- package/packs/base/rules/making-line-first.md +14 -0
- package/packs/base/rules/open-items-tagged.md +17 -0
- package/packs/base/rules/plan-and-logs.md +22 -0
- package/packs/base/rules/references-use-anchors.md +19 -0
- package/packs/base/rules/refusals-are-judged.md +18 -0
- package/packs/base/rules/reuse-before-writing.md +15 -0
- package/packs/base/rules/secrets-never-committed.md +16 -0
- package/packs/base/rules/skill-writing.md +23 -0
- package/packs/base/rules/split-before-the-limit.md +14 -0
- package/packs/base/rules/subagent-dispatch.md +26 -0
- package/packs/base/rules/test-only-what-changed.md +17 -0
- package/packs/base/rules/test-the-template-once.md +22 -0
- package/packs/base/rules/untrusted-content-boundary.md +15 -0
- package/packs/base/skills/add-lesson-check/SKILL.md +26 -0
- package/packs/base/skills/fix-from-scan/SKILL.md +25 -0
- package/packs/base/skills/land-branch/SKILL.md +24 -0
- package/packs/base/skills/make-it-a-template/SKILL.md +23 -0
- package/packs/base/skills/pdf-to-md/SKILL.md +25 -0
- package/packs/base/skills/pick-tests/SKILL.md +20 -0
- package/packs/base/skills/pressure-test-skill/SKILL.md +23 -0
- package/packs/base/skills/prove-instances-identical/SKILL.md +37 -0
- package/packs/base/tools/shape-symmetry-selftest.mjs +66 -0
- package/packs/base/tools/shape-symmetry.mjs +178 -0
- package/packs/base/tools/test-verdict.mjs +75 -0
- package/packs/ci/checks/ci-permissions-stated.json +18 -0
- package/packs/ci/checks/ci-tools-pinned.json +14 -0
- package/packs/ci/pack.json +21 -0
- package/packs/ci/rules/ci-covers-what-ships.md +20 -0
- package/packs/ci/rules/generated-files-have-no-diff.md +15 -0
- package/packs/content-site/checks/captcha-is-not-constant.json +27 -0
- package/packs/content-site/checks/img-has-size.json +20 -0
- package/packs/content-site/checks/page-head-complete.json +26 -0
- package/packs/content-site/pack.json +22 -0
- package/packs/content-site/rules/content-has-one-source.md +23 -0
- package/packs/content-site/rules/media-is-sized.md +24 -0
- package/packs/content-site/rules/page-head-is-complete.md +26 -0
- package/packs/content-site/rules/public-forms-are-defended.md +27 -0
- package/packs/content-site/skills/publish-a-page/SKILL.md +21 -0
- package/packs/cpp/checks/cpp-clamp-before-cast.json +16 -0
- package/packs/cpp/checks/cpp-find-with-the-library.json +12 -0
- package/packs/cpp/checks/cpp-hardened-test-build.json +18 -0
- package/packs/cpp/checks/cpp-m-pi-not-standard.json +23 -0
- package/packs/cpp/checks/cpp-no-atoi.json +16 -0
- package/packs/cpp/checks/cpp-no-const-cast.json +16 -0
- package/packs/cpp/checks/cpp-no-float-loop-counter.json +16 -0
- package/packs/cpp/checks/cpp-no-getenv-in-product.json +22 -0
- package/packs/cpp/checks/cpp-no-mutable-global.json +20 -0
- package/packs/cpp/checks/cpp-no-mutable-local-static.json +23 -0
- package/packs/cpp/checks/cpp-no-unchecked-fwrite.json +17 -0
- package/packs/cpp/checks/cpp-no-using-namespace-in-header.json +19 -0
- package/packs/cpp/checks/cpp-no-zero-size-array.json +23 -0
- package/packs/cpp/checks/cpp-numbers-pi.json +16 -0
- package/packs/cpp/pack.json +22 -0
- package/packs/cpp/rules/cpp-absent-and-failed-are-types.md +24 -0
- package/packs/cpp/rules/cpp-builds-everywhere.md +26 -0
- package/packs/cpp/rules/cpp-faults-only-in-the-test-build.md +21 -0
- package/packs/cpp/rules/cpp-find-with-the-library.md +19 -0
- package/packs/cpp/rules/cpp-gates-share-one-reader.md +22 -0
- package/packs/cpp/rules/cpp-headers-declare.md +22 -0
- package/packs/cpp/rules/cpp-numbers-and-casts.md +22 -0
- package/packs/cpp/rules/cpp-repeats-become-templates.md +33 -0
- package/packs/cpp/rules/cpp-static-analysis-runs.md +22 -0
- package/packs/cpp/rules/cpp-thread-contracts-are-code.md +23 -0
- package/packs/cpp/skills/cpp-extract-template/SKILL.md +38 -0
- package/packs/docker/checks/alpine-with-native-build.json +13 -0
- package/packs/docker/checks/compose-db-needs-auth.json +14 -0
- package/packs/docker/checks/compose-image-pinned.json +14 -0
- package/packs/docker/checks/compose-no-hardcoded-ip.json +12 -0
- package/packs/docker/checks/compose-no-host-bind-for-data.json +18 -0
- package/packs/docker/checks/compose-no-plaintext-secret.json +13 -0
- package/packs/docker/checks/compose-no-swarm-ignored-keys.json +13 -0
- package/packs/docker/checks/compose-overlay-not-bridge.json +13 -0
- package/packs/docker/checks/compose-service-needs-healthcheck.json +11 -0
- package/packs/docker/checks/compose-service-needs-init.json +11 -0
- package/packs/docker/checks/copy-needs-chown-with-user.json +17 -0
- package/packs/docker/checks/copy-source-before-deps.json +13 -0
- package/packs/docker/checks/docker-exec-form.json +16 -0
- package/packs/docker/checks/dockerfile-needs-healthcheck.json +17 -0
- package/packs/docker/checks/dockerfile-needs-user.json +21 -0
- package/packs/docker/checks/dockerignore-has-the-basics.json +21 -0
- package/packs/docker/checks/gitattributes-forces-lf.json +17 -0
- package/packs/docker/checks/health-checks-nothing.json +25 -0
- package/packs/docker/checks/no-crlf-in-scripts.json +15 -0
- package/packs/docker/checks/no-latest-base.json +13 -0
- package/packs/docker/checks/no-secret-in-image.json +13 -0
- package/packs/docker/checks/no-sensitive-file-copy.json +13 -0
- package/packs/docker/checks/node-env-before-install.json +13 -0
- package/packs/docker/checks/npm-ci-not-install.json +13 -0
- package/packs/docker/pack.json +46 -0
- package/packs/docker/rules/compose-pinned-and-closed.md +21 -0
- package/packs/docker/rules/compose-swarm-safe.md +26 -0
- package/packs/docker/rules/docker-exec-form.md +19 -0
- package/packs/docker/rules/dockerfile-multistage.md +13 -0
- package/packs/docker/rules/dockerfile-production.md +25 -0
- package/packs/docker/skills/docker-diagnose/SKILL.md +23 -0
- package/packs/dynamic-data/checks/draft-on-the-server.json +27 -0
- package/packs/dynamic-data/checks/guard-does-its-job.json +28 -0
- package/packs/dynamic-data/checks/key-is-not-a-display-name.json +28 -0
- package/packs/dynamic-data/checks/no-code-from-data.json +29 -0
- package/packs/dynamic-data/checks/no-collection-from-request.json +27 -0
- package/packs/dynamic-data/checks/no-pipeline-from-stored-text.json +27 -0
- package/packs/dynamic-data/checks/no-regexp-from-stored-config.json +27 -0
- package/packs/dynamic-data/checks/no-template-from-stored-text.json +27 -0
- package/packs/dynamic-data/checks/save-takes-named-paths.json +27 -0
- package/packs/dynamic-data/pack.json +23 -0
- package/packs/dynamic-data/rules/a-list-is-a-saved-query.md +23 -0
- package/packs/dynamic-data/rules/definitions-are-validated-data.md +24 -0
- package/packs/dynamic-data/rules/every-dynamic-surface-has-a-boundary.md +29 -0
- package/packs/dynamic-data/rules/fields-have-owners.md +22 -0
- package/packs/dynamic-data/rules/imports-drop-nothing.md +26 -0
- package/packs/dynamic-data/rules/one-definition-many-surfaces.md +24 -0
- package/packs/dynamic-data/rules/one-fact-one-place.md +28 -0
- package/packs/dynamic-data/rules/rules-live-in-the-engine.md +29 -0
- package/packs/dynamic-data/rules/saves-are-patches.md +28 -0
- package/packs/dynamic-data/rules/tenant-costs-one-document.md +22 -0
- package/packs/dynamic-data/skills/design-a-definition/SKILL.md +24 -0
- package/packs/fastify/checks/api-routes-versioned.json +28 -0
- package/packs/fastify/checks/cookie-host-prefix.json +24 -0
- package/packs/fastify/checks/hijack-needs-try.json +28 -0
- package/packs/fastify/checks/no-cast-at-route-boundary.json +24 -0
- package/packs/fastify/checks/no-db-in-route-file.json +28 -0
- package/packs/fastify/checks/no-err-message-to-client.json +24 -0
- package/packs/fastify/checks/no-regexp-from-input.json +24 -0
- package/packs/fastify/checks/no-trust-proxy-true.json +25 -0
- package/packs/fastify/checks/one-error-body.json +26 -0
- package/packs/fastify/checks/origin-from-config-not-host.json +31 -0
- package/packs/fastify/checks/password-needs-slow-hash.json +30 -0
- package/packs/fastify/checks/sec-headers-present.json +28 -0
- package/packs/fastify/checks/secrets-compared-constant-time.json +24 -0
- package/packs/fastify/checks/sse-needs-error-listener.json +28 -0
- package/packs/fastify/checks/user-bytes-need-disposition.json +29 -0
- package/packs/fastify/pack.json +41 -0
- package/packs/fastify/rules/credentials-and-input.md +23 -0
- package/packs/fastify/rules/security-one-switch.md +28 -0
- package/packs/fastify/rules/streams-and-hijacks.md +22 -0
- package/packs/fastify/rules/tests-use-inject.md +13 -0
- package/packs/fastify/rules/three-layers.md +20 -0
- package/packs/fastify/rules/trust-config-not-headers.md +24 -0
- package/packs/full-stack/checks/no-express-no-vite.json +23 -0
- package/packs/full-stack/hooks/stack-guard.mjs +90 -0
- package/packs/full-stack/pack.json +76 -0
- package/packs/full-stack/rules/stack-is-fastify-and-nextjs.md +20 -0
- package/packs/go/checks/go-exec-result-ignored.json +15 -0
- package/packs/go/checks/go-unmarshal-error-ignored.json +15 -0
- package/packs/go/pack.json +21 -0
- package/packs/go/rules/go-errors-are-handled.md +22 -0
- package/packs/gpu-painter/checks/dawn-backends-and-validation.json +9 -0
- package/packs/gpu-painter/checks/dawn-no-spontaneous.json +10 -0
- package/packs/gpu-painter/checks/dawn-present-on-render-thread.json +17 -0
- package/packs/gpu-painter/checks/gpu-no-frame-stalls.json +12 -0
- package/packs/gpu-painter/checks/no-opengl-link.json +11 -0
- package/packs/gpu-painter/checks/no-opengl.json +13 -0
- package/packs/gpu-painter/hooks/browser-guard.py +196 -0
- package/packs/gpu-painter/pack.json +91 -0
- package/packs/gpu-painter/rules/dawn-build-and-shaders.md +27 -0
- package/packs/gpu-painter/rules/dawn-device-and-render-thread.md +26 -0
- package/packs/gpu-painter/rules/gpu-antialiasing.md +20 -0
- package/packs/gpu-painter/rules/gpu-blend-order.md +22 -0
- package/packs/gpu-painter/rules/gpu-bloom.md +20 -0
- package/packs/gpu-painter/rules/gpu-frame-budget.md +25 -0
- package/packs/gpu-painter/rules/gpu-frame-pacing-and-power.md +27 -0
- package/packs/gpu-painter/rules/gpu-frame-work.md +30 -0
- package/packs/gpu-painter/rules/gpu-golden-images.md +21 -0
- package/packs/gpu-painter/rules/gpu-hdr-and-tonemap.md +23 -0
- package/packs/gpu-painter/rules/gpu-picking-on-cpu.md +19 -0
- package/packs/gpu-painter/rules/gpu-render-lifecycle.md +25 -0
- package/packs/gpu-painter/rules/gpu-text-atlas.md +24 -0
- package/packs/gpu-painter/rules/gpu-travellers-from-snapshot.md +24 -0
- package/packs/gpu-painter/rules/hover-every-pressable.md +25 -0
- package/packs/gpu-painter/skills/gpu-capture/SKILL.md +15 -0
- package/packs/gpu-painter/skills/gpu-frame-bench/SKILL.md +14 -0
- package/packs/gpu-painter/skills/gpu-golden-check/SKILL.md +13 -0
- package/packs/gpu-painter/skills/gpu-golden-update/SKILL.md +16 -0
- package/packs/gpu-painter/skills/gpu-lifecycle-stress/SKILL.md +15 -0
- package/packs/gpu-painter/skills/hover-state/SKILL.md +33 -0
- package/packs/hook-proof/checks/hook-catch-must-not-allow.json +16 -0
- package/packs/hook-proof/checks/hook-command-no-pipe.json +16 -0
- package/packs/hook-proof/checks/hook-exit-1-does-not-block.json +17 -0
- package/packs/hook-proof/checks/hook-no-or-true.json +18 -0
- package/packs/hook-proof/checks/hook-refusal-on-stderr.json +17 -0
- package/packs/hook-proof/pack.json +38 -0
- package/packs/hook-proof/rules/a-refusal-is-exit-2.md +28 -0
- package/packs/hook-proof/skills/prove-a-hook/SKILL.md +21 -0
- package/packs/host-agent/checks/file-path-from-param.json +27 -0
- package/packs/host-agent/checks/integrity-check-optional.json +27 -0
- package/packs/host-agent/checks/quoted-value-into-config.json +24 -0
- package/packs/host-agent/checks/secret-on-argv.json +28 -0
- package/packs/host-agent/checks/ssh-verifies-host-key.json +27 -0
- package/packs/host-agent/checks/system-file-written-in-place.json +26 -0
- package/packs/host-agent/checks/tmp-path-predictable.json +27 -0
- package/packs/host-agent/pack.json +22 -0
- package/packs/host-agent/rules/root-on-other-machines.md +27 -0
- package/packs/html-ui/checks/email-html-escapes.json +25 -0
- package/packs/html-ui/checks/external-link-rel.json +21 -0
- package/packs/html-ui/checks/no-duplicate-escape.json +26 -0
- package/packs/html-ui/checks/no-inline-client-script.json +21 -0
- package/packs/html-ui/checks/no-inline-style.json +23 -0
- package/packs/html-ui/pack.json +33 -0
- package/packs/html-ui/rules/email-html-escapes.md +19 -0
- package/packs/html-ui/rules/server-html-escapes-everything.md +22 -0
- package/packs/http-api/checks/api-path-versioned.json +31 -0
- package/packs/http-api/checks/authz-from-request-body.json +26 -0
- package/packs/http-api/checks/client-calls-a-version.json +28 -0
- package/packs/http-api/checks/client-ip-not-leftmost-xff.json +28 -0
- package/packs/http-api/checks/cors-needs-origin.json +26 -0
- package/packs/http-api/checks/csp-not-switched-off.json +28 -0
- package/packs/http-api/checks/debug-route-not-shipped.json +26 -0
- package/packs/http-api/checks/encrypted-name-plaintext-value.json +26 -0
- package/packs/http-api/checks/err-text-stays-server-side.json +27 -0
- package/packs/http-api/checks/failure-is-not-empty.json +28 -0
- package/packs/http-api/checks/gate-is-not-a-todo.json +27 -0
- package/packs/http-api/checks/guard-fails-open.json +28 -0
- package/packs/http-api/checks/hmac-over-reserialised-body.json +26 -0
- package/packs/http-api/checks/jwt-verify-pins-algorithm.json +26 -0
- package/packs/http-api/checks/middleware-skips-without-user.json +26 -0
- package/packs/http-api/checks/next-api-route-versioned.json +47 -0
- package/packs/http-api/checks/no-security-off-switch.json +28 -0
- package/packs/http-api/checks/oauth-state-signed.json +26 -0
- package/packs/http-api/checks/one-time-code-compared-raw.json +26 -0
- package/packs/http-api/checks/query-cast-is-not-validation.json +28 -0
- package/packs/http-api/checks/queue-action-from-client.json +26 -0
- package/packs/http-api/checks/rate-limit-one-module.json +28 -0
- package/packs/http-api/checks/role-checked-in-one-guard.json +27 -0
- package/packs/http-api/checks/route-body-needs-schema.json +31 -0
- package/packs/http-api/checks/route-scopes-to-the-caller.json +31 -0
- package/packs/http-api/checks/secret-compared-constant-time-any.json +28 -0
- package/packs/http-api/checks/secret-in-job-record.json +27 -0
- package/packs/http-api/checks/server-fetches-tenant-url.json +30 -0
- package/packs/http-api/checks/short-code-needs-limit.json +26 -0
- package/packs/http-api/checks/user-url-through-safe-fetch.json +28 -0
- package/packs/http-api/checks/webhook-dedupes-event-id.json +30 -0
- package/packs/http-api/pack.json +45 -0
- package/packs/http-api/rules/adapters-one-db-gateway.md +18 -0
- package/packs/http-api/rules/apis-are-versioned.md +27 -0
- package/packs/http-api/rules/credentials-handled-safely.md +22 -0
- package/packs/http-api/rules/handlers-own-the-work.md +17 -0
- package/packs/http-api/rules/health-and-correlation.md +17 -0
- package/packs/http-api/rules/one-error-contract.md +17 -0
- package/packs/http-api/rules/routes-are-thin.md +17 -0
- package/packs/http-api/rules/routes-scope-to-the-caller.md +26 -0
- package/packs/http-api/rules/routes-validate-and-answer.md +25 -0
- package/packs/http-api/skills/change-an-api/SKILL.md +20 -0
- package/packs/http-api/skills/secure-a-route/SKILL.md +21 -0
- package/packs/instrument-shell/checks/no-raw-struct-blob.json +23 -0
- package/packs/instrument-shell/pack.json +22 -0
- package/packs/instrument-shell/rules/fold-keeps-every-route.md +24 -0
- package/packs/instrument-shell/rules/quiet-announces-itself.md +22 -0
- package/packs/instrument-shell/rules/render-the-extremes.md +25 -0
- package/packs/instrument-shell/rules/seams-are-declared.md +27 -0
- package/packs/instrument-shell/rules/session-blob-append-only.md +25 -0
- package/packs/instrument-shell/skills/gates-from-commit-one/SKILL.md +20 -0
- package/packs/instrument-shell/skills/hit-the-painted-control/SKILL.md +18 -0
- package/packs/js-ts/checks/async-callback-unguarded.json +26 -0
- package/packs/js-ts/checks/background-loop-needs-stop.json +28 -0
- package/packs/js-ts/checks/child-process-error-handler.json +28 -0
- package/packs/js-ts/checks/entry-registers-shutdown.json +31 -0
- package/packs/js-ts/checks/fetch-needs-timeout.json +30 -0
- package/packs/js-ts/checks/job-only-in-memory.json +28 -0
- package/packs/js-ts/checks/json-only-through-helper.json +29 -0
- package/packs/js-ts/checks/line-under-200-chars.json +34 -0
- package/packs/js-ts/checks/localhost-default-in-server.json +29 -0
- package/packs/js-ts/checks/no-any.json +27 -0
- package/packs/js-ts/checks/no-cast-escape-hatches.json +24 -0
- package/packs/js-ts/checks/no-console-in-app.json +31 -0
- package/packs/js-ts/checks/no-dynamic-import-node-builtin.json +25 -0
- package/packs/js-ts/checks/no-inline-binary.json +20 -0
- package/packs/js-ts/checks/no-inline-zod-outside-schemas.json +27 -0
- package/packs/js-ts/checks/no-local-sleep.json +25 -0
- package/packs/js-ts/checks/no-nested-ternary.json +20 -0
- package/packs/js-ts/checks/no-secret-in-log.json +24 -0
- package/packs/js-ts/checks/no-shell-string-interpolation.json +24 -0
- package/packs/js-ts/checks/no-swallowed-errors.json +25 -0
- package/packs/js-ts/checks/no-ts-enum.json +20 -0
- package/packs/js-ts/checks/process-env-only-in-config.json +31 -0
- package/packs/js-ts/checks/race-leaves-work-running.json +23 -0
- package/packs/js-ts/checks/reject-as-catch-all-exists.json +24 -0
- package/packs/js-ts/checks/secret-has-no-fallback.json +24 -0
- package/packs/js-ts/checks/secret-needs-crypto-random.json +24 -0
- package/packs/js-ts/checks/server-close-awaited.json +27 -0
- package/packs/js-ts/checks/session-user-typed-once.json +24 -0
- package/packs/js-ts/checks/switch-is-a-table.json +24 -0
- package/packs/js-ts/checks/test-imports-the-source.json +19 -0
- package/packs/js-ts/checks/test-name-says-behaviour.json +16 -0
- package/packs/js-ts/checks/tsconfig-flags.json +21 -0
- package/packs/js-ts/checks/void-needs-catch.json +24 -0
- package/packs/js-ts/checks/zod-string-needs-max.json +25 -0
- package/packs/js-ts/checks/zod-v4-formats.json +23 -0
- package/packs/js-ts/pack.json +84 -0
- package/packs/js-ts/rules/await-handled-at-a-boundary.md +66 -0
- package/packs/js-ts/rules/env-through-config.md +36 -0
- package/packs/js-ts/rules/errors-never-swallowed.md +33 -0
- package/packs/js-ts/rules/files-under-300-lines.md +18 -0
- package/packs/js-ts/rules/guard-clauses-over-nesting.md +34 -0
- package/packs/js-ts/rules/js-repeats-become-templates.md +26 -0
- package/packs/js-ts/rules/json-only-through-one-helper.md +62 -0
- package/packs/js-ts/rules/named-constants-not-magic-numbers.md +34 -0
- package/packs/js-ts/rules/no-any.md +34 -0
- package/packs/js-ts/rules/no-console.md +30 -0
- package/packs/js-ts/rules/no-floating-promises.md +31 -0
- package/packs/js-ts/rules/no-param-mutation.md +28 -0
- package/packs/js-ts/rules/no-unsafe-assertions.md +30 -0
- package/packs/js-ts/rules/one-logger.md +24 -0
- package/packs/js-ts/rules/outbound-calls-have-a-limit.md +20 -0
- package/packs/js-ts/rules/parallel-independent-awaits.md +29 -0
- package/packs/js-ts/rules/process-lifecycle.md +47 -0
- package/packs/js-ts/rules/schema-single-source-of-truth.md +36 -0
- package/packs/js-ts/rules/secrets-stay-secret.md +22 -0
- package/packs/js-ts/rules/small-functions.md +20 -0
- package/packs/js-ts/rules/test-names-describe-behavior.md +28 -0
- package/packs/js-ts/rules/tests-can-fail.md +19 -0
- package/packs/js-ts/rules/tsconfig-strict.md +32 -0
- package/packs/js-ts/rules/typed-exports.md +27 -0
- package/packs/js-ts/rules/types-once-at-the-edge.md +18 -0
- package/packs/js-ts/rules/unions-over-enums.md +29 -0
- package/packs/js-ts/rules/zod-at-route-boundaries.md +40 -0
- package/packs/midi/checks/active-sensing-no-pulse.json +24 -0
- package/packs/midi/checks/clock-not-at-sample-zero.json +23 -0
- package/packs/midi/checks/midi-realtime-first.json +27 -0
- package/packs/midi/checks/no-tempo-writeback.json +23 -0
- package/packs/midi/checks/position-not-integrated.json +25 -0
- package/packs/midi/checks/stub-playhead-advances.json +27 -0
- package/packs/midi/checks/sysex-length-literal.json +23 -0
- package/packs/midi/checks/sysex-not-on-audio.json +24 -0
- package/packs/midi/checks/sysex-survives-realtime.json +27 -0
- package/packs/midi/pack.json +22 -0
- package/packs/midi/rules/clock-is-a-pulse-stream.md +30 -0
- package/packs/midi/rules/imports-count-every-loss.md +25 -0
- package/packs/midi/rules/measure-the-clock-in-audio.md +30 -0
- package/packs/midi/rules/sync-is-a-mode.md +29 -0
- package/packs/midi/rules/sysex-is-a-record.md +29 -0
- package/packs/midi/skills/clock-probe/SKILL.md +23 -0
- package/packs/midi/skills/clock-probe/clock-law.md +417 -0
- package/packs/midi/skills/does-it-sync/SKILL.md +19 -0
- package/packs/mongo/checks/bulk-over-many.json +28 -0
- package/packs/mongo/checks/created-at-immutable.json +25 -0
- package/packs/mongo/checks/driver-outside-gateway.json +24 -0
- package/packs/mongo/checks/key-lookup-is-hashed.json +24 -0
- package/packs/mongo/checks/mongoclient-cached-and-named.json +34 -0
- package/packs/mongo/checks/mongoclient-outside-gateway.json +24 -0
- package/packs/mongo/checks/no-count-plus-one-ids.json +25 -0
- package/packs/mongo/checks/no-db-write-in-loop.json +25 -0
- package/packs/mongo/checks/no-drop-in-code.json +27 -0
- package/packs/mongo/checks/no-empty-deletemany.json +26 -0
- package/packs/mongo/checks/no-find-reads.json +26 -0
- package/packs/mongo/checks/no-input-spread-into-write.json +24 -0
- package/packs/mongo/checks/no-mongoose.json +23 -0
- package/packs/mongo/checks/no-negation-delete.json +26 -0
- package/packs/mongo/checks/no-non-null-after-findone.json +25 -0
- package/packs/mongo/checks/objectid-equals.json +26 -0
- package/packs/mongo/checks/update-then-reread.json +24 -0
- package/packs/mongo/checks/watch-not-poll.json +25 -0
- package/packs/mongo/pack.json +52 -0
- package/packs/mongo/rules/deletes-name-what-dies.md +21 -0
- package/packs/mongo/rules/driver-only-in-gateway.md +26 -0
- package/packs/mongo/rules/keys-hashed-input-picked.md +21 -0
- package/packs/mongo/rules/one-client-one-pool.md +32 -0
- package/packs/mongo/rules/reads-aggregate-writes-bulk.md +25 -0
- package/packs/mongo/rules/writes-are-atomic.md +27 -0
- package/packs/multi-tenant/checks/role-sees-all-tenants.json +26 -0
- package/packs/multi-tenant/checks/tenant-filter-from-url.json +25 -0
- package/packs/multi-tenant/pack.json +22 -0
- package/packs/multi-tenant/rules/no-role-crosses-a-tenant.md +21 -0
- package/packs/multi-tenant/skills/prove-tenant-isolation/SKILL.md +19 -0
- package/packs/nginx/checks/modsec-no-blanket-off.json +16 -0
- package/packs/nginx/checks/nginx-csp-no-unsafe.json +15 -0
- package/packs/nginx/checks/nginx-headers-always.json +15 -0
- package/packs/nginx/checks/nginx-keepalive-http11.json +20 -0
- package/packs/nginx/checks/nginx-logs-to-stdout.json +15 -0
- package/packs/nginx/checks/nginx-no-crlf.json +17 -0
- package/packs/nginx/checks/nginx-resolver-ttl.json +19 -0
- package/packs/nginx/pack.json +43 -0
- package/packs/nginx/rules/modsecurity-tuning.md +22 -0
- package/packs/nginx/rules/nginx-production.md +26 -0
- package/packs/nginx/skills/waf-rollout/SKILL.md +20 -0
- package/packs/python/checks/py-no-bare-except.json +18 -0
- package/packs/python/checks/py-no-eval.json +18 -0
- package/packs/python/checks/py-no-mutable-default.json +18 -0
- package/packs/python/checks/py-no-shell-true.json +18 -0
- package/packs/python/checks/py-no-star-import.json +18 -0
- package/packs/python/checks/py-no-swallowed-exception.json +18 -0
- package/packs/python/checks/py-none-by-is.json +18 -0
- package/packs/python/checks/py-open-with-with.json +18 -0
- package/packs/python/checks/py-requests-timeout.json +18 -0
- package/packs/python/checks/py-subprocess-output-checked.json +18 -0
- package/packs/python/checks/py-yaml-safe-load.json +18 -0
- package/packs/python/pack.json +26 -0
- package/packs/python/rules/python-errors-and-resources.md +26 -0
- package/packs/python/rules/python-repeats-become-templates.md +27 -0
- package/packs/python/skills/python-extract-template/SKILL.md +35 -0
- package/packs/react/checks/dialog-needs-role.json +28 -0
- package/packs/react/checks/effect-not-for-derived-state.json +24 -0
- package/packs/react/checks/icon-button-needs-name.json +24 -0
- package/packs/react/checks/label-needs-a-field.json +24 -0
- package/packs/react/checks/ui-failed-fetch-says-so.json +23 -0
- package/packs/react/checks/ui-ok-branch-has-an-else.json +23 -0
- package/packs/react/pack.json +20 -0
- package/packs/react/rules/react-accessible-controls.md +20 -0
- package/packs/react/rules/react-state-and-effects.md +23 -0
- package/packs/reverse-engineering/checks/ear-constant-tagged.json +23 -0
- package/packs/reverse-engineering/checks/no-default-on-distrust.json +24 -0
- package/packs/reverse-engineering/checks/no-rom-table-literal.json +29 -0
- package/packs/reverse-engineering/checks/prose-never-decides.json +22 -0
- package/packs/reverse-engineering/hooks/firmware-out-of-git.mjs +49 -0
- package/packs/reverse-engineering/pack.json +35 -0
- package/packs/reverse-engineering/rules/a-negative-names-what-was-scanned.md +19 -0
- package/packs/reverse-engineering/rules/account-every-term.md +20 -0
- package/packs/reverse-engineering/rules/addresses-name-their-space.md +21 -0
- package/packs/reverse-engineering/rules/every-law-has-a-source.md +18 -0
- package/packs/reverse-engineering/rules/findings-are-withdrawn-in-place.md +17 -0
- package/packs/reverse-engineering/rules/firmware-stays-out.md +18 -0
- package/packs/reverse-engineering/rules/names-before-code.md +19 -0
- package/packs/reverse-engineering/rules/reproduction-or-original.md +18 -0
- package/packs/reverse-engineering/rules/two-sources-before-naming.md +21 -0
- package/packs/reverse-engineering/skills/bank-census/SKILL.md +18 -0
- package/packs/reverse-engineering/skills/gather-sources/SKILL.md +21 -0
- package/packs/reverse-engineering/skills/menu-map/SKILL.md +28 -0
- package/packs/reverse-engineering/skills/names-first/SKILL.md +41 -0
- package/packs/reverse-engineering/skills/re-deliverables/SKILL.md +21 -0
- package/packs/reverse-engineering/skills/tripwire-the-law/SKILL.md +19 -0
- package/packs/reverse-engineering/tools/lib/unwrap.mjs +115 -0
- package/packs/reverse-engineering/tools/names-sweep.mjs +264 -0
- package/packs/shell/checks/sh-mktemp.json +18 -0
- package/packs/shell/checks/sh-no-backticks.json +18 -0
- package/packs/shell/checks/sh-no-eval.json +18 -0
- package/packs/shell/checks/sh-no-parse-ls.json +18 -0
- package/packs/shell/checks/sh-no-pipe-to-shell.json +18 -0
- package/packs/shell/checks/sh-no-program-in-heredoc.json +18 -0
- package/packs/shell/checks/sh-quote-arguments.json +18 -0
- package/packs/shell/checks/sh-rm-guarded.json +18 -0
- package/packs/shell/checks/sh-strict-mode.json +20 -0
- package/packs/shell/pack.json +28 -0
- package/packs/shell/rules/shell-repeats-become-templates.md +23 -0
- package/packs/shell/rules/shell-strict-and-quoted.md +27 -0
- package/packs/shell/skills/shell-extract-template/SKILL.md +32 -0
- package/packs/shell-hooks/checks/gnu-only-in-shell.json +18 -0
- package/packs/shell-hooks/checks/hook-command-anchored.json +12 -0
- package/packs/shell-hooks/checks/hook-json-by-tool.json +18 -0
- package/packs/shell-hooks/checks/no-bash-c-with-variable.json +20 -0
- package/packs/shell-hooks/pack.json +36 -0
- package/packs/shell-hooks/rules/hooks-portable-anchored-quoted.md +26 -0
- package/packs/sound-design/checks/audio-seed-fixed.json +23 -0
- package/packs/sound-design/checks/mix-is-a-crossfade.json +30 -0
- package/packs/sound-design/checks/no-hash-in-the-signal.json +30 -0
- package/packs/sound-design/checks/no-literal-key-anchor.json +30 -0
- package/packs/sound-design/checks/test-compares-a-function-with-itself.json +22 -0
- package/packs/sound-design/pack.json +22 -0
- package/packs/sound-design/rules/algorithms-are-data.md +26 -0
- package/packs/sound-design/rules/meter-before-engine.md +27 -0
- package/packs/sound-design/rules/neutral-is-exact.md +26 -0
- package/packs/sound-design/rules/test-off-the-easy-point.md +28 -0
- package/packs/sound-design/rules/unreachable-is-said.md +25 -0
- package/packs/sound-design/rules/waveforms-and-octaves.md +24 -0
- package/packs/sound-design/skills/choose-observable/SKILL.md +18 -0
- package/packs/sound-design/skills/measure-a-law/SKILL.md +18 -0
- package/packs/sound-design/skills/measure-reverb/SKILL.md +19 -0
- package/packs/sound-design/skills/spread-probe/SKILL.md +18 -0
- package/packs/stellix/checks/no-keyboard-focus.json +12 -0
- package/packs/stellix/checks/one-seeded-random.json +16 -0
- package/packs/stellix/checks/world-never-includes-painter.json +12 -0
- package/packs/stellix/checks/world-no-libm.json +15 -0
- package/packs/stellix/checks/world-no-unordered.json +10 -0
- package/packs/stellix/hooks/no-shipped-images.mjs +88 -0
- package/packs/stellix/pack.json +61 -0
- package/packs/stellix/rules/stellix-deterministic-world.md +29 -0
- package/packs/stellix/rules/stellix-reset-generated.md +24 -0
- package/packs/stellix/rules/stellix-world-snapshot.md +27 -0
- package/packs/stellix/rules/world-continuous-collision.md +26 -0
- package/packs/stellix/rules/world-fp-determinism.md +28 -0
- package/packs/stored-text/checks/no-raw-html-from-data.json +31 -0
- package/packs/stored-text/checks/stored-text-libs-only-in-renderer.json +31 -0
- package/packs/stored-text/checks/stored-text-renderer-complete.json +24 -0
- package/packs/stored-text/checks/stored-text-through-renderer.json +25 -0
- package/packs/stored-text/pack.json +41 -0
- package/packs/stored-text/rules/stored-text-renders-once.md +26 -0
- package/packs/stored-text/skills/render-stored-text/SKILL.md +24 -0
- package/packs/synth-creator/checks/timing-from-synthcore.json +24 -0
- package/packs/synth-creator/checks/ui-drawn-in-code.json +23 -0
- package/packs/synth-creator/hooks/build-guard.mjs +232 -0
- package/packs/synth-creator/hooks/build-sweep.mjs +166 -0
- package/packs/synth-creator/hooks/frozen-files.mjs +63 -0
- package/packs/synth-creator/hooks/idle-wake.mjs +90 -0
- package/packs/synth-creator/hooks/protect-vendor.mjs +174 -0
- package/packs/synth-creator/hooks/spec-lock.mjs +117 -0
- package/packs/synth-creator/hooks/stage-guard.mjs +50 -0
- package/packs/synth-creator/hooks/time-guard.mjs +292 -0
- package/packs/synth-creator/hooks/user-asks.mjs +165 -0
- package/packs/synth-creator/pack.json +136 -0
- package/packs/synth-creator/rules/copy-trees-read-only.md +25 -0
- package/packs/synth-creator/rules/debug-by-measurement.md +20 -0
- package/packs/synth-creator/rules/done-means-fresh-evidence.md +18 -0
- package/packs/synth-creator/rules/hooks-and-gates.md +21 -0
- package/packs/synth-creator/rules/long-work-in-the-background.md +16 -0
- package/packs/synth-creator/rules/timing-from-synthcore.md +16 -0
- package/packs/synth-creator/skills/build-step/SKILL.md +125 -0
- package/packs/synth-creator/skills/build-through-the-queue/SKILL.md +19 -0
- package/packs/synth-creator/tools/freeze.mjs +36 -0
- package/packs/tui/checks/tui-entry-restores-terminal.json +27 -0
- package/packs/tui/checks/tui-gates-on-tty.json +25 -0
- package/packs/tui/checks/tui-no-ris-reset.json +22 -0
- package/packs/tui/checks/tui-resize-listener-removed.json +26 -0
- package/packs/tui/checks/tui-width-is-state.json +33 -0
- package/packs/tui/pack.json +44 -0
- package/packs/tui/rules/tui-resize-and-screen.md +25 -0
- package/packs/tui/skills/build-tui/SKILL.md +21 -0
- package/packs/ui-craft/checks/ui-input-needs-autocomplete.json +23 -0
- package/packs/ui-craft/checks/ui-intl-for-dates.json +21 -0
- package/packs/ui-craft/checks/ui-no-ai-palette.json +22 -0
- package/packs/ui-craft/checks/ui-no-animate-layout.json +22 -0
- package/packs/ui-craft/checks/ui-no-assistant-palette.json +23 -0
- package/packs/ui-craft/checks/ui-no-bounce-easing.json +22 -0
- package/packs/ui-craft/checks/ui-no-custom-cursor.json +22 -0
- package/packs/ui-craft/checks/ui-no-emoji-as-ui.json +22 -0
- package/packs/ui-craft/checks/ui-no-empty-image.json +21 -0
- package/packs/ui-craft/checks/ui-no-eyebrow.json +21 -0
- package/packs/ui-craft/checks/ui-no-furniture-text.json +22 -0
- package/packs/ui-craft/checks/ui-no-gradient-text.json +22 -0
- package/packs/ui-craft/checks/ui-no-index-numbering.json +21 -0
- package/packs/ui-craft/checks/ui-no-lorem.json +22 -0
- package/packs/ui-craft/checks/ui-no-marketing-buzzword.json +22 -0
- package/packs/ui-craft/checks/ui-no-paste-block.json +21 -0
- package/packs/ui-craft/checks/ui-no-placeholder-names.json +21 -0
- package/packs/ui-craft/checks/ui-no-scroll-hijack.json +21 -0
- package/packs/ui-craft/checks/ui-no-side-tab.json +21 -0
- package/packs/ui-craft/checks/ui-no-stock-labels.json +22 -0
- package/packs/ui-craft/checks/ui-no-transition-all.json +22 -0
- package/packs/ui-craft/checks/ui-no-uppercase-table-header.json +21 -0
- package/packs/ui-craft/checks/ui-no-zebra-rows.json +22 -0
- package/packs/ui-craft/checks/ui-no-zoom-lock.json +21 -0
- package/packs/ui-craft/pack.json +43 -0
- package/packs/ui-craft/rules/apps-are-not-pages.md +26 -0
- package/packs/ui-craft/rules/data-tells-the-truth.md +26 -0
- package/packs/ui-craft/rules/dates-and-numbers.md +18 -0
- package/packs/ui-craft/rules/forms-never-fight.md +22 -0
- package/packs/ui-craft/rules/interface-copy.md +26 -0
- package/packs/ui-craft/rules/motion-is-rare.md +31 -0
- package/packs/ui-craft/rules/no-generated-look.md +37 -0
- package/packs/ui-craft/rules/page-holds-its-frame.md +28 -0
- package/packs/ui-craft/rules/page-proved-rendered.md +19 -0
- package/packs/ui-craft/rules/pictures-do-a-job.md +25 -0
- package/packs/ui-craft/rules/pointer-feedback.md +28 -0
- package/packs/ui-craft/rules/screen-answers-one-question.md +24 -0
- package/packs/ui-craft/rules/survives-real-data.md +23 -0
- package/packs/ui-craft/rules/touch-and-small-screens.md +19 -0
- package/packs/ui-craft/rules/type-space-colour.md +26 -0
- package/packs/ui-craft/rules/url-holds-the-state.md +19 -0
- package/packs/ui-craft/skills/app-screen/SKILL.md +33 -0
- package/packs/ui-craft/skills/build-from-reference/SKILL.md +28 -0
- package/packs/ui-craft/skills/chart-choice/SKILL.md +34 -0
- package/packs/ui-craft/skills/hover-state/SKILL.md +28 -0
- package/packs/ui-craft/skills/page-critique/SKILL.md +33 -0
- package/packs/ui-craft/skills/prove-page/SKILL.md +23 -0
- package/packs/ui-craft/skills/redesign-page/SKILL.md +19 -0
- package/packs/ui-craft/skills/ui-code-review/SKILL.md +22 -0
- package/packs/ui-craft/skills/write-the-page/SKILL.md +21 -0
- package/packs/ui-craft/tools/page-measure.mjs +41 -0
- package/packs/web/checks/a11y-img-needs-alt.json +26 -0
- package/packs/web/checks/a11y-no-bare-outline-none.json +21 -0
- package/packs/web/checks/a11y-no-clickable-div.json +26 -0
- package/packs/web/checks/a11y-no-positive-tabindex.json +26 -0
- package/packs/web/checks/client-no-api-key.json +29 -0
- package/packs/web/checks/client-no-browser-global-at-module-scope.json +28 -0
- package/packs/web/checks/client-no-server-import.json +31 -0
- package/packs/web/checks/client-no-window-location-nav.json +28 -0
- package/packs/web/checks/css-no-inline-style.json +30 -0
- package/packs/web/checks/ds-pages-compose-primitives.json +28 -0
- package/packs/web/checks/key-from-index.json +23 -0
- package/packs/web/checks/prodbuild-no-cdn-runtime-deps.json +21 -0
- package/packs/web/checks/prodbuild-no-dev-flags.json +21 -0
- package/packs/web/checks/prodbuild-no-remote-fonts.json +22 -0
- package/packs/web/checks/rcss-button-cursor.json +30 -0
- package/packs/web/checks/rcss-no-100vw.json +21 -0
- package/packs/web/checks/rcss-no-fixed-wide-width.json +21 -0
- package/packs/web/checks/rcss-viewport-meta.json +28 -0
- package/packs/web/checks/secret-not-in-web-storage.json +25 -0
- package/packs/web/checks/tw-no-raw-hex-in-markup.json +34 -0
- package/packs/web/checks/wp-hero-not-lazy.json +27 -0
- package/packs/web/checks/wp-img-needs-dimensions.json +26 -0
- package/packs/web/pack.json +73 -0
- package/packs/web/rules/accessibility.md +26 -0
- package/packs/web/rules/client-boundaries.md +23 -0
- package/packs/web/rules/production-build.md +22 -0
- package/packs/web/rules/secrets-not-in-the-browser.md +18 -0
- package/packs/web/rules/styles-live-in-stylesheets.md +23 -0
- package/packs/web/rules/tailwind-v4.md +23 -0
- package/packs/web/rules/ui-primitives-one-module.md +30 -0
- package/packs/web/rules/web-performance.md +21 -0
- package/packs/web/skills/design-direction/SKILL.md +30 -0
- package/packs/web/skills/design-review/SKILL.md +28 -0
- package/packs/web/skills/pick-rendering-mode/SKILL.md +21 -0
- package/packs/web/skills/preflight-build/SKILL.md +23 -0
- package/packs/web/skills/seo-audit/SKILL.md +22 -0
- package/packs/websocket/checks/no-token-in-query.json +26 -0
- package/packs/websocket/checks/stale-socket-deletes-new-entry.json +25 -0
- package/packs/websocket/checks/ws-identity-from-message.json +26 -0
- package/packs/websocket/pack.json +21 -0
- package/packs/websocket/rules/identity-comes-from-the-connection.md +24 -0
- package/packs/writing/checks/ascii-no-em-dash.json +17 -0
- package/packs/writing/checks/no-copula-dodging.json +18 -0
- package/packs/writing/checks/no-dramatic-colon.json +18 -0
- package/packs/writing/checks/no-not-x-but-y.json +18 -0
- package/packs/writing/checks/no-participial-opener.json +18 -0
- package/packs/writing/checks/no-pseudo-wisdom.json +18 -0
- package/packs/writing/checks/no-slop-words.json +18 -0
- package/packs/writing/checks/no-stock-connectors.json +18 -0
- package/packs/writing/checks/no-time-or-date.json +27 -0
- package/packs/writing/checks/no-trailing-ing.json +18 -0
- package/packs/writing/checks/no-vague-attribution.json +18 -0
- package/packs/writing/pack.json +43 -0
- package/packs/writing/rules/ascii-no-em-dash.md +21 -0
- package/packs/writing/rules/cut-the-padding.md +20 -0
- package/packs/writing/rules/direct-voice.md +22 -0
- package/packs/writing/rules/no-cargo-cult.md +16 -0
- package/packs/writing/rules/no-scaffolding.md +19 -0
- package/packs/writing/rules/no-stock-language.md +27 -0
- package/packs/writing/rules/no-time-or-date.md +18 -0
- package/packs/writing/rules/rhythm-like-talk.md +20 -0
- package/packs/writing/rules/write-from-your-own-corner.md +20 -0
- package/packs/writing/skills/argument-post/SKILL.md +28 -0
- package/packs/writing/skills/humanize/SKILL.md +28 -0
- package/packs/writing/skills/launch-post/SKILL.md +38 -0
- package/packs/writing/skills/pick-subreddit/SKILL.md +69 -0
- package/packs/writing/skills/post-voice/SKILL.md +22 -0
- package/packs/writing/skills/reddit-post/SKILL.md +63 -0
- package/packs/writing/skills/reddit-title/SKILL.md +23 -0
- package/packs/writing/skills/reply-moves/SKILL.md +40 -0
- package/packs/writing/skills/reply-stance/SKILL.md +23 -0
- package/packs/writing/skills/should-i-reply/SKILL.md +21 -0
- package/packs/zod/hooks/schemas-only.mjs +53 -0
- package/packs/zod/pack.json +44 -0
- package/packs/zod/rules/env-shapes-only.md +14 -0
- package/packs/zod/rules/zod-4-schemas.md +14 -0
- package/profiles/stellix.layout.json +315 -0
- package/profiles/sub37.layout.json +247 -0
- package/prompts/scan-review.md +40 -0
- package/prompts/survey.md +82 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: launch-post
|
|
3
|
+
description: Use when announcing a product, a project or a release in a post or on a manual page.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Launch and product posts
|
|
7
|
+
|
|
8
|
+
- **Lead with the argument, not the product.** Title is the claim, the
|
|
9
|
+
first paragraph pays it off, the product shows up around paragraph five
|
|
10
|
+
as the answer to the argument. A title that announces a product tells
|
|
11
|
+
scrollers "ad" before they read a word.
|
|
12
|
+
- **No product name and no brand word in the title** when a topic word
|
|
13
|
+
already implies it (a word for the whole problem pulls every crowd that has
|
|
14
|
+
it, not only the users of one product). A tagline is not a title; it stops
|
|
15
|
+
people the way a billboard does. The tagline goes as the LAST line,
|
|
16
|
+
after the argument has landed.
|
|
17
|
+
- **Disclose once, plainly, in the first lines.** "I work at the company
|
|
18
|
+
that makes this" or "this is my own project" when that's true. Never say
|
|
19
|
+
the employer twice. A good form: "(my employer, so check it yourself)".
|
|
20
|
+
- **Numbers only if you can defend them in the thread.** A benchmark that
|
|
21
|
+
invites "so yours got a special setup and the baseline didn't?" makes the
|
|
22
|
+
thread about the benchmark. Hold contested numbers for a
|
|
23
|
+
second post when they can be measured clean; that second post is its own
|
|
24
|
+
launch.
|
|
25
|
+
- **Something to look at.** The best posts each have one concrete thing:
|
|
26
|
+
4,681 vs 251 tokens, or the injection that almost worked. With numbers
|
|
27
|
+
held back, a five-line code snippet does that job.
|
|
28
|
+
- **Early-development honesty beats a challenge close** for a launch: "I
|
|
29
|
+
obviously havent been able to try every scenario so if you hit a bug or
|
|
30
|
+
want something it doesn't do, open an issue" (an issue, not a PR; a PR is
|
|
31
|
+
code), then one sentence giving the reader a job ("if Claude makes a
|
|
32
|
+
mistake for you that isn't on the list, tell me, that's the next thing I
|
|
33
|
+
fix").
|
|
34
|
+
- **Nothing negative about a vendor you work for or depend on.** The fault
|
|
35
|
+
is the habit, the data or the setup. "I got tired of seeing people blame
|
|
36
|
+
the tool for things that aren't its fault" is the register.
|
|
37
|
+
- **One person's own projects are "I", not "we",** including the manual pages that
|
|
38
|
+
describe them.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pick-subreddit
|
|
3
|
+
description: Use when choosing which subreddit to post in, or asked what culture or length a subreddit expects.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Pick the subreddit
|
|
7
|
+
|
|
8
|
+
Recommend by matching topic to culture and goal (reach: high median score; discussion: high median comments). For an unlisted sub, skim its top posts of the week and classify by analogy.
|
|
9
|
+
|
|
10
|
+
## The four cultures
|
|
11
|
+
|
|
12
|
+
- **Builder/practitioner** (mongodb, Rag, PostgreSQL, node, mcp,
|
|
13
|
+
dataengineering, aws, docker, devops, backend, database, analytics,
|
|
14
|
+
machinelearning, vectordatabase, langchain, llmdevs, etl) ->
|
|
15
|
+
**Template A** (value post, job = upvotes) or **Template B** (question
|
|
16
|
+
post, job = comments).
|
|
17
|
+
- **Meme/fan** (ClaudeAI, ClaudeCode, ChatGPT) -> **Template C**: humor,
|
|
18
|
+
praise, shared feeling, sharp collective critique; media welcome.
|
|
19
|
+
- **News aggregator** (technology, programming) -> **Template D**: submit a
|
|
20
|
+
link + headline, do NOT write a text body. (Measured: 0% of r/technology
|
|
21
|
+
and 15% of r/programming posts carry body text.)
|
|
22
|
+
- **Watercooler/story** (sysadmin, ExperiencedDevs, startups,
|
|
23
|
+
learnprogramming, learnsql) -> Template C in a professional register
|
|
24
|
+
(war story, confession, career question).
|
|
25
|
+
|
|
26
|
+
Modifiers: LIFECYCLE (a gold-rush sub like claudeskills rewards
|
|
27
|
+
self-promo while the rush lasts; a quiet young niche like mcp does not;
|
|
28
|
+
check the flop rate, not the age) and FORMAT (self-post subs you write;
|
|
29
|
+
link subs you curate).
|
|
30
|
+
|
|
31
|
+
Schemaless and database-choice arguments live in r/webdev, r/node,
|
|
32
|
+
r/ExperiencedDevs and r/devops, not r/mongodb (measured 2026-10: a
|
|
33
|
+
Reddit-wide schema/schemaless search put r/node at 24 relevant threads and
|
|
34
|
+
r/webdev's 463-point "if NoSQL ends up with schemas anyway" thread at the
|
|
35
|
+
top; r/mongodb is where people who already chose it ask how-to). Second
|
|
36
|
+
wave for a launch goes there.
|
|
37
|
+
|
|
38
|
+
## Per-sub cheat table (July 2026 snapshot, ~100 posts/sub)
|
|
39
|
+
|
|
40
|
+
Medians are directional (n~100). "Slop%" = share of posts machine-flagged
|
|
41
|
+
as LLM-written; high slop = easy to stand out by sounding human.
|
|
42
|
+
|
|
43
|
+
| Sub | Culture | Med score | Med comments | Slop% | Notes |
|
|
44
|
+
|---|---|---|---|---|---|
|
|
45
|
+
| technology | news | 869 | 48 | 0 | link-only, no body |
|
|
46
|
+
| claudeskills | builder/gold-rush | 95 | 16 | 23 | showcase tolerated, huge ceiling |
|
|
47
|
+
| learnsql | learner Q&A | 77 | 19 | 18 | question titles: 33 vs 19 comments |
|
|
48
|
+
| ExperiencedDevs | watercooler | 71 | 69 | 2 | comment monster; Q-titles 97 vs 54 comments |
|
|
49
|
+
| database | builder | 21 | 7 | 0 | Q-titles 38 vs 13 comments |
|
|
50
|
+
| programming | news | 15 | 5 | 7 | link sub, text posts rare |
|
|
51
|
+
| dataengineering | builder | 15 | 10 | 1 | clean room, human tone lands |
|
|
52
|
+
| machinelearning | builder/research | 13 | 17 | 4 | depth expected |
|
|
53
|
+
| postgresql | builder | 6 | 7 | 7 | short + newsy wins |
|
|
54
|
+
| sysadmin | watercooler | 6 | 13 | 0 | war stories, zero slop tolerance |
|
|
55
|
+
| backend | builder | 5 | 26 | 4 | discussion-heavy; Q-titles 31 vs 18 |
|
|
56
|
+
| startups | story | 3 | 12 | 0 | first-person stories only |
|
|
57
|
+
| rag | builder | 3 | 5 | 21 | code IS the substance here |
|
|
58
|
+
| ChatGPT | fan | 3 | 7 | 8 | media/meme, body text rare |
|
|
59
|
+
| devops | builder | 3 | 25 | 4 | discussion-heavy |
|
|
60
|
+
| node | builder | 2.5 | 5 | 7 | |
|
|
61
|
+
| ClaudeCode | fan/builder | 2 | 13 | 8 | meme/manifesto register |
|
|
62
|
+
| ClaudeAI | fan | 2 | 5 | 7 | |
|
|
63
|
+
| mongodb | builder | 2 | 2 | 16 | small room, human tone stands out |
|
|
64
|
+
| mcp | builder/young | 2 | 1 | 17 | quiet niche, no self-promo |
|
|
65
|
+
| llmdevs | builder | 1 | 2 | 10 | |
|
|
66
|
+
| aws | builder | 1 | 11 | 5 | Q&A rewards questions |
|
|
67
|
+
| docker | builder | 1 | 7 | 4 | |
|
|
68
|
+
| webdev | builder | 1 | 4.5 | 6 | |
|
|
69
|
+
| learnprogramming | learner Q&A | 1 | 10.5 | 3 | |
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: post-voice
|
|
3
|
+
description: Use when writing a post, a manual page or an article in the author's own voice.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# The voice of a post (one job: it reads like a person telling what happened)
|
|
7
|
+
|
|
8
|
+
A reply is flat and conclusion-first. A post is different, and this is the register for posts, manual pages and articles:
|
|
9
|
+
|
|
10
|
+
- **Opens plain.** "I was reading about prompt injection and I wanted to see if I could actually trigger it." A conflict of interest goes in the first lines, once: "I work on this tool, so check it yourself."
|
|
11
|
+
- **Narrates in the order it happened.** I noticed, I didn't understand why, so I wrote a hook, the first thing it showed was, that surprised me. It does not argue in order; it tells what was done and seen.
|
|
12
|
+
- **Explains the mechanism right after the number**, in plain words: "every nested thing becomes its own table with a foreign key back to the parent". A number never stands alone.
|
|
13
|
+
- **Has a "to be fair" paragraph** that gives the other side its win ("To be fair, plain query text was about the same").
|
|
14
|
+
- **Closes with an offer, not a lesson.** "Happy to share the hook if anyone wants it." Or the humble ask: "Am I missing something?"
|
|
15
|
+
- **Uses the author's own words.** Read their earlier writing and keep the phrases they really use, spelling habits included. Ask for a sample when there is none.
|
|
16
|
+
- **Avoids anything that sounds like a keynote.** No coined phrases, no slogans. "I", not "we", for one person's own work.
|
|
17
|
+
- **Manual pages read like the posts.** First person, same openers, same "to be fair", same plain mechanism after the claim. A manual page in a different voice from the launch post is a tell by itself.
|
|
18
|
+
|
|
19
|
+
**Target register for a post:**
|
|
20
|
+
> I found that 95% of the tokens spent on one of my databases were being wasted on something obvious. I work on the tool that found it, so check it yourself.
|
|
21
|
+
|
|
22
|
+
The thing found, one oddly specific number, and the disclosure.
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: reddit-post
|
|
3
|
+
description: Use when drafting a Reddit post, or asked whether a post will work on Reddit or is too self-promo.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Draft a Reddit post
|
|
7
|
+
|
|
8
|
+
## Principles that survived the data check
|
|
9
|
+
|
|
10
|
+
- **The title is ~80% of the post.** Spend effort there first.
|
|
11
|
+
- **One post, one job.** Upvotes OR comments OR community bonding.
|
|
12
|
+
(Measured: an open-question close earns 12 median comments vs 8 without,
|
|
13
|
+
but scores LOWER on votes, 3 vs 4. Question titles: 15 vs 7 median
|
|
14
|
+
comments. The tradeoff is real; pick the job before writing.)
|
|
15
|
+
- **Self-promo that leads with itself is punished.** Bury the ask, lead
|
|
16
|
+
with value. Exception: gold-rush subs in their rush window (claudeskills
|
|
17
|
+
now) tolerate showcase posts; check the room's top posts first.
|
|
18
|
+
- **Match the emotion of the room.** Practitioner subs reward usefulness
|
|
19
|
+
and curiosity; fan subs reward humor and solidarity. 30-second test:
|
|
20
|
+
skim the sub's top posts of the week; do they solve problems or express
|
|
21
|
+
feelings? Write to that.
|
|
22
|
+
- **Do not dump raw code.** Exception: r/Rag, where code IS the substance.
|
|
23
|
+
A five-line snippet that makes the claim concrete is not a dump; dev
|
|
24
|
+
readers scroll for it.
|
|
25
|
+
- **Velocity beats ratio.** A >=80% upvote ratio is a survival floor, not a
|
|
26
|
+
driver. Watch the first 3 hours: >6 comments in hour one is the go-viral
|
|
27
|
+
signal; a flat view curve by hour three means it's done, change the
|
|
28
|
+
angle or the hour, don't just repost. Shares (author-only metric) are
|
|
29
|
+
the truest "it landed" signal and can exceed upvotes.
|
|
30
|
+
- **Timing:** mid-week or Sunday; avoid Saturday. Best hour isn't reliable;
|
|
31
|
+
use Post Insights' first-hour signal.
|
|
32
|
+
|
|
33
|
+
For POSTS the sub's length norm overrides the shortness instinct: 300+ word human posts score best (median 5). A value post may run long; it must read human, not short.
|
|
34
|
+
|
|
35
|
+
## Templates (rebuilt from the human corpus)
|
|
36
|
+
|
|
37
|
+
**A. Value post (upvotes):** first-person hook stating YOUR situation with
|
|
38
|
+
one oddly specific number ("I'm running X with 200k users") -> what you
|
|
39
|
+
did/found, receipts woven in prose or one ragged list -> the one insight ->
|
|
40
|
+
stop, or one open question if comments also matter. No summary close.
|
|
41
|
+
**B. Question post (comments):** greeting optional ("Hi all" opens 19-25%
|
|
42
|
+
of real posts) -> your situation in first person, 2-4 sentences, concrete
|
|
43
|
+
constraints and numbers -> the actual question as the LAST line, ending
|
|
44
|
+
with "?" -> optionally "Thanks!" / "TIA". Nothing after the ask.
|
|
45
|
+
**C. Community post (fan/watercooler):** relatable hook or war story in
|
|
46
|
+
the room's emotional register, humor or solidarity, short, media where the
|
|
47
|
+
sub likes it. No lesson-of-the-day close.
|
|
48
|
+
**D. Link post:** headline + link only.
|
|
49
|
+
**E. Argument post (the 750k shape):** a claim about the reader's own
|
|
50
|
+
setup in the title -> the claim paid off in paragraph one -> who you are
|
|
51
|
+
and how you know, second -> one short list of one-liners -> the fix or
|
|
52
|
+
the thing you built -> an ask that lets people disagree. Use for
|
|
53
|
+
launches and for any opinion piece.
|
|
54
|
+
|
|
55
|
+
## Workflow
|
|
56
|
+
|
|
57
|
+
1. Confirm target sub and topic/goal. No sub given: `pick-subreddit`.
|
|
58
|
+
2. Pick ONE job, then template A/B/C/D/E. An argument or a launch: `argument-post`, `launch-post`.
|
|
59
|
+
3. Draft to the skeleton, tuned to the sub: length from the sub's norm, one link max (none where links hurt), first-person hook, receipts, question-close only if the job is comments. The voice is `post-voice`.
|
|
60
|
+
4. Title last, with real effort: `reddit-title`. Flair: pick the value or humor flair; never the self-promo or low-effort-question flair.
|
|
61
|
+
5. "Conclusion first" is a REPLY rule, but a title that makes a claim gets that claim paid off in paragraph one; the reader must not wait 70 words through the author's bio for it. The hook is the reader's own situation; who the author is and how they know comes second.
|
|
62
|
+
6. Pre-flight: right template for the culture, one job, one link, flair ok, the title got real effort and is a claim about the reader with no product or brand word, the first paragraph pays it off, the sub's length norm respected, receipts specific, ragged list not scaffolding, no em dashes, no summary close, no time or date anywhere, `humanize` passed. Employer disclosed once; no numbers that can't be defended in the thread.
|
|
63
|
+
7. Deliver BOTH formats: (1) paste-ready markdown in a fenced code block (title + body); (2) a two-column Field/Content markdown table (Title, Body, Flair, Best time, Sub) with `<br><br>` between paragraphs and `-` + `<br>` bullets so it pastes into Excel/Docs cleanly. Then list the 3 things to watch in the first 3 hours (hour-one comments >6, view curve by hour three, shares). Deliver as .md files, not artifacts.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: reddit-title
|
|
3
|
+
description: Use when writing or judging a Reddit post title, or asked which title or flair to use.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# The title is about 80% of the post
|
|
7
|
+
|
|
8
|
+
Write it last, with real effort.
|
|
9
|
+
|
|
10
|
+
Title rules that held: a number helps almost everywhere; first-person "I..."
|
|
11
|
+
titles are a lever in experience/builder subs; a "?" title is a comment
|
|
12
|
+
machine in Q&A/discussion subs (ExperiencedDevs, database, backend,
|
|
13
|
+
learnsql, aws) but dies in showcase/meme subs; avoid "Title: subtitle"
|
|
14
|
+
colons; never "Please help" as a title. Flair: pick the value or humor
|
|
15
|
+
flair; never the self-promo or low-effort-question flair.
|
|
16
|
+
|
|
17
|
+
Title rules added 2026-10: the title is the claim, said the way the author would
|
|
18
|
+
say it in a comment ("Everyone argues schemaless vs schema like it's
|
|
19
|
+
either/or. It isn't, and picking a side is the actual mistake"). It is
|
|
20
|
+
about the reader's own setup, something they can disagree with from the
|
|
21
|
+
feed without opening the post. No product name, no brand word a topic word
|
|
22
|
+
already implies, no tagline. Dry one-liners are the author's register too ("I
|
|
23
|
+
almost got owned. By myself.").
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: reply-moves
|
|
3
|
+
description: Use when drafting the words of a reply, after the stance is settled.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Reply moves by situation
|
|
7
|
+
|
|
8
|
+
All replies: no preamble, conclusion first. (Posts are different: `post-voice`.)
|
|
9
|
+
|
|
10
|
+
- **Wrong AND smug:** soft-flex opener, receipt, flat correction. "I'm
|
|
11
|
+
sorry but I think you need to read the docs again [link]. Skills are
|
|
12
|
+
injected at session start..."
|
|
13
|
+
- **Wrong but polite:** skip the jab, open with the source or flat fact,
|
|
14
|
+
calm. Calm is not agreeing; the false premise still gets corrected.
|
|
15
|
+
- **Polite AND sharp but framing wrong (the dangerous one):** acknowledge
|
|
16
|
+
nothing false. Correction stated flat, one concrete consequence, stop.
|
|
17
|
+
- **True fact, false conclusion:** agree with the true fact plainly (that's
|
|
18
|
+
not a concession), then refute the conclusion hard. Two reusable moves:
|
|
19
|
+
the "it would already be baked in" move (if saying X were enough, Claude
|
|
20
|
+
would already do X by default), and SHOW the specific instead of
|
|
21
|
+
asserting it: give the actual list of concrete rules, and verify every
|
|
22
|
+
item is airtight; one vague bullet undercuts the whole point.
|
|
23
|
+
- **Confidently misframing:** flat correction, conclusion first, one
|
|
24
|
+
consequence, stop.
|
|
25
|
+
- **Genuine question (lost, not challenging):** straight into plain
|
|
26
|
+
language, lead with an analogy, end on a crisp one-line distinction
|
|
27
|
+
("skills help, hooks enforce").
|
|
28
|
+
- **Disagreeing with an upvoted crowd belief:** open hard, stack flat
|
|
29
|
+
declarative reasons, end with the fix. "I'm sorry but you are way off...
|
|
30
|
+
Just give it a detailed description of what you want built and how."
|
|
31
|
+
- **Praise:** take it cleanly. "Thanks brother. Appreciate it." No
|
|
32
|
+
deflecting, no over-thanking.
|
|
33
|
+
|
|
34
|
+
**Target register for replies (the author's own words, study it):**
|
|
35
|
+
> Hooks are the only thing that can cover you. There is no enforcement in
|
|
36
|
+
> a skill or in Claude.md for that matter. Hooks are the only thing that
|
|
37
|
+
> can stop Claude from reading, writing or piping a curl command through
|
|
38
|
+
> shell to steal all your personal information.
|
|
39
|
+
|
|
40
|
+
Conclusion first. Flat declaratives. Threat named plainly. Then it stops.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: reply-stance
|
|
3
|
+
description: Use when about to draft any reply to a comment, a review or a thread, or when asked whether to agree with what someone said.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Stance before voice: is the position right?
|
|
7
|
+
|
|
8
|
+
Voice is HOW it sounds; this is WHETHER the position is even right. Getting the voice right but conceding a false point is still a failed reply.
|
|
9
|
+
|
|
10
|
+
<constraints>
|
|
11
|
+
Always do:
|
|
12
|
+
1. Replying to a comment on OUR post, or to OUR comment? The reply MUST be rooted in and consistent with what we already said. If the author's original text is NOT in context, STOP and ask for it before drafting. The commenter quoting or summarizing the user does NOT count; their recap is their framing. If you can "infer the gist", that is exactly the trap.
|
|
13
|
+
2. Verify before agreeing, ALWAYS. Polite and reasonable-sounding is not verification. If you can't verify it, don't endorse it. Definitive is on-brand for the author, but only when the claim is actually true.
|
|
14
|
+
3. If the core framing is false, LEAD with the correction.
|
|
15
|
+
|
|
16
|
+
Never do:
|
|
17
|
+
- Stroke egos, or agree with anything partly false, not even the agreeable-sounding part. The trap: someone polite and technically sharp, and the instinct is "you're right that... but". NO.
|
|
18
|
+
- Use the disguised version: "X is real, sure, but..." / "fair point, but..." is the same concession wearing a correction's clothes. Watch for "sure", "fair", "real", "valid" right before a "but".
|
|
19
|
+
</constraints>
|
|
20
|
+
|
|
21
|
+
Worked example. A commenter politely said hooks "alone don't fully cover" the supply chain risk. WRONG draft: "You're right that the skill file can be the attack vector. The supply chain risk is real." RIGHT (the author's actual line): "There is no security in a skill. Period. Hooks are the only thing that can stop Claude from reading, writing or piping a curl command through shell to steal all your personal information." Lead with the correction.
|
|
22
|
+
|
|
23
|
+
Check on the finished reply: consistent with what we already said, or did I ask for the author's original instead of guessing? Verified before agreeing with any part? No false premise conceded because they were polite?
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: should-i-reply
|
|
3
|
+
description: Use when deciding whether a comment deserves a reply at all, or when surfacing comments for the author.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Decide whether to reply at all
|
|
7
|
+
|
|
8
|
+
The author does NOT reply just to be right. A reply must make a difference.
|
|
9
|
+
|
|
10
|
+
<constraints>
|
|
11
|
+
Always do:
|
|
12
|
+
- Wrong + few upvotes: ignore. Going nowhere.
|
|
13
|
+
- Wrong + highly upvoted + clear why: reply. The reply is for the silent many who upvoted the misinformation, not for the author.
|
|
14
|
+
- Right but adds nothing, or low visibility: skip.
|
|
15
|
+
- Merely smug, no spreading misinformation: skip; replying would be ego.
|
|
16
|
+
- When surfacing comments for the author, filter OUT "technically wrong but changes nothing".
|
|
17
|
+
- Whenever we do reply: tear down AND redirect. Give the correct approach.
|
|
18
|
+
|
|
19
|
+
Never do:
|
|
20
|
+
- Leave someone with just "no".
|
|
21
|
+
</constraints>
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// schemas-only (PreToolUse, Write|Edit|MultiEdit|NotebookEdit|Bash): a Zod schema is written once, in the schemas folder
|
|
3
|
+
// (STEP 3 item 4: "Zod v4 schemas only under schemas/"). Routes, handlers, adapters and the web app import the shape
|
|
4
|
+
// from there (and infer its type with z.infer), so a request, a record and a form never drift apart.
|
|
5
|
+
// Refused, by every write route (lib/writes.mjs): a write that ADDS a `z.object(` (or `z.strictObject(` / `z.looseObject(`)
|
|
6
|
+
// to a JS or TS file outside the layout's "schemas" concept (default: any schemas/ folder). env.ts is the one other place a
|
|
7
|
+
// shape lives (the environment's names and types); it is let through. Another project's files are not judged.
|
|
8
|
+
// node schemas-only.mjs --selftest
|
|
9
|
+
import { basename, extname, join } from 'node:path';
|
|
10
|
+
import { judgeEvent } from './lib/writes.mjs';
|
|
11
|
+
import { matchesAny } from './lib/glob.mjs';
|
|
12
|
+
import { conceptGlobs, readLayout } from './lib/layout.mjs';
|
|
13
|
+
import { blankCode } from './lib/cpp-scan.mjs';
|
|
14
|
+
import { claudeRoot } from './lib/project.mjs';
|
|
15
|
+
import { runHook, scratchProject, verdicts, writeOf } from './lib/selftest.mjs';
|
|
16
|
+
import { asHook, isMain } from './lib/hook-log.mjs';
|
|
17
|
+
|
|
18
|
+
const CODE = new Set(['.js', '.mjs', '.cjs', '.ts', '.mts', '.cts', '.tsx', '.jsx']);
|
|
19
|
+
const SCHEMA = /\bz\.(?:object|strictObject|looseObject)\s*\(/g;
|
|
20
|
+
const count = (t) => (blankCode(t ?? '').match(SCHEMA) ?? []).length;
|
|
21
|
+
|
|
22
|
+
export function verdict(rel, before, after, globs) {
|
|
23
|
+
if (!CODE.has(extname(rel)) || after === null || /^env\.[cm]?[jt]s$/.test(basename(rel))) return null;
|
|
24
|
+
if (matchesAny(rel, globs) || count(after) <= count(before)) return null;
|
|
25
|
+
return `BLOCKED by schemas-only: ${rel} gains a Zod schema (z.object) outside the schemas folder (${globs.join(', ')}).\n` +
|
|
26
|
+
'Write the schema once in the schemas folder (packages/core/src/schemas), export it, and import it here; take its type with z.infer.\n';
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const main = (text) => judgeEvent(text, {
|
|
30
|
+
name: 'schemas-only',
|
|
31
|
+
write: (w, rel) => verdict(rel, w.before, w.after, conceptGlobs(readLayout(claudeRoot(w.path)), 'schemas') ?? ['**/schemas/**']),
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
function selftest() {
|
|
35
|
+
const hook = new URL(import.meta.url).pathname;
|
|
36
|
+
const layout = { folders: { schemas: { path: 'packages/core/src/schemas', purpose: 'schemas' } }, concepts: { schemas: ['schemas'] } };
|
|
37
|
+
const dir = scratchProject({ 'api/src/routes/old.ts': 'const Q = z.object({ id: z.string() });\n' }, layout);
|
|
38
|
+
const w = (rel, text) => runHook(hook, dir, writeOf(join(dir, rel), text));
|
|
39
|
+
const cases = [
|
|
40
|
+
['a schema in the schemas folder', w('packages/core/src/schemas/user.ts', 'export const User = z.object({ id: z.string() });\n'), 0],
|
|
41
|
+
['a schema in a route', w('api/src/routes/user.ts', 'const Body = z.object({ name: z.string() });\n'), 2],
|
|
42
|
+
['a strictObject in a handler', w('api/src/handlers/user.ts', 'const B = z.strictObject({});\n'), 2],
|
|
43
|
+
['a schema in the web app', w('channel/app/form.tsx', 'const F = z.object({});\n'), 2],
|
|
44
|
+
['the route imports the schema', w('api/src/routes/user.ts', "import { User } from '@core/schemas/user';\n"), 0],
|
|
45
|
+
['env.ts shapes the environment', w('api/src/env.ts', 'export const Env = z.object({ PORT: z.coerce.number() });\n'), 0],
|
|
46
|
+
['a file that already had one keeps it', w('api/src/routes/old.ts', 'const Q = z.object({ id: z.string() });\nexport { Q };\n'), 0],
|
|
47
|
+
['a comment that shows z.object is not a schema', w('api/src/routes/c.ts', '// never z.object( here\n'), 0],
|
|
48
|
+
];
|
|
49
|
+
return verdicts('schemas-only', cases);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export const hook = main; // run-hooks.mjs calls it with the event's text (KWB-24)
|
|
53
|
+
if (isMain(import.meta.url)) process.exit(process.argv.includes('--selftest') ? selftest() : await asHook('schemas-only', main));
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "zod",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Zod 4 schemas written once, in one folder, and imported everywhere (schemas-only), with the environment shaped in one env.ts.",
|
|
5
|
+
"type": "stock",
|
|
6
|
+
"author": "claude-packs",
|
|
7
|
+
"license": "MIT",
|
|
8
|
+
"homepage": "https://github.com/TheDecipherist/claude-packs",
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "https://github.com/TheDecipherist/claude-packs.git",
|
|
12
|
+
"directory": "packs/zod"
|
|
13
|
+
},
|
|
14
|
+
"keywords": [
|
|
15
|
+
"zod",
|
|
16
|
+
"schemas"
|
|
17
|
+
],
|
|
18
|
+
"engines": {
|
|
19
|
+
"claude-packs": ">=0.26.0"
|
|
20
|
+
},
|
|
21
|
+
"concepts": {
|
|
22
|
+
"schemas": [
|
|
23
|
+
"**/schemas/**",
|
|
24
|
+
"**/*.schema.ts"
|
|
25
|
+
],
|
|
26
|
+
"env": [
|
|
27
|
+
"**/env.ts"
|
|
28
|
+
]
|
|
29
|
+
},
|
|
30
|
+
"hooks": {
|
|
31
|
+
"PreToolUse": [
|
|
32
|
+
{
|
|
33
|
+
"matcher": "Write|Edit|MultiEdit|NotebookEdit|Bash",
|
|
34
|
+
"hooks": [
|
|
35
|
+
{
|
|
36
|
+
"type": "command",
|
|
37
|
+
"command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/schemas-only.mjs\"",
|
|
38
|
+
"timeout": 10
|
|
39
|
+
}
|
|
40
|
+
]
|
|
41
|
+
}
|
|
42
|
+
]
|
|
43
|
+
}
|
|
44
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
# concepts: env
|
|
3
|
+
---
|
|
4
|
+
# env.ts holds the shape of the environment, never a value; .env is never committed
|
|
5
|
+
|
|
6
|
+
<constraints>
|
|
7
|
+
Always do:
|
|
8
|
+
- Parse `process.env` once, at start, with a Zod schema in `env.ts`: each name, its type, whether it is required, a default only when it is not a secret. Fail at start when one is missing.
|
|
9
|
+
- Keep the values in an ignored `.env`; commit `.env.example` with the names.
|
|
10
|
+
|
|
11
|
+
Never do:
|
|
12
|
+
- Write a secret or a real value into `env.ts`, or read `process.env` anywhere else.
|
|
13
|
+
- Commit a `.env` (`secrets-guard` refuses it).
|
|
14
|
+
</constraints>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
# concepts: schemas
|
|
3
|
+
---
|
|
4
|
+
# Zod 4 schemas live only in the schemas folder, written once and imported everywhere
|
|
5
|
+
|
|
6
|
+
<constraints>
|
|
7
|
+
Always do:
|
|
8
|
+
- Write every request, response, record and form shape as a Zod 4 schema in the schemas folder, exported, and take its type with `z.infer`.
|
|
9
|
+
- Give the API's routes these schemas (a Zod type provider), and the web app the same ones for its forms.
|
|
10
|
+
|
|
11
|
+
Never do:
|
|
12
|
+
- Write `z.object` anywhere else (`schemas-only` refuses it), or a second shape of the same thing.
|
|
13
|
+
- Use Zod 3 for new code.
|
|
14
|
+
</constraints>
|