cli-jaw 0.1.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/LICENSE +21 -0
- package/README.ko.md +411 -0
- package/README.md +416 -0
- package/README.zh-CN.md +411 -0
- package/dist/bin/cli-jaw.js +108 -0
- package/dist/bin/cli-jaw.js.map +1 -0
- package/dist/bin/commands/browser.js +241 -0
- package/dist/bin/commands/browser.js.map +1 -0
- package/dist/bin/commands/chat.js +878 -0
- package/dist/bin/commands/chat.js.map +1 -0
- package/dist/bin/commands/doctor.js +152 -0
- package/dist/bin/commands/doctor.js.map +1 -0
- package/dist/bin/commands/employee.js +70 -0
- package/dist/bin/commands/employee.js.map +1 -0
- package/dist/bin/commands/init.js +110 -0
- package/dist/bin/commands/init.js.map +1 -0
- package/dist/bin/commands/mcp.js +219 -0
- package/dist/bin/commands/mcp.js.map +1 -0
- package/dist/bin/commands/memory.js +105 -0
- package/dist/bin/commands/memory.js.map +1 -0
- package/dist/bin/commands/reset.js +109 -0
- package/dist/bin/commands/reset.js.map +1 -0
- package/dist/bin/commands/serve.js +75 -0
- package/dist/bin/commands/serve.js.map +1 -0
- package/dist/bin/commands/skill.js +232 -0
- package/dist/bin/commands/skill.js.map +1 -0
- package/dist/bin/commands/status.js +51 -0
- package/dist/bin/commands/status.js.map +1 -0
- package/dist/bin/postinstall.js +218 -0
- package/dist/bin/postinstall.js.map +1 -0
- package/dist/lib/mcp-sync.js +639 -0
- package/dist/lib/mcp-sync.js.map +1 -0
- package/dist/lib/quota-copilot.js +62 -0
- package/dist/lib/quota-copilot.js.map +1 -0
- package/dist/lib/upload.js +72 -0
- package/dist/lib/upload.js.map +1 -0
- package/dist/server.js +832 -0
- package/dist/server.js.map +1 -0
- package/dist/src/agent/args.js +66 -0
- package/dist/src/agent/args.js.map +1 -0
- package/dist/src/agent/events.js +328 -0
- package/dist/src/agent/events.js.map +1 -0
- package/dist/src/agent/spawn.js +646 -0
- package/dist/src/agent/spawn.js.map +1 -0
- package/dist/src/browser/actions.js +168 -0
- package/dist/src/browser/actions.js.map +1 -0
- package/dist/src/browser/connection.js +79 -0
- package/dist/src/browser/connection.js.map +1 -0
- package/dist/src/browser/index.js +4 -0
- package/dist/src/browser/index.js.map +1 -0
- package/dist/src/browser/vision.js +128 -0
- package/dist/src/browser/vision.js.map +1 -0
- package/dist/src/cli/acp-client.js +298 -0
- package/dist/src/cli/acp-client.js.map +1 -0
- package/dist/src/cli/commands.js +267 -0
- package/dist/src/cli/commands.js.map +1 -0
- package/dist/src/cli/handlers.js +405 -0
- package/dist/src/cli/handlers.js.map +1 -0
- package/dist/src/cli/registry.js +87 -0
- package/dist/src/cli/registry.js.map +1 -0
- package/dist/src/command-contract/catalog.js +36 -0
- package/dist/src/command-contract/catalog.js.map +1 -0
- package/dist/src/command-contract/help-renderer.js +39 -0
- package/dist/src/command-contract/help-renderer.js.map +1 -0
- package/dist/src/command-contract/policy.js +34 -0
- package/dist/src/command-contract/policy.js.map +1 -0
- package/dist/src/core/bus.js +17 -0
- package/dist/src/core/bus.js.map +1 -0
- package/dist/src/core/config.js +198 -0
- package/dist/src/core/config.js.map +1 -0
- package/dist/src/core/db.js +97 -0
- package/dist/src/core/db.js.map +1 -0
- package/dist/src/core/i18n.js +86 -0
- package/dist/src/core/i18n.js.map +1 -0
- package/dist/src/core/logger.js +14 -0
- package/dist/src/core/logger.js.map +1 -0
- package/dist/src/core/settings-merge.js +40 -0
- package/dist/src/core/settings-merge.js.map +1 -0
- package/dist/src/http/async-handler.js +6 -0
- package/dist/src/http/async-handler.js.map +1 -0
- package/dist/src/http/error-middleware.js +24 -0
- package/dist/src/http/error-middleware.js.map +1 -0
- package/dist/src/http/response.js +16 -0
- package/dist/src/http/response.js.map +1 -0
- package/dist/src/memory/heartbeat.js +106 -0
- package/dist/src/memory/heartbeat.js.map +1 -0
- package/dist/src/memory/memory.js +119 -0
- package/dist/src/memory/memory.js.map +1 -0
- package/dist/src/memory/worklog.js +154 -0
- package/dist/src/memory/worklog.js.map +1 -0
- package/dist/src/orchestrator/distribute.js +310 -0
- package/dist/src/orchestrator/distribute.js.map +1 -0
- package/dist/src/orchestrator/parser.js +118 -0
- package/dist/src/orchestrator/parser.js.map +1 -0
- package/dist/src/orchestrator/pipeline.js +343 -0
- package/dist/src/orchestrator/pipeline.js.map +1 -0
- package/dist/src/prompt/builder.js +531 -0
- package/dist/src/prompt/builder.js.map +1 -0
- package/dist/src/routes/browser.js +126 -0
- package/dist/src/routes/browser.js.map +1 -0
- package/dist/src/routes/quota.js +94 -0
- package/dist/src/routes/quota.js.map +1 -0
- package/dist/src/security/decode.js +23 -0
- package/dist/src/security/decode.js.map +1 -0
- package/dist/src/security/path-guards.js +62 -0
- package/dist/src/security/path-guards.js.map +1 -0
- package/dist/src/telegram/bot.js +469 -0
- package/dist/src/telegram/bot.js.map +1 -0
- package/dist/src/telegram/forwarder.js +93 -0
- package/dist/src/telegram/forwarder.js.map +1 -0
- package/package.json +80 -0
- package/public/css/chat.css +571 -0
- package/public/css/layout.css +350 -0
- package/public/css/markdown.css +270 -0
- package/public/css/modals.css +172 -0
- package/public/css/sidebar.css +225 -0
- package/public/css/variables.css +142 -0
- package/public/index.html +470 -0
- package/public/js/api.js +55 -0
- package/public/js/constants.js +119 -0
- package/public/js/features/appname.js +43 -0
- package/public/js/features/chat.js +242 -0
- package/public/js/features/employees.js +120 -0
- package/public/js/features/heartbeat.js +80 -0
- package/public/js/features/i18n.js +125 -0
- package/public/js/features/memory.js +85 -0
- package/public/js/features/settings.js +512 -0
- package/public/js/features/sidebar.js +88 -0
- package/public/js/features/skills.js +68 -0
- package/public/js/features/slash-commands.js +231 -0
- package/public/js/features/theme.js +40 -0
- package/public/js/locale.js +23 -0
- package/public/js/main.js +281 -0
- package/public/js/render.js +294 -0
- package/public/js/state.js +16 -0
- package/public/js/ui.js +172 -0
- package/public/js/ws.js +76 -0
- package/public/locales/en.json +180 -0
- package/public/locales/ko.json +180 -0
- package/public/theme-test.html +545 -0
- package/skills_ref/1password/SKILL.md +70 -0
- package/skills_ref/agents-sdk/SKILL.md +155 -0
- package/skills_ref/agents-sdk/references/callable.md +92 -0
- package/skills_ref/agents-sdk/references/codemode.md +207 -0
- package/skills_ref/agents-sdk/references/email.md +146 -0
- package/skills_ref/agents-sdk/references/mcp.md +154 -0
- package/skills_ref/agents-sdk/references/state-scheduling.md +164 -0
- package/skills_ref/agents-sdk/references/streaming-chat.md +178 -0
- package/skills_ref/agents-sdk/references/workflows.md +132 -0
- package/skills_ref/algorithmic-art/LICENSE.txt +202 -0
- package/skills_ref/algorithmic-art/SKILL.md +405 -0
- package/skills_ref/algorithmic-art/templates/generator_template.js +223 -0
- package/skills_ref/algorithmic-art/templates/viewer.html +599 -0
- package/skills_ref/apple-notes/SKILL.md +77 -0
- package/skills_ref/apple-reminders/SKILL.md +118 -0
- package/skills_ref/atlas/SKILL.md +99 -0
- package/skills_ref/brainstorming/SKILL.md +96 -0
- package/skills_ref/browser/SKILL.md +179 -0
- package/skills_ref/canvas-design/LICENSE.txt +202 -0
- package/skills_ref/canvas-design/SKILL.md +130 -0
- package/skills_ref/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -0
- package/skills_ref/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -0
- package/skills_ref/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -0
- package/skills_ref/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
- package/skills_ref/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -0
- package/skills_ref/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -0
- package/skills_ref/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -0
- package/skills_ref/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -0
- package/skills_ref/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -0
- package/skills_ref/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
- package/skills_ref/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -0
- package/skills_ref/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/Italiana-OFL.txt +93 -0
- package/skills_ref/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
- package/skills_ref/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/Jura-OFL.txt +93 -0
- package/skills_ref/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
- package/skills_ref/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/Lora-OFL.txt +93 -0
- package/skills_ref/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -0
- package/skills_ref/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
- package/skills_ref/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -0
- package/skills_ref/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -0
- package/skills_ref/canvas-design/canvas-fonts/PoiretOne-OFL.txt +93 -0
- package/skills_ref/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -0
- package/skills_ref/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -0
- package/skills_ref/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -0
- package/skills_ref/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
- package/skills_ref/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -0
- package/skills_ref/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
- package/skills_ref/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
- package/skills_ref/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
- package/skills_ref/changelog-generator/SKILL.md +104 -0
- package/skills_ref/cloudflare-deploy/SKILL.md +207 -0
- package/skills_ref/codebase-orientation/SKILL.md +29 -0
- package/skills_ref/config-file-explainer/SKILL.md +26 -0
- package/skills_ref/context-compression/SKILL.md +265 -0
- package/skills_ref/context-compression/references/evaluation-framework.md +213 -0
- package/skills_ref/context-compression/scripts/compression_evaluator.py +658 -0
- package/skills_ref/data-structure-chooser/SKILL.md +26 -0
- package/skills_ref/debugging-checklist/SKILL.md +26 -0
- package/skills_ref/debugging-helpers/CREATION-LOG.md +119 -0
- package/skills_ref/debugging-helpers/SKILL.md +296 -0
- package/skills_ref/debugging-helpers/condition-based-waiting-example.ts +158 -0
- package/skills_ref/debugging-helpers/condition-based-waiting.md +115 -0
- package/skills_ref/debugging-helpers/defense-in-depth.md +122 -0
- package/skills_ref/debugging-helpers/find-polluter.sh +63 -0
- package/skills_ref/debugging-helpers/root-cause-tracing.md +169 -0
- package/skills_ref/debugging-helpers/test-academic.md +14 -0
- package/skills_ref/debugging-helpers/test-pressure-1.md +58 -0
- package/skills_ref/debugging-helpers/test-pressure-2.md +68 -0
- package/skills_ref/debugging-helpers/test-pressure-3.md +69 -0
- package/skills_ref/deep-research/.env.example +7 -0
- package/skills_ref/deep-research/README.md +246 -0
- package/skills_ref/deep-research/SKILL.md +106 -0
- package/skills_ref/deep-research/requirements.txt +2 -0
- package/skills_ref/deep-research/scripts/research.py +692 -0
- package/skills_ref/dependency-install-helper/SKILL.md +26 -0
- package/skills_ref/dev/SKILL.md +65 -0
- package/skills_ref/dev-backend/SKILL.md +61 -0
- package/skills_ref/dev-data/SKILL.md +76 -0
- package/skills_ref/dev-frontend/LICENSE.txt +177 -0
- package/skills_ref/dev-frontend/SKILL.md +42 -0
- package/skills_ref/dev-testing/LICENSE.txt +202 -0
- package/skills_ref/dev-testing/SKILL.md +96 -0
- package/skills_ref/dev-testing/examples/console_logging.py +35 -0
- package/skills_ref/dev-testing/examples/element_discovery.py +40 -0
- package/skills_ref/dev-testing/examples/static_html_automation.py +33 -0
- package/skills_ref/dev-testing/scripts/with_server.py +106 -0
- package/skills_ref/develop-web-game/SKILL.md +149 -0
- package/skills_ref/differential-review/.claude-plugin/plugin.json +10 -0
- package/skills_ref/differential-review/README.md +109 -0
- package/skills_ref/differential-review/commands/diff-review.md +21 -0
- package/skills_ref/differential-review/skills/differential-review/SKILL.md +220 -0
- package/skills_ref/differential-review/skills/differential-review/adversarial.md +203 -0
- package/skills_ref/differential-review/skills/differential-review/methodology.md +234 -0
- package/skills_ref/differential-review/skills/differential-review/patterns.md +300 -0
- package/skills_ref/differential-review/skills/differential-review/reporting.md +369 -0
- package/skills_ref/dispatching-parallel-agents/SKILL.md +180 -0
- package/skills_ref/doc-coauthoring/SKILL.md +375 -0
- package/skills_ref/docx/LICENSE.txt +30 -0
- package/skills_ref/docx/SKILL.md +481 -0
- package/skills_ref/docx/scripts/__init__.py +1 -0
- package/skills_ref/docx/scripts/accept_changes.py +135 -0
- package/skills_ref/docx/scripts/comment.py +318 -0
- package/skills_ref/docx/scripts/office/helpers/__init__.py +0 -0
- package/skills_ref/docx/scripts/office/helpers/merge_runs.py +199 -0
- package/skills_ref/docx/scripts/office/helpers/simplify_redlines.py +197 -0
- package/skills_ref/docx/scripts/office/pack.py +159 -0
- package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/skills_ref/docx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/skills_ref/docx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/skills_ref/docx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/skills_ref/docx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/skills_ref/docx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/skills_ref/docx/scripts/office/schemas/mce/mc.xsd +75 -0
- package/skills_ref/docx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
- package/skills_ref/docx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
- package/skills_ref/docx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
- package/skills_ref/docx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/skills_ref/docx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/skills_ref/docx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/skills_ref/docx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/skills_ref/docx/scripts/office/soffice.py +183 -0
- package/skills_ref/docx/scripts/office/unpack.py +132 -0
- package/skills_ref/docx/scripts/office/validate.py +111 -0
- package/skills_ref/docx/scripts/office/validators/__init__.py +15 -0
- package/skills_ref/docx/scripts/office/validators/base.py +847 -0
- package/skills_ref/docx/scripts/office/validators/docx.py +446 -0
- package/skills_ref/docx/scripts/office/validators/pptx.py +275 -0
- package/skills_ref/docx/scripts/office/validators/redlining.py +247 -0
- package/skills_ref/docx/scripts/templates/comments.xml +3 -0
- package/skills_ref/docx/scripts/templates/commentsExtended.xml +3 -0
- package/skills_ref/docx/scripts/templates/commentsExtensible.xml +3 -0
- package/skills_ref/docx/scripts/templates/commentsIds.xml +3 -0
- package/skills_ref/docx/scripts/templates/people.xml +3 -0
- package/skills_ref/durable-objects/SKILL.md +186 -0
- package/skills_ref/durable-objects/references/rules.md +286 -0
- package/skills_ref/durable-objects/references/testing.md +264 -0
- package/skills_ref/durable-objects/references/workers.md +346 -0
- package/skills_ref/email-draft-polish/SKILL.md +24 -0
- package/skills_ref/error-message-explainer/SKILL.md +27 -0
- package/skills_ref/fal-image-edit/SKILL.md +249 -0
- package/skills_ref/fal-image-edit/scripts/edit-image.sh +199 -0
- package/skills_ref/figma-implement-design/SKILL.md +264 -0
- package/skills_ref/git-worktrees/SKILL.md +218 -0
- package/skills_ref/github/SKILL.md +210 -0
- package/skills_ref/gog/SKILL.md +116 -0
- package/skills_ref/goplaces/SKILL.md +52 -0
- package/skills_ref/himalaya/SKILL.md +257 -0
- package/skills_ref/hugging-face-cli/SKILL.md +186 -0
- package/skills_ref/hugging-face-cli/references/commands.md +954 -0
- package/skills_ref/hugging-face-cli/references/examples.md +374 -0
- package/skills_ref/hugging-face-evaluation/SKILL.md +651 -0
- package/skills_ref/hugging-face-evaluation/examples/.env.example +7 -0
- package/skills_ref/hugging-face-evaluation/examples/USAGE_EXAMPLES.md +382 -0
- package/skills_ref/hugging-face-evaluation/examples/artificial_analysis_to_hub.py +141 -0
- package/skills_ref/hugging-face-evaluation/examples/example_readme_tables.md +135 -0
- package/skills_ref/hugging-face-evaluation/examples/metric_mapping.json +50 -0
- package/skills_ref/hugging-face-evaluation/requirements.txt +20 -0
- package/skills_ref/hugging-face-evaluation/scripts/evaluation_manager.py +1374 -0
- package/skills_ref/hugging-face-evaluation/scripts/inspect_eval_uv.py +104 -0
- package/skills_ref/hugging-face-evaluation/scripts/inspect_vllm_uv.py +317 -0
- package/skills_ref/hugging-face-evaluation/scripts/lighteval_vllm_uv.py +303 -0
- package/skills_ref/hugging-face-evaluation/scripts/run_eval_job.py +98 -0
- package/skills_ref/hugging-face-evaluation/scripts/run_vllm_eval_job.py +331 -0
- package/skills_ref/hugging-face-evaluation/scripts/test_extraction.py +206 -0
- package/skills_ref/hugging-face-model-trainer/SKILL.md +718 -0
- package/skills_ref/hugging-face-model-trainer/references/gguf_conversion.md +296 -0
- package/skills_ref/hugging-face-model-trainer/references/hardware_guide.md +283 -0
- package/skills_ref/hugging-face-model-trainer/references/hub_saving.md +364 -0
- package/skills_ref/hugging-face-model-trainer/references/reliability_principles.md +371 -0
- package/skills_ref/hugging-face-model-trainer/references/trackio_guide.md +189 -0
- package/skills_ref/hugging-face-model-trainer/references/training_methods.md +150 -0
- package/skills_ref/hugging-face-model-trainer/references/training_patterns.md +203 -0
- package/skills_ref/hugging-face-model-trainer/references/troubleshooting.md +282 -0
- package/skills_ref/hugging-face-model-trainer/references/unsloth.md +313 -0
- package/skills_ref/hugging-face-model-trainer/scripts/convert_to_gguf.py +424 -0
- package/skills_ref/hugging-face-model-trainer/scripts/dataset_inspector.py +417 -0
- package/skills_ref/hugging-face-model-trainer/scripts/estimate_cost.py +150 -0
- package/skills_ref/hugging-face-model-trainer/scripts/train_dpo_example.py +106 -0
- package/skills_ref/hugging-face-model-trainer/scripts/train_grpo_example.py +89 -0
- package/skills_ref/hugging-face-model-trainer/scripts/train_sft_example.py +122 -0
- package/skills_ref/hugging-face-model-trainer/scripts/unsloth_sft_example.py +512 -0
- package/skills_ref/imagegen/SKILL.md +174 -0
- package/skills_ref/insecure-defaults/.claude-plugin/plugin.json +10 -0
- package/skills_ref/insecure-defaults/README.md +45 -0
- package/skills_ref/insecure-defaults/skills/insecure-defaults/SKILL.md +117 -0
- package/skills_ref/insecure-defaults/skills/insecure-defaults/references/examples.md +409 -0
- package/skills_ref/jupyter-notebook/SKILL.md +107 -0
- package/skills_ref/linear/SKILL.md +87 -0
- package/skills_ref/linter-fix-guide/SKILL.md +27 -0
- package/skills_ref/log-summarizer/SKILL.md +27 -0
- package/skills_ref/mcp-builder/LICENSE.txt +202 -0
- package/skills_ref/mcp-builder/SKILL.md +236 -0
- package/skills_ref/mcp-builder/reference/evaluation.md +602 -0
- package/skills_ref/mcp-builder/reference/mcp_best_practices.md +249 -0
- package/skills_ref/mcp-builder/reference/node_mcp_server.md +970 -0
- package/skills_ref/mcp-builder/reference/python_mcp_server.md +719 -0
- package/skills_ref/mcp-builder/scripts/connections.py +151 -0
- package/skills_ref/mcp-builder/scripts/evaluation.py +373 -0
- package/skills_ref/mcp-builder/scripts/example_evaluation.xml +22 -0
- package/skills_ref/mcp-builder/scripts/requirements.txt +2 -0
- package/skills_ref/memory/SKILL.md +129 -0
- package/skills_ref/modern-python/.claude-plugin/plugin.json +10 -0
- package/skills_ref/modern-python/README.md +66 -0
- package/skills_ref/modern-python/hooks/hooks.json +16 -0
- package/skills_ref/modern-python/hooks/setup-shims.bats +70 -0
- package/skills_ref/modern-python/hooks/setup-shims.sh +24 -0
- package/skills_ref/modern-python/hooks/shims/pip +27 -0
- package/skills_ref/modern-python/hooks/shims/pip-shim.bats +45 -0
- package/skills_ref/modern-python/hooks/shims/pip3 +27 -0
- package/skills_ref/modern-python/hooks/shims/pipx +41 -0
- package/skills_ref/modern-python/hooks/shims/pipx-shim.bats +64 -0
- package/skills_ref/modern-python/hooks/shims/python +26 -0
- package/skills_ref/modern-python/hooks/shims/python-shim.bats +53 -0
- package/skills_ref/modern-python/hooks/shims/python3 +26 -0
- package/skills_ref/modern-python/hooks/shims/uv +27 -0
- package/skills_ref/modern-python/hooks/shims/uv-shim.bats +47 -0
- package/skills_ref/modern-python/skills/modern-python/SKILL.md +333 -0
- package/skills_ref/modern-python/skills/modern-python/references/dependabot.md +43 -0
- package/skills_ref/modern-python/skills/modern-python/references/migration-checklist.md +141 -0
- package/skills_ref/modern-python/skills/modern-python/references/pep723-scripts.md +259 -0
- package/skills_ref/modern-python/skills/modern-python/references/prek.md +211 -0
- package/skills_ref/modern-python/skills/modern-python/references/pyproject.md +254 -0
- package/skills_ref/modern-python/skills/modern-python/references/ruff-config.md +240 -0
- package/skills_ref/modern-python/skills/modern-python/references/security-setup.md +255 -0
- package/skills_ref/modern-python/skills/modern-python/references/testing.md +284 -0
- package/skills_ref/modern-python/skills/modern-python/references/uv-commands.md +200 -0
- package/skills_ref/modern-python/skills/modern-python/templates/dependabot.yml +36 -0
- package/skills_ref/modern-python/skills/modern-python/templates/pre-commit-config.yaml +66 -0
- package/skills_ref/nano-banana-pro/SKILL.md +58 -0
- package/skills_ref/netlify-deploy/SKILL.md +233 -0
- package/skills_ref/notion/SKILL.md +304 -0
- package/skills_ref/notion-knowledge-capture/SKILL.md +56 -0
- package/skills_ref/notion-meeting-intelligence/SKILL.md +60 -0
- package/skills_ref/notion-research-documentation/SKILL.md +59 -0
- package/skills_ref/notion-spec-to-implementation/SKILL.md +58 -0
- package/skills_ref/obsidian/SKILL.md +81 -0
- package/skills_ref/openai-docs/SKILL.md +56 -0
- package/skills_ref/openhue/SKILL.md +112 -0
- package/skills_ref/pdf/SKILL.md +69 -0
- package/skills_ref/postgres/README.md +77 -0
- package/skills_ref/postgres/SKILL.md +129 -0
- package/skills_ref/postgres/connections.example.json +34 -0
- package/skills_ref/postgres/requirements.txt +1 -0
- package/skills_ref/postgres/scripts/query.py +262 -0
- package/skills_ref/pptx/LICENSE.txt +30 -0
- package/skills_ref/pptx/SKILL.md +232 -0
- package/skills_ref/pptx/editing.md +205 -0
- package/skills_ref/pptx/pptxgenjs.md +420 -0
- package/skills_ref/pptx/scripts/__init__.py +0 -0
- package/skills_ref/pptx/scripts/add_slide.py +195 -0
- package/skills_ref/pptx/scripts/clean.py +286 -0
- package/skills_ref/pptx/scripts/office/helpers/__init__.py +0 -0
- package/skills_ref/pptx/scripts/office/helpers/merge_runs.py +199 -0
- package/skills_ref/pptx/scripts/office/helpers/simplify_redlines.py +197 -0
- package/skills_ref/pptx/scripts/office/pack.py +159 -0
- package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/skills_ref/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/skills_ref/pptx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/skills_ref/pptx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/skills_ref/pptx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/skills_ref/pptx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/skills_ref/pptx/scripts/office/schemas/mce/mc.xsd +75 -0
- package/skills_ref/pptx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
- package/skills_ref/pptx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
- package/skills_ref/pptx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
- package/skills_ref/pptx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/skills_ref/pptx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/skills_ref/pptx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/skills_ref/pptx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/skills_ref/pptx/scripts/office/soffice.py +183 -0
- package/skills_ref/pptx/scripts/office/unpack.py +132 -0
- package/skills_ref/pptx/scripts/office/validate.py +111 -0
- package/skills_ref/pptx/scripts/office/validators/__init__.py +15 -0
- package/skills_ref/pptx/scripts/office/validators/base.py +847 -0
- package/skills_ref/pptx/scripts/office/validators/docx.py +446 -0
- package/skills_ref/pptx/scripts/office/validators/pptx.py +275 -0
- package/skills_ref/pptx/scripts/office/validators/redlining.py +247 -0
- package/skills_ref/pptx/scripts/thumbnail.py +289 -0
- package/skills_ref/property-based-testing/.claude-plugin/plugin.json +9 -0
- package/skills_ref/property-based-testing/README.md +47 -0
- package/skills_ref/property-based-testing/skills/property-based-testing/README.md +88 -0
- package/skills_ref/property-based-testing/skills/property-based-testing/SKILL.md +123 -0
- package/skills_ref/property-based-testing/skills/property-based-testing/references/design.md +191 -0
- package/skills_ref/property-based-testing/skills/property-based-testing/references/generating.md +204 -0
- package/skills_ref/property-based-testing/skills/property-based-testing/references/interpreting-failures.md +239 -0
- package/skills_ref/property-based-testing/skills/property-based-testing/references/libraries.md +130 -0
- package/skills_ref/property-based-testing/skills/property-based-testing/references/refactoring.md +181 -0
- package/skills_ref/property-based-testing/skills/property-based-testing/references/reviewing.md +209 -0
- package/skills_ref/property-based-testing/skills/property-based-testing/references/strategies.md +124 -0
- package/skills_ref/react-best-practices/AGENTS.md +2934 -0
- package/skills_ref/react-best-practices/README.md +123 -0
- package/skills_ref/react-best-practices/SKILL.md +136 -0
- package/skills_ref/react-best-practices/metadata.json +15 -0
- package/skills_ref/react-best-practices/rules/_sections.md +46 -0
- package/skills_ref/react-best-practices/rules/_template.md +28 -0
- package/skills_ref/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/skills_ref/react-best-practices/rules/advanced-init-once.md +42 -0
- package/skills_ref/react-best-practices/rules/advanced-use-latest.md +39 -0
- package/skills_ref/react-best-practices/rules/async-api-routes.md +38 -0
- package/skills_ref/react-best-practices/rules/async-defer-await.md +80 -0
- package/skills_ref/react-best-practices/rules/async-dependencies.md +51 -0
- package/skills_ref/react-best-practices/rules/async-parallel.md +28 -0
- package/skills_ref/react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/skills_ref/react-best-practices/rules/bundle-barrel-imports.md +59 -0
- package/skills_ref/react-best-practices/rules/bundle-conditional.md +31 -0
- package/skills_ref/react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/skills_ref/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/skills_ref/react-best-practices/rules/bundle-preload.md +50 -0
- package/skills_ref/react-best-practices/rules/client-event-listeners.md +74 -0
- package/skills_ref/react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/skills_ref/react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/skills_ref/react-best-practices/rules/client-swr-dedup.md +56 -0
- package/skills_ref/react-best-practices/rules/js-batch-dom-css.md +107 -0
- package/skills_ref/react-best-practices/rules/js-cache-function-results.md +80 -0
- package/skills_ref/react-best-practices/rules/js-cache-property-access.md +28 -0
- package/skills_ref/react-best-practices/rules/js-cache-storage.md +70 -0
- package/skills_ref/react-best-practices/rules/js-combine-iterations.md +32 -0
- package/skills_ref/react-best-practices/rules/js-early-exit.md +50 -0
- package/skills_ref/react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/skills_ref/react-best-practices/rules/js-index-maps.md +37 -0
- package/skills_ref/react-best-practices/rules/js-length-check-first.md +49 -0
- package/skills_ref/react-best-practices/rules/js-min-max-loop.md +82 -0
- package/skills_ref/react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/skills_ref/react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/skills_ref/react-best-practices/rules/rendering-activity.md +26 -0
- package/skills_ref/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/skills_ref/react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/skills_ref/react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/skills_ref/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/skills_ref/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/skills_ref/react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
- package/skills_ref/react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/skills_ref/react-best-practices/rules/rendering-usetransition-loading.md +75 -0
- package/skills_ref/react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/skills_ref/react-best-practices/rules/rerender-dependencies.md +45 -0
- package/skills_ref/react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
- package/skills_ref/react-best-practices/rules/rerender-derived-state.md +29 -0
- package/skills_ref/react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/skills_ref/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/skills_ref/react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
- package/skills_ref/react-best-practices/rules/rerender-memo.md +44 -0
- package/skills_ref/react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
- package/skills_ref/react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
- package/skills_ref/react-best-practices/rules/rerender-transitions.md +40 -0
- package/skills_ref/react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
- package/skills_ref/react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/skills_ref/react-best-practices/rules/server-auth-actions.md +96 -0
- package/skills_ref/react-best-practices/rules/server-cache-lru.md +41 -0
- package/skills_ref/react-best-practices/rules/server-cache-react.md +76 -0
- package/skills_ref/react-best-practices/rules/server-dedup-props.md +65 -0
- package/skills_ref/react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/skills_ref/react-best-practices/rules/server-serialization.md +38 -0
- package/skills_ref/receiving-code-review/SKILL.md +213 -0
- package/skills_ref/registry.json +1493 -0
- package/skills_ref/render-deploy/SKILL.md +462 -0
- package/skills_ref/requesting-code-review/SKILL.md +105 -0
- package/skills_ref/requesting-code-review/code-reviewer.md +146 -0
- package/skills_ref/screen-capture/SKILL.md +162 -0
- package/skills_ref/security-best-practices/LICENSE.txt +201 -0
- package/skills_ref/security-best-practices/SKILL.md +86 -0
- package/skills_ref/security-best-practices/agents/openai.yaml +4 -0
- package/skills_ref/security-best-practices/references/golang-general-backend-security.md +826 -0
- package/skills_ref/security-best-practices/references/javascript-express-web-server-security.md +1158 -0
- package/skills_ref/security-best-practices/references/javascript-general-web-frontend-security.md +747 -0
- package/skills_ref/security-best-practices/references/javascript-jquery-web-frontend-security.md +678 -0
- package/skills_ref/security-best-practices/references/javascript-typescript-nextjs-web-server-security.md +1144 -0
- package/skills_ref/security-best-practices/references/javascript-typescript-react-web-frontend-security.md +990 -0
- package/skills_ref/security-best-practices/references/javascript-typescript-vue-web-frontend-security.md +791 -0
- package/skills_ref/security-best-practices/references/python-django-web-server-security.md +882 -0
- package/skills_ref/security-best-practices/references/python-fastapi-web-server-security.md +1036 -0
- package/skills_ref/security-best-practices/references/python-flask-web-server-security.md +705 -0
- package/skills_ref/security-ownership-map/LICENSE.txt +201 -0
- package/skills_ref/security-ownership-map/SKILL.md +206 -0
- package/skills_ref/security-ownership-map/agents/openai.yaml +4 -0
- package/skills_ref/security-ownership-map/references/neo4j-import.md +60 -0
- package/skills_ref/security-ownership-map/scripts/build_ownership_map.py +956 -0
- package/skills_ref/security-ownership-map/scripts/community_maintainers.py +544 -0
- package/skills_ref/security-ownership-map/scripts/query_ownership.py +483 -0
- package/skills_ref/security-ownership-map/scripts/run_ownership_map.py +200 -0
- package/skills_ref/security-threat-model/LICENSE.txt +201 -0
- package/skills_ref/security-threat-model/SKILL.md +81 -0
- package/skills_ref/security-threat-model/agents/openai.yaml +4 -0
- package/skills_ref/security-threat-model/references/prompt-template.md +255 -0
- package/skills_ref/security-threat-model/references/security-controls-and-assets.md +32 -0
- package/skills_ref/sentry/SKILL.md +123 -0
- package/skills_ref/skill-creator/SKILL.md +372 -0
- package/skills_ref/sora/SKILL.md +153 -0
- package/skills_ref/speech/SKILL.md +144 -0
- package/skills_ref/spotify-player/SKILL.md +64 -0
- package/skills_ref/static-analysis/.claude-plugin/plugin.json +8 -0
- package/skills_ref/static-analysis/README.md +65 -0
- package/skills_ref/static-analysis/agents/semgrep-scanner.md +71 -0
- package/skills_ref/static-analysis/agents/semgrep-triager.md +107 -0
- package/skills_ref/static-analysis/skills/codeql/SKILL.md +119 -0
- package/skills_ref/static-analysis/skills/codeql/references/diagnostic-query-templates.md +339 -0
- package/skills_ref/static-analysis/skills/codeql/references/language-details.md +207 -0
- package/skills_ref/static-analysis/skills/codeql/references/performance-tuning.md +111 -0
- package/skills_ref/static-analysis/skills/codeql/references/ruleset-catalog.md +63 -0
- package/skills_ref/static-analysis/skills/codeql/references/threat-models.md +44 -0
- package/skills_ref/static-analysis/skills/codeql/workflows/build-database.md +669 -0
- package/skills_ref/static-analysis/skills/codeql/workflows/create-data-extensions.md +536 -0
- package/skills_ref/static-analysis/skills/codeql/workflows/run-analysis.md +436 -0
- package/skills_ref/static-analysis/skills/sarif-parsing/SKILL.md +479 -0
- package/skills_ref/static-analysis/skills/sarif-parsing/resources/jq-queries.md +162 -0
- package/skills_ref/static-analysis/skills/sarif-parsing/resources/sarif_helpers.py +331 -0
- package/skills_ref/static-analysis/skills/semgrep/SKILL.md +431 -0
- package/skills_ref/static-analysis/skills/semgrep/references/rulesets.md +162 -0
- package/skills_ref/static-analysis/skills/semgrep/references/scanner-task-prompt.md +102 -0
- package/skills_ref/static-analysis/skills/semgrep/references/triage-task-prompt.md +122 -0
- package/skills_ref/static-analysis/skills/semgrep/scripts/merge_triaged_sarif.py +252 -0
- package/skills_ref/summarize/SKILL.md +87 -0
- package/skills_ref/tdd/SKILL.md +371 -0
- package/skills_ref/tdd/testing-anti-patterns.md +299 -0
- package/skills_ref/telegram-send/SKILL.md +99 -0
- package/skills_ref/terraform/README.md +105 -0
- package/skills_ref/terraform/code-generation/.claude-plugin/plugin.json +30 -0
- package/skills_ref/terraform/code-generation/skills/azure-verified-modules/SKILL.md +613 -0
- package/skills_ref/terraform/code-generation/skills/terraform-style-guide/SKILL.md +353 -0
- package/skills_ref/terraform/code-generation/skills/terraform-test/SKILL.md +1669 -0
- package/skills_ref/terraform/module-generation/.claude-plugin/plugin.json +30 -0
- package/skills_ref/terraform/module-generation/skills/refactor-module/SKILL.md +538 -0
- package/skills_ref/terraform/module-generation/skills/terraform-stacks/SKILL.md +468 -0
- package/skills_ref/terraform/module-generation/skills/terraform-stacks/references/api-monitoring.md +543 -0
- package/skills_ref/terraform/module-generation/skills/terraform-stacks/references/component-blocks.md +476 -0
- package/skills_ref/terraform/module-generation/skills/terraform-stacks/references/deployment-blocks.md +391 -0
- package/skills_ref/terraform/module-generation/skills/terraform-stacks/references/examples.md +1529 -0
- package/skills_ref/terraform/module-generation/skills/terraform-stacks/references/linked-stacks.md +187 -0
- package/skills_ref/terraform/module-generation/skills/terraform-stacks/references/troubleshooting.md +671 -0
- package/skills_ref/terraform/provider-development/.claude-plugin/plugin.json +13 -0
- package/skills_ref/terraform/provider-development/skills/new-terraform-provider/SKILL.md +25 -0
- package/skills_ref/terraform/provider-development/skills/new-terraform-provider/assets/main.go +40 -0
- package/skills_ref/terraform/provider-development/skills/provider-actions/SKILL.md +478 -0
- package/skills_ref/terraform/provider-development/skills/provider-resources/SKILL.md +599 -0
- package/skills_ref/terraform/provider-development/skills/run-acceptance-tests/SKILL.md +41 -0
- package/skills_ref/theme-factory/LICENSE.txt +202 -0
- package/skills_ref/theme-factory/SKILL.md +59 -0
- package/skills_ref/theme-factory/theme-showcase.pdf +0 -0
- package/skills_ref/theme-factory/themes/arctic-frost.md +19 -0
- package/skills_ref/theme-factory/themes/botanical-garden.md +19 -0
- package/skills_ref/theme-factory/themes/desert-rose.md +19 -0
- package/skills_ref/theme-factory/themes/forest-canopy.md +19 -0
- package/skills_ref/theme-factory/themes/golden-hour.md +19 -0
- package/skills_ref/theme-factory/themes/midnight-galaxy.md +19 -0
- package/skills_ref/theme-factory/themes/modern-minimalist.md +19 -0
- package/skills_ref/theme-factory/themes/ocean-depths.md +19 -0
- package/skills_ref/theme-factory/themes/sunset-boulevard.md +19 -0
- package/skills_ref/theme-factory/themes/tech-innovation.md +19 -0
- package/skills_ref/things-mac/SKILL.md +86 -0
- package/skills_ref/tmux/SKILL.md +153 -0
- package/skills_ref/transcribe/SKILL.md +81 -0
- package/skills_ref/trello/SKILL.md +95 -0
- package/skills_ref/tts/SKILL.md +99 -0
- package/skills_ref/vercel-deploy/SKILL.md +115 -0
- package/skills_ref/video-downloader/SKILL.md +99 -0
- package/skills_ref/video-downloader/scripts/download_video.py +145 -0
- package/skills_ref/video-frames/SKILL.md +46 -0
- package/skills_ref/vision-click/SKILL.md +128 -0
- package/skills_ref/weather/SKILL.md +112 -0
- package/skills_ref/web-artifacts-builder/LICENSE.txt +202 -0
- package/skills_ref/web-artifacts-builder/SKILL.md +74 -0
- package/skills_ref/web-artifacts-builder/scripts/bundle-artifact.sh +54 -0
- package/skills_ref/web-artifacts-builder/scripts/init-artifact.sh +322 -0
- package/skills_ref/web-artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
- package/skills_ref/web-perf/SKILL.md +193 -0
- package/skills_ref/web-routing/SKILL.md +26 -0
- package/skills_ref/whatsapp/SKILL.md +255 -0
- package/skills_ref/whatsapp/assets/agent-app-integration-example.json +35 -0
- package/skills_ref/whatsapp/assets/databases-example.json +11 -0
- package/skills_ref/whatsapp/assets/function-decide-route-interactive-buttons.json +6 -0
- package/skills_ref/whatsapp/assets/functions-example.json +5 -0
- package/skills_ref/whatsapp/assets/workflow-agent-simple.json +31 -0
- package/skills_ref/whatsapp/assets/workflow-api-template-wait-agent.json +59 -0
- package/skills_ref/whatsapp/assets/workflow-customer-support-intake-agent.json +56 -0
- package/skills_ref/whatsapp/assets/workflow-decision.json +83 -0
- package/skills_ref/whatsapp/assets/workflow-interactive-buttons-decide-ai.json +89 -0
- package/skills_ref/whatsapp/assets/workflow-interactive-buttons-decide-function.json +88 -0
- package/skills_ref/whatsapp/assets/workflow-linear.json +53 -0
- package/skills_ref/whatsapp/package.json +10 -0
- package/skills_ref/whatsapp/references/app-integrations.md +89 -0
- package/skills_ref/whatsapp/references/databases-reference.md +21 -0
- package/skills_ref/whatsapp/references/execution-context.md +42 -0
- package/skills_ref/whatsapp/references/function-contracts.md +55 -0
- package/skills_ref/whatsapp/references/functions-payloads.md +87 -0
- package/skills_ref/whatsapp/references/functions-reference.md +133 -0
- package/skills_ref/whatsapp/references/graph-contract.md +145 -0
- package/skills_ref/whatsapp/references/node-types.md +430 -0
- package/skills_ref/whatsapp/references/triggers.md +20 -0
- package/skills_ref/whatsapp/references/workflow-overview.md +22 -0
- package/skills_ref/whatsapp/references/workflow-reference.md +123 -0
- package/skills_ref/whatsapp/scripts/configure-prop.js +113 -0
- package/skills_ref/whatsapp/scripts/create-connect-token.js +38 -0
- package/skills_ref/whatsapp/scripts/create-function.js +64 -0
- package/skills_ref/whatsapp/scripts/create-integration.js +137 -0
- package/skills_ref/whatsapp/scripts/create-row.js +47 -0
- package/skills_ref/whatsapp/scripts/create-trigger.js +88 -0
- package/skills_ref/whatsapp/scripts/create-workflow.js +85 -0
- package/skills_ref/whatsapp/scripts/delete-integration.js +44 -0
- package/skills_ref/whatsapp/scripts/delete-row.js +49 -0
- package/skills_ref/whatsapp/scripts/delete-trigger.js +44 -0
- package/skills_ref/whatsapp/scripts/deploy-function.js +47 -0
- package/skills_ref/whatsapp/scripts/edit-graph.js +289 -0
- package/skills_ref/whatsapp/scripts/get-action-schema.js +44 -0
- package/skills_ref/whatsapp/scripts/get-context-value.js +80 -0
- package/skills_ref/whatsapp/scripts/get-execution-event.js +55 -0
- package/skills_ref/whatsapp/scripts/get-execution.js +44 -0
- package/skills_ref/whatsapp/scripts/get-function.js +43 -0
- package/skills_ref/whatsapp/scripts/get-graph.js +85 -0
- package/skills_ref/whatsapp/scripts/get-table.js +45 -0
- package/skills_ref/whatsapp/scripts/get-workflow.js +44 -0
- package/skills_ref/whatsapp/scripts/invoke-function.js +60 -0
- package/skills_ref/whatsapp/scripts/lib/databases/args.js +87 -0
- package/skills_ref/whatsapp/scripts/lib/databases/filters.js +30 -0
- package/skills_ref/whatsapp/scripts/lib/databases/kapso-api.js +70 -0
- package/skills_ref/whatsapp/scripts/lib/functions/args.js +55 -0
- package/skills_ref/whatsapp/scripts/lib/functions/kapso-api.js +70 -0
- package/skills_ref/whatsapp/scripts/lib/workflows/args.js +53 -0
- package/skills_ref/whatsapp/scripts/lib/workflows/kapso-api.js +123 -0
- package/skills_ref/whatsapp/scripts/lib/workflows/result.js +16 -0
- package/skills_ref/whatsapp/scripts/list-accounts.js +62 -0
- package/skills_ref/whatsapp/scripts/list-apps.js +42 -0
- package/skills_ref/whatsapp/scripts/list-execution-events.js +61 -0
- package/skills_ref/whatsapp/scripts/list-executions.js +53 -0
- package/skills_ref/whatsapp/scripts/list-function-invocations.js +53 -0
- package/skills_ref/whatsapp/scripts/list-functions.js +41 -0
- package/skills_ref/whatsapp/scripts/list-integrations.js +41 -0
- package/skills_ref/whatsapp/scripts/list-provider-models.js +48 -0
- package/skills_ref/whatsapp/scripts/list-tables.js +41 -0
- package/skills_ref/whatsapp/scripts/list-triggers.js +44 -0
- package/skills_ref/whatsapp/scripts/list-whatsapp-phone-numbers.js +56 -0
- package/skills_ref/whatsapp/scripts/list-workflows.js +44 -0
- package/skills_ref/whatsapp/scripts/openapi-explore.mjs +1273 -0
- package/skills_ref/whatsapp/scripts/query-rows.js +71 -0
- package/skills_ref/whatsapp/scripts/reload-props.js +110 -0
- package/skills_ref/whatsapp/scripts/resume-execution.js +75 -0
- package/skills_ref/whatsapp/scripts/search-actions.js +64 -0
- package/skills_ref/whatsapp/scripts/update-execution-status.js +51 -0
- package/skills_ref/whatsapp/scripts/update-function.js +65 -0
- package/skills_ref/whatsapp/scripts/update-graph.js +154 -0
- package/skills_ref/whatsapp/scripts/update-integration.js +82 -0
- package/skills_ref/whatsapp/scripts/update-row.js +51 -0
- package/skills_ref/whatsapp/scripts/update-trigger.js +60 -0
- package/skills_ref/whatsapp/scripts/update-workflow-settings.js +67 -0
- package/skills_ref/whatsapp/scripts/upsert-row.js +64 -0
- package/skills_ref/whatsapp/scripts/validate-graph.js +293 -0
- package/skills_ref/whatsapp/scripts/variables-delete.js +37 -0
- package/skills_ref/whatsapp/scripts/variables-list.js +55 -0
- package/skills_ref/whatsapp/scripts/variables-set.js +39 -0
- package/skills_ref/writing-plans/SKILL.md +116 -0
- package/skills_ref/xlsx/LICENSE.txt +30 -0
- package/skills_ref/xlsx/SKILL.md +292 -0
- package/skills_ref/xlsx/scripts/office/helpers/__init__.py +0 -0
- package/skills_ref/xlsx/scripts/office/helpers/merge_runs.py +199 -0
- package/skills_ref/xlsx/scripts/office/helpers/simplify_redlines.py +197 -0
- package/skills_ref/xlsx/scripts/office/pack.py +159 -0
- package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/skills_ref/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/skills_ref/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/skills_ref/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/skills_ref/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/skills_ref/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/skills_ref/xlsx/scripts/office/schemas/mce/mc.xsd +75 -0
- package/skills_ref/xlsx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
- package/skills_ref/xlsx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
- package/skills_ref/xlsx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
- package/skills_ref/xlsx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/skills_ref/xlsx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/skills_ref/xlsx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/skills_ref/xlsx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/skills_ref/xlsx/scripts/office/soffice.py +183 -0
- package/skills_ref/xlsx/scripts/office/unpack.py +132 -0
- package/skills_ref/xlsx/scripts/office/validate.py +111 -0
- package/skills_ref/xlsx/scripts/office/validators/__init__.py +15 -0
- package/skills_ref/xlsx/scripts/office/validators/base.py +847 -0
- package/skills_ref/xlsx/scripts/office/validators/docx.py +446 -0
- package/skills_ref/xlsx/scripts/office/validators/pptx.py +275 -0
- package/skills_ref/xlsx/scripts/office/validators/redlining.py +247 -0
- package/skills_ref/xlsx/scripts/recalc.py +184 -0
- package/skills_ref/xurl/SKILL.md +461 -0
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
# Property-Driven Development
|
|
2
|
+
|
|
3
|
+
Design features by defining properties upfront as executable specifications, before implementation.
|
|
4
|
+
|
|
5
|
+
## When to Use
|
|
6
|
+
|
|
7
|
+
- Designing a new feature from scratch
|
|
8
|
+
- Building something with clear algebraic properties (serialization, validation, transformations)
|
|
9
|
+
- Complex domain where edge cases are likely
|
|
10
|
+
- User wants to think through requirements rigorously before coding
|
|
11
|
+
|
|
12
|
+
## Process
|
|
13
|
+
|
|
14
|
+
### Phase 1: Understand the Feature
|
|
15
|
+
|
|
16
|
+
Gather information:
|
|
17
|
+
- **Purpose**: What problem does this solve?
|
|
18
|
+
- **Inputs**: What data does it accept? What makes inputs valid?
|
|
19
|
+
- **Outputs**: What does it produce? What guarantees?
|
|
20
|
+
- **Constraints**: What must always be true?
|
|
21
|
+
- **Edge cases**: Boundary conditions?
|
|
22
|
+
- **Relationships**: Inverse operations? Compositions?
|
|
23
|
+
|
|
24
|
+
### Phase 2: Identify Candidate Properties
|
|
25
|
+
|
|
26
|
+
Work through these discovery questions:
|
|
27
|
+
|
|
28
|
+
| Question | Property Type | Example |
|
|
29
|
+
|----------|---------------|---------|
|
|
30
|
+
| Does it have an inverse operation? | Roundtrip | `decode(encode(x)) == x` |
|
|
31
|
+
| Is applying it twice the same as once? | Idempotence | `f(f(x)) == f(x)` |
|
|
32
|
+
| What quantities are preserved? | Invariants | Length, sum, count |
|
|
33
|
+
| Is order of arguments irrelevant? | Commutativity | `f(a, b) == f(b, a)` |
|
|
34
|
+
| Can operations be regrouped? | Associativity | `f(f(a,b), c) == f(a, f(b,c))` |
|
|
35
|
+
| Is there a neutral element? | Identity | `f(x, 0) == x` |
|
|
36
|
+
| Is there an oracle/reference impl? | Oracle | `new(x) == old(x)` |
|
|
37
|
+
| Can output be easily verified? | Hard/Easy | `is_sorted(sort(x))` |
|
|
38
|
+
|
|
39
|
+
### Phase 3: Define Input Domain
|
|
40
|
+
|
|
41
|
+
Specify valid inputs as strategies. The strategy IS the specification.
|
|
42
|
+
|
|
43
|
+
**Key principle**: Build constraints INTO the strategy, not via `assume()`.
|
|
44
|
+
|
|
45
|
+
```python
|
|
46
|
+
@st.composite
|
|
47
|
+
def valid_registration_requests(draw):
|
|
48
|
+
"""Generate valid registration requests - this documents the domain."""
|
|
49
|
+
username = draw(st.text(
|
|
50
|
+
min_size=3,
|
|
51
|
+
max_size=20,
|
|
52
|
+
alphabet=st.characters(whitelist_categories=('L', 'N'))
|
|
53
|
+
))
|
|
54
|
+
email = draw(st.emails())
|
|
55
|
+
password = draw(st.text(min_size=8, max_size=100))
|
|
56
|
+
age = draw(st.integers(min_value=13, max_value=150))
|
|
57
|
+
|
|
58
|
+
return RegistrationRequest(
|
|
59
|
+
username=username,
|
|
60
|
+
email=email,
|
|
61
|
+
password=password,
|
|
62
|
+
age=age
|
|
63
|
+
)
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### Phase 4: Write Property Tests (Before Implementation)
|
|
67
|
+
|
|
68
|
+
Create tests that will fail initially:
|
|
69
|
+
|
|
70
|
+
```python
|
|
71
|
+
class TestFeatureSpec:
|
|
72
|
+
"""Property-based specification - should FAIL until implemented."""
|
|
73
|
+
|
|
74
|
+
@given(valid_inputs())
|
|
75
|
+
def test_core_property(self, x):
|
|
76
|
+
"""[What this guarantees]."""
|
|
77
|
+
result = feature(x)
|
|
78
|
+
assert property_holds(result)
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Phase 5: Iterate on Design
|
|
82
|
+
|
|
83
|
+
Properties reveal design questions:
|
|
84
|
+
- "What about deleted users?"
|
|
85
|
+
- "Case-sensitive?"
|
|
86
|
+
- "Which algorithm?"
|
|
87
|
+
- "Stable sort or not?"
|
|
88
|
+
|
|
89
|
+
Surface these questions early, before implementation.
|
|
90
|
+
|
|
91
|
+
## Property Strength Hierarchy
|
|
92
|
+
|
|
93
|
+
Build properties incrementally from weak to strong:
|
|
94
|
+
|
|
95
|
+
### Level 1: Basic (Weak)
|
|
96
|
+
```python
|
|
97
|
+
@given(valid_inputs())
|
|
98
|
+
def test_no_crash(x):
|
|
99
|
+
process(x) # Just don't crash
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Level 2: Type Preservation
|
|
103
|
+
```python
|
|
104
|
+
@given(valid_inputs())
|
|
105
|
+
def test_returns_type(x):
|
|
106
|
+
assert isinstance(process(x), ExpectedType)
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Level 3: Invariants
|
|
110
|
+
```python
|
|
111
|
+
@given(valid_inputs())
|
|
112
|
+
def test_invariant(x):
|
|
113
|
+
result = process(x)
|
|
114
|
+
assert invariant_holds(result)
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### Level 4: Full Specification (Strong)
|
|
118
|
+
```python
|
|
119
|
+
@given(valid_inputs())
|
|
120
|
+
def test_complete(x):
|
|
121
|
+
result = process(x)
|
|
122
|
+
assert satisfies_all_requirements(result)
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
## Strategy Design Principles
|
|
126
|
+
|
|
127
|
+
### 1. Build Constraints Into Strategy
|
|
128
|
+
```python
|
|
129
|
+
# GOOD - constraints in strategy
|
|
130
|
+
@given(st.integers(min_value=1, max_value=100))
|
|
131
|
+
def test_with_valid_range(x): ...
|
|
132
|
+
|
|
133
|
+
# BAD - constraints via assume
|
|
134
|
+
@given(st.integers())
|
|
135
|
+
def test_with_assume(x):
|
|
136
|
+
assume(1 <= x <= 100) # High rejection rate
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### 2. Match Real-World Constraints
|
|
140
|
+
```python
|
|
141
|
+
valid_users = st.builds(
|
|
142
|
+
User,
|
|
143
|
+
name=st.text(min_size=1, max_size=100),
|
|
144
|
+
age=st.integers(min_value=0, max_value=150),
|
|
145
|
+
email=st.emails(),
|
|
146
|
+
)
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### 3. Include Edge Cases Explicitly
|
|
150
|
+
```python
|
|
151
|
+
@given(valid_lists())
|
|
152
|
+
@example([]) # Empty
|
|
153
|
+
@example([1]) # Single element
|
|
154
|
+
@example([1, 1, 1]) # Duplicates
|
|
155
|
+
def test_with_edges(xs): ...
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
## Common Design Questions Raised
|
|
159
|
+
|
|
160
|
+
Properties often reveal design gaps:
|
|
161
|
+
|
|
162
|
+
| Property Attempt | Question Raised |
|
|
163
|
+
|------------------|-----------------|
|
|
164
|
+
| Roundtrip for users | What about deleted/deactivated users? |
|
|
165
|
+
| Duplicate rejection | Case-sensitive? Unicode normalization? |
|
|
166
|
+
| Password storage | Which algorithm? Salted? Configurable? |
|
|
167
|
+
| Ordering guarantee | Stable sort? Tie-breaking rules? |
|
|
168
|
+
|
|
169
|
+
## Red Flags
|
|
170
|
+
|
|
171
|
+
- **Writing tautological properties**: Don't reimplement the function logic in the test
|
|
172
|
+
```python
|
|
173
|
+
# BAD - tests nothing
|
|
174
|
+
assert add(a, b) == a + b
|
|
175
|
+
|
|
176
|
+
# GOOD - tests algebraic properties
|
|
177
|
+
assert add(a, 0) == a # identity
|
|
178
|
+
assert add(a, b) == add(b, a) # commutativity
|
|
179
|
+
```
|
|
180
|
+
- **Starting too strong**: Build from weak to strong properties
|
|
181
|
+
- **Ignoring design questions**: Properties that feel awkward often reveal design gaps
|
|
182
|
+
- **Overly complex strategies**: If your input strategy is 50 lines, the domain model might need simplification
|
|
183
|
+
- **Not involving the user**: Design questions should be discussed, not assumed
|
|
184
|
+
|
|
185
|
+
## Checklist
|
|
186
|
+
|
|
187
|
+
- [ ] Properties are not tautological
|
|
188
|
+
- [ ] At least one strong property defined
|
|
189
|
+
- [ ] Input strategy documents valid inputs
|
|
190
|
+
- [ ] Design questions have been surfaced
|
|
191
|
+
- [ ] Tests will actually FAIL without implementation
|
package/skills_ref/property-based-testing/skills/property-based-testing/references/generating.md
ADDED
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
# Generating Property-Based Tests
|
|
2
|
+
|
|
3
|
+
How to create complete, runnable property-based tests.
|
|
4
|
+
|
|
5
|
+
## Process
|
|
6
|
+
|
|
7
|
+
### 1. Analyze Target Function
|
|
8
|
+
|
|
9
|
+
- Read function signature, types, and docstrings
|
|
10
|
+
- Understand input types and constraints
|
|
11
|
+
- Identify output type and expected behavior
|
|
12
|
+
- Note preconditions or invariants
|
|
13
|
+
- Check existing example-based tests as hints
|
|
14
|
+
|
|
15
|
+
### 2. Design Input Strategies
|
|
16
|
+
|
|
17
|
+
Create appropriate generator strategies for each input parameter.
|
|
18
|
+
|
|
19
|
+
**Principles**:
|
|
20
|
+
- Build constraints INTO the strategy, not via `assume()`
|
|
21
|
+
- Use realistic size limits to prevent slow tests
|
|
22
|
+
- Match real-world constraints
|
|
23
|
+
|
|
24
|
+
### 3. Identify Applicable Properties
|
|
25
|
+
|
|
26
|
+
| Property | When to Use | Test Pattern |
|
|
27
|
+
|----------|-------------|--------------|
|
|
28
|
+
| Roundtrip | encode/decode pairs | `assert decode(encode(x)) == x` |
|
|
29
|
+
| Idempotence | normalization, sorting | `assert f(f(x)) == f(x)` |
|
|
30
|
+
| Invariant | any transformation | `assert invariant(f(x))` |
|
|
31
|
+
| No exception | all functions (weak) | Function completes without raising |
|
|
32
|
+
| Type preservation | typed functions | `assert isinstance(f(x), ExpectedType)` |
|
|
33
|
+
| Length preservation | collections | `assert len(f(xs)) == len(xs)` |
|
|
34
|
+
| Element preservation | sorting, shuffling | `assert set(f(xs)) == set(xs)` |
|
|
35
|
+
| Ordering | sorting | `assert all(f(xs)[i] <= f(xs)[i+1] ...)` |
|
|
36
|
+
| Oracle | when reference exists | `assert f(x) == reference_impl(x)` |
|
|
37
|
+
| Commutativity | binary ops | `assert f(a, b) == f(b, a)` |
|
|
38
|
+
|
|
39
|
+
### 4. Generate Test Code
|
|
40
|
+
|
|
41
|
+
Create test functions with:
|
|
42
|
+
- Clear docstrings explaining what each property verifies
|
|
43
|
+
- Appropriate `@settings` for the context
|
|
44
|
+
- `@example` decorators for critical edge cases
|
|
45
|
+
|
|
46
|
+
### 5. Include Edge Cases
|
|
47
|
+
|
|
48
|
+
Always add explicit examples:
|
|
49
|
+
```python
|
|
50
|
+
@example([]) # Empty
|
|
51
|
+
@example([1]) # Single element
|
|
52
|
+
@example([1, 1, 1]) # Duplicates
|
|
53
|
+
@example("") # Empty string
|
|
54
|
+
@example(0) # Zero
|
|
55
|
+
@example(-1) # Negative
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Settings Recommendations
|
|
59
|
+
|
|
60
|
+
```python
|
|
61
|
+
# Development (fast feedback)
|
|
62
|
+
@settings(max_examples=10)
|
|
63
|
+
|
|
64
|
+
# CI (thorough)
|
|
65
|
+
@settings(max_examples=200)
|
|
66
|
+
|
|
67
|
+
# Nightly/Release (exhaustive)
|
|
68
|
+
@settings(max_examples=1000, deadline=None)
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Example Test Patterns
|
|
72
|
+
|
|
73
|
+
### Roundtrip (Encode/Decode)
|
|
74
|
+
|
|
75
|
+
```python
|
|
76
|
+
@given(valid_messages())
|
|
77
|
+
def test_roundtrip(msg):
|
|
78
|
+
"""Encoding then decoding returns original."""
|
|
79
|
+
assert decode(encode(msg)) == msg
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Idempotence
|
|
83
|
+
|
|
84
|
+
```python
|
|
85
|
+
@given(st.text())
|
|
86
|
+
def test_normalize_idempotent(s):
|
|
87
|
+
"""Normalizing twice equals normalizing once."""
|
|
88
|
+
assert normalize(normalize(s)) == normalize(s)
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Sorting Properties
|
|
92
|
+
|
|
93
|
+
```python
|
|
94
|
+
@given(st.lists(st.integers()))
|
|
95
|
+
@example([])
|
|
96
|
+
@example([1])
|
|
97
|
+
@example([1, 1, 1])
|
|
98
|
+
def test_sort(xs):
|
|
99
|
+
result = sort(xs)
|
|
100
|
+
# Length preserved
|
|
101
|
+
assert len(result) == len(xs)
|
|
102
|
+
# Elements preserved
|
|
103
|
+
assert sorted(result) == sorted(xs)
|
|
104
|
+
# Ordered
|
|
105
|
+
assert all(result[i] <= result[i+1] for i in range(len(result)-1))
|
|
106
|
+
# Idempotent
|
|
107
|
+
assert sort(result) == result
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### Validator + Normalizer
|
|
111
|
+
|
|
112
|
+
```python
|
|
113
|
+
@given(valid_inputs())
|
|
114
|
+
def test_normalized_is_valid(x):
|
|
115
|
+
"""Normalized inputs pass validation."""
|
|
116
|
+
assert is_valid(normalize(x))
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## Complete Example (Python/Hypothesis)
|
|
120
|
+
|
|
121
|
+
```python
|
|
122
|
+
"""Property-based tests for message_codec module."""
|
|
123
|
+
from hypothesis import given, strategies as st, settings, example
|
|
124
|
+
import pytest
|
|
125
|
+
|
|
126
|
+
from myapp.codec import encode_message, decode_message, Message, DecodeError
|
|
127
|
+
|
|
128
|
+
# Custom strategy for Message objects
|
|
129
|
+
messages = st.builds(
|
|
130
|
+
Message,
|
|
131
|
+
id=st.uuids(),
|
|
132
|
+
content=st.text(max_size=1000),
|
|
133
|
+
priority=st.integers(min_value=1, max_value=10),
|
|
134
|
+
tags=st.lists(st.text(max_size=50), max_size=20),
|
|
135
|
+
)
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
class TestMessageCodecProperties:
|
|
139
|
+
"""Property-based tests for message encoding/decoding."""
|
|
140
|
+
|
|
141
|
+
@given(messages)
|
|
142
|
+
def test_roundtrip(self, msg: Message):
|
|
143
|
+
"""Encoding then decoding returns the original message."""
|
|
144
|
+
encoded = encode_message(msg)
|
|
145
|
+
decoded = decode_message(encoded)
|
|
146
|
+
assert decoded == msg
|
|
147
|
+
|
|
148
|
+
@given(messages)
|
|
149
|
+
def test_encode_deterministic(self, msg: Message):
|
|
150
|
+
"""Same message always encodes to same bytes."""
|
|
151
|
+
assert encode_message(msg) == encode_message(msg)
|
|
152
|
+
|
|
153
|
+
@given(messages)
|
|
154
|
+
def test_encoded_is_bytes(self, msg: Message):
|
|
155
|
+
"""Encoding produces bytes."""
|
|
156
|
+
assert isinstance(encode_message(msg), bytes)
|
|
157
|
+
|
|
158
|
+
@given(st.binary())
|
|
159
|
+
def test_decode_invalid_raises_or_succeeds(self, data: bytes):
|
|
160
|
+
"""Random bytes either decode or raise DecodeError."""
|
|
161
|
+
try:
|
|
162
|
+
decode_message(data)
|
|
163
|
+
except DecodeError:
|
|
164
|
+
pass # Expected for invalid input
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
## Running Tests
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
# Run all property tests
|
|
171
|
+
pytest test_file.py -v
|
|
172
|
+
|
|
173
|
+
# Run with more examples (CI)
|
|
174
|
+
pytest test_file.py --hypothesis-seed=0 -v
|
|
175
|
+
|
|
176
|
+
# Run with statistics
|
|
177
|
+
pytest test_file.py --hypothesis-show-statistics
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
## Checklist Before Finishing
|
|
181
|
+
|
|
182
|
+
- [ ] Tests are not tautological (don't reimplement the function)
|
|
183
|
+
- [ ] At least one strong property (not just "no crash")
|
|
184
|
+
- [ ] Edge cases covered with `@example` decorators
|
|
185
|
+
- [ ] Strategy constraints are realistic, not over-filtered
|
|
186
|
+
- [ ] Settings appropriate for context (dev vs CI)
|
|
187
|
+
- [ ] Docstrings explain what each property verifies
|
|
188
|
+
- [ ] Tests actually run and pass (or fail for expected reasons)
|
|
189
|
+
|
|
190
|
+
## Red Flags
|
|
191
|
+
|
|
192
|
+
- **Reimplementing the function**: If your assertion contains the same logic as the function under test, you've written a tautology
|
|
193
|
+
```python
|
|
194
|
+
# BAD - this tests nothing
|
|
195
|
+
assert add(a, b) == a + b
|
|
196
|
+
```
|
|
197
|
+
- **Only testing "no crash"**: This is the weakest property - always look for stronger ones first
|
|
198
|
+
- **Overly constrained strategies**: If you're using multiple `assume()` calls, redesign the strategy instead
|
|
199
|
+
- **Missing edge cases**: No `@example` decorators for empty, single-element, or boundary values
|
|
200
|
+
- **No settings**: Missing `@settings` for CI - tests may be too slow or not thorough enough
|
|
201
|
+
|
|
202
|
+
## When Tests Fail
|
|
203
|
+
|
|
204
|
+
See [{baseDir}/references/interpreting-failures.md]({baseDir}/references/interpreting-failures.md) for how to interpret failures and determine if they represent genuine bugs vs test errors vs ambiguous specifications.
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
# Interpreting Property-Based Test Failures
|
|
2
|
+
|
|
3
|
+
How to analyze failures and determine if they represent genuine bugs.
|
|
4
|
+
|
|
5
|
+
## The Self-Reflection Problem
|
|
6
|
+
|
|
7
|
+
Property-based testing generates many failing examples. Not all failures are bugs:
|
|
8
|
+
- **Test bugs**: Property is wrong, strategy generates invalid inputs
|
|
9
|
+
- **Ambiguous specs**: Behavior undefined for edge cases
|
|
10
|
+
- **Genuine bugs**: Code violates documented guarantees
|
|
11
|
+
|
|
12
|
+
Before reporting a bug, **validate the failure** through systematic analysis.
|
|
13
|
+
|
|
14
|
+
## Failure Analysis Workflow
|
|
15
|
+
|
|
16
|
+
### 1. Reproduce with Minimal Example
|
|
17
|
+
|
|
18
|
+
Start with the shrunk failing input from the test output.
|
|
19
|
+
|
|
20
|
+
```python
|
|
21
|
+
# Hypothesis provides the minimal failing case
|
|
22
|
+
# Falsifying example: test_normalize(s='\x00')
|
|
23
|
+
|
|
24
|
+
# Create standalone reproducer
|
|
25
|
+
def test_reproduce():
|
|
26
|
+
s = '\x00'
|
|
27
|
+
result = normalize(normalize(s))
|
|
28
|
+
assert result == normalize(s) # Fails
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Verify the failure is consistent, not flaky.
|
|
32
|
+
|
|
33
|
+
### 2. Ground the Property
|
|
34
|
+
|
|
35
|
+
Before assuming a bug, verify your property against authoritative sources:
|
|
36
|
+
|
|
37
|
+
| Source | What It Tells You |
|
|
38
|
+
|--------|-------------------|
|
|
39
|
+
| **Type annotations** | Return type constraints, nullability |
|
|
40
|
+
| **Docstrings** | Explicit guarantees, preconditions |
|
|
41
|
+
| **Function name** | Semantic expectations (e.g., `sort` implies ordering) |
|
|
42
|
+
| **Error handling** | What inputs should raise vs handle |
|
|
43
|
+
| **Existing unit tests** | Implicit contracts maintainers expect |
|
|
44
|
+
| **External docs/specs** | Protocol specs, format definitions |
|
|
45
|
+
|
|
46
|
+
**Example grounding check:**
|
|
47
|
+
```python
|
|
48
|
+
def normalize(s: str) -> str:
|
|
49
|
+
"""Normalize a string to NFC form.
|
|
50
|
+
|
|
51
|
+
Args:
|
|
52
|
+
s: Input string (any unicode)
|
|
53
|
+
|
|
54
|
+
Returns:
|
|
55
|
+
NFC-normalized string
|
|
56
|
+
"""
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
The docstring says "any unicode" - so null bytes should be valid input. The property is correctly grounded.
|
|
60
|
+
|
|
61
|
+
### 3. Check Strategy Realism
|
|
62
|
+
|
|
63
|
+
Does the strategy generate inputs the function should actually handle?
|
|
64
|
+
|
|
65
|
+
**Red flags:**
|
|
66
|
+
- Generating inputs outside documented domain
|
|
67
|
+
- Missing constraints that real callers would have
|
|
68
|
+
- Overly aggressive size/complexity
|
|
69
|
+
|
|
70
|
+
**Questions to ask:**
|
|
71
|
+
- Would real code pass this input?
|
|
72
|
+
- Does the docstring exclude this case?
|
|
73
|
+
- Is this a precondition violation, not a bug?
|
|
74
|
+
|
|
75
|
+
### 4. Classify the Failure
|
|
76
|
+
|
|
77
|
+
| Symptom | Likely Cause | Action |
|
|
78
|
+
|---------|--------------|--------|
|
|
79
|
+
| Fails on edge case not mentioned in spec | Ambiguous specification | Clarify with maintainer before reporting |
|
|
80
|
+
| Fails on input that violates documented preconditions | Over-constrained strategy | Fix the strategy |
|
|
81
|
+
| Property contradicts docstring or type hints | Wrong property | Fix the property |
|
|
82
|
+
| Clear violation of documented guarantee | Genuine bug | Report with evidence |
|
|
83
|
+
| Behavior differs from similar functions | Possible inconsistency | Investigate further |
|
|
84
|
+
|
|
85
|
+
### 5. Decide Action
|
|
86
|
+
|
|
87
|
+
- **Test bug** → Fix the property or strategy, don't report
|
|
88
|
+
- **Ambiguous spec** → Open discussion issue, not bug report
|
|
89
|
+
- **Genuine bug** → Report with minimal reproducer and evidence
|
|
90
|
+
|
|
91
|
+
## Property Grounding Checklist
|
|
92
|
+
|
|
93
|
+
Before reporting a failure as a bug, verify:
|
|
94
|
+
|
|
95
|
+
- [ ] Property matches documented return type
|
|
96
|
+
- [ ] Property matches docstring guarantees
|
|
97
|
+
- [ ] Input is within documented domain (preconditions met)
|
|
98
|
+
- [ ] No `assume()` filtering out the failing case inappropriately
|
|
99
|
+
- [ ] Checked existing tests don't contradict your property
|
|
100
|
+
- [ ] Behavior contradicts docs, not just expectations
|
|
101
|
+
|
|
102
|
+
## Bug Report Template
|
|
103
|
+
|
|
104
|
+
When confident the failure is a genuine bug:
|
|
105
|
+
|
|
106
|
+
```markdown
|
|
107
|
+
## Summary
|
|
108
|
+
[One-line description of the bug]
|
|
109
|
+
|
|
110
|
+
## Minimal Reproducing Example
|
|
111
|
+
```python
|
|
112
|
+
# Shrunk by Hypothesis
|
|
113
|
+
from mylib import affected_function
|
|
114
|
+
|
|
115
|
+
def test_bug():
|
|
116
|
+
# Minimal failing input
|
|
117
|
+
result = affected_function('\x00')
|
|
118
|
+
# Expected vs actual
|
|
119
|
+
assert result >= 0 # Fails: got -1
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## Expected Behavior
|
|
123
|
+
According to [docstring/spec/docs], the function should:
|
|
124
|
+
- [Specific guarantee that was violated]
|
|
125
|
+
|
|
126
|
+
## Actual Behavior
|
|
127
|
+
- [What actually happened]
|
|
128
|
+
|
|
129
|
+
## Evidence
|
|
130
|
+
- Docstring states: "[relevant quote]"
|
|
131
|
+
- Type signature promises: `-> PositiveInt`
|
|
132
|
+
|
|
133
|
+
## Environment
|
|
134
|
+
- Library version: X.Y.Z
|
|
135
|
+
- Python version: 3.X
|
|
136
|
+
- Platform: [OS]
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
## Real-World Failure Patterns
|
|
140
|
+
|
|
141
|
+
### Numerical Instability
|
|
142
|
+
|
|
143
|
+
**Symptom**: Distribution function returns negative probability.
|
|
144
|
+
|
|
145
|
+
```python
|
|
146
|
+
@given(st.floats(min_value=0, max_value=1e308))
|
|
147
|
+
def test_probability_non_negative(x):
|
|
148
|
+
prob = compute_probability(x)
|
|
149
|
+
assert prob >= 0 # Fails for x=1e-320
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
**Grounding check**: Docstring says "returns probability in [0, 1]".
|
|
153
|
+
|
|
154
|
+
**Classification**: Genuine bug - documented guarantee violated.
|
|
155
|
+
|
|
156
|
+
### Iterator Off-by-One
|
|
157
|
+
|
|
158
|
+
**Symptom**: Iterator skips elements or yields extra.
|
|
159
|
+
|
|
160
|
+
```python
|
|
161
|
+
@given(st.lists(st.integers()))
|
|
162
|
+
def test_iterator_yields_all(xs):
|
|
163
|
+
result = list(custom_iterator(xs))
|
|
164
|
+
assert result == xs # Fails: missing last element
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
**Grounding check**: Iterator should yield all elements based on name/docs.
|
|
168
|
+
|
|
169
|
+
**Classification**: Genuine bug if documented to iterate fully.
|
|
170
|
+
|
|
171
|
+
### Hash/Equality Inconsistency
|
|
172
|
+
|
|
173
|
+
**Symptom**: Equal objects have different hashes.
|
|
174
|
+
|
|
175
|
+
```python
|
|
176
|
+
@given(valid_objects())
|
|
177
|
+
def test_hash_equality(obj):
|
|
178
|
+
obj2 = create_equal_copy(obj)
|
|
179
|
+
assert obj == obj2
|
|
180
|
+
assert hash(obj) == hash(obj2) # Fails
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
**Grounding check**: Python requires `a == b` implies `hash(a) == hash(b)`.
|
|
184
|
+
|
|
185
|
+
**Classification**: Genuine bug - violates language contract.
|
|
186
|
+
|
|
187
|
+
### Roundtrip Failure on Edge Cases
|
|
188
|
+
|
|
189
|
+
**Symptom**: Encode/decode doesn't preserve input.
|
|
190
|
+
|
|
191
|
+
```python
|
|
192
|
+
@given(st.text())
|
|
193
|
+
def test_roundtrip(s):
|
|
194
|
+
assert decode(encode(s)) == s # Fails for s='\uD800'
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
**Grounding check**: Is `'\uD800'` (lone surrogate) valid input?
|
|
198
|
+
|
|
199
|
+
**Classification**:
|
|
200
|
+
- If docs say "valid UTF-8 only" → Strategy bug, fix filter
|
|
201
|
+
- If docs say "any string" → Genuine bug, report it
|
|
202
|
+
|
|
203
|
+
### Format String Errors
|
|
204
|
+
|
|
205
|
+
**Symptom**: String formatting crashes on certain inputs.
|
|
206
|
+
|
|
207
|
+
```python
|
|
208
|
+
@given(st.text())
|
|
209
|
+
def test_format_safe(template):
|
|
210
|
+
format_message(template) # Raises on '{unclosed'
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
**Grounding check**: Does function claim to handle arbitrary strings?
|
|
214
|
+
|
|
215
|
+
**Classification**:
|
|
216
|
+
- If user-facing, should handle gracefully → Genuine bug
|
|
217
|
+
- If internal API with preconditions → Check preconditions met
|
|
218
|
+
|
|
219
|
+
## When NOT to Report
|
|
220
|
+
|
|
221
|
+
Do not report as bugs:
|
|
222
|
+
|
|
223
|
+
1. **Precondition violations**: If docs say "positive integers only" and you passed -1
|
|
224
|
+
2. **Undefined behavior**: Spec explicitly says behavior is undefined
|
|
225
|
+
3. **Implementation details**: Relying on undocumented internal behavior
|
|
226
|
+
4. **Platform-specific**: Bug only on unusual platform/version
|
|
227
|
+
5. **Test artifact**: Failure disappears with realistic constraints
|
|
228
|
+
|
|
229
|
+
## Confidence Threshold
|
|
230
|
+
|
|
231
|
+
Report only when you can answer YES to all:
|
|
232
|
+
|
|
233
|
+
1. Did you reproduce with a minimal example?
|
|
234
|
+
2. Did you verify the property against docs/types/docstrings?
|
|
235
|
+
3. Can you point to a specific documented guarantee that's violated?
|
|
236
|
+
4. Is the failing input within the documented domain?
|
|
237
|
+
5. Have you ruled out test bugs and ambiguous specs?
|
|
238
|
+
|
|
239
|
+
If uncertain on any point, open a discussion first, not a bug report.
|