@bendyline/gilde 0.1.39 → 0.1.41
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/authoring/chat-models/muse-glimmer-30b-q4.json +3 -3
- package/authoring/chat-models/ornith-9b-q4.json +1 -1
- package/authoring/chat-models/ornith1.5-9b-q4.json +149 -0
- package/authoring/chat-models/qwen3.8-27b-iq1-s.json +190 -0
- package/authoring/chat-models/qwen3.8-27b-q2.json +189 -0
- package/authoring/gstack/overlays/investigate.json +1 -0
- package/authoring/gstack/overlays/qa-only.json +1 -0
- package/authoring/gstack/wave.json +12 -2
- package/authoring/tactical/books/accessibility-retrofit.json +188 -0
- package/authoring/tactical/books/apply-review-findings.json +189 -0
- package/authoring/tactical/books/bug-fix-tdd.json +237 -0
- package/authoring/tactical/books/ci-pipeline.json +168 -0
- package/authoring/tactical/books/codemod-sweep.json +182 -0
- package/authoring/tactical/books/dependency-upgrade.json +196 -0
- package/authoring/tactical/books/flaky-test-fix.json +238 -0
- package/authoring/tactical/books/hotfix-flow.json +187 -0
- package/authoring/tactical/books/perf-optimization.json +219 -0
- package/authoring/tactical/books/refactor-module.json +217 -0
- package/authoring/tactical/books/schema-migration.json +192 -0
- package/authoring/tactical/books/test-suite-backfill.json +172 -0
- package/authoring/tactical/books/type-safety-pass.json +185 -0
- package/authoring/tactical/books/ux-update.json +178 -0
- package/authoring/tactical/evals/accessibility-retrofit.json +230 -0
- package/authoring/tactical/evals/apply-review-findings.json +290 -0
- package/authoring/tactical/evals/bug-fix-tdd.json +221 -0
- package/authoring/tactical/evals/ci-pipeline.json +227 -0
- package/authoring/tactical/evals/codemod-sweep.json +252 -0
- package/authoring/tactical/evals/dependency-upgrade.json +235 -0
- package/authoring/tactical/evals/flaky-test-fix.json +239 -0
- package/authoring/tactical/evals/hotfix-flow.json +220 -0
- package/authoring/tactical/evals/perf-optimization.json +235 -0
- package/authoring/tactical/evals/refactor-module.json +241 -0
- package/authoring/tactical/evals/schema-migration.json +225 -0
- package/authoring/tactical/evals/test-suite-backfill.json +197 -0
- package/authoring/tactical/evals/type-safety-pass.json +221 -0
- package/authoring/tactical/evals/ux-update.json +206 -0
- package/authoring/tactical/wave.json +89 -0
- package/data/chat-models/de/deepseek-r1-8b-q4/manifest.json +56 -1
- package/data/chat-models/gl/glm-5.2-754b-q2/manifest.json +56 -0
- package/data/chat-models/gp/gpt-oss-120b-q4/manifest.json +73 -1
- package/data/chat-models/gp/gpt-oss-20b-q4/manifest.json +77 -1
- package/data/chat-models/index.json +1 -1
- package/data/chat-models/ll/llama3.2-3b-q4/manifest.json +3 -1
- package/data/chat-models/mi/mistral-7b-q4/manifest.json +54 -3
- package/data/chat-models/mi/mistral-medium-3.5-128b-q4/manifest.json +76 -1
- package/data/chat-models/mu/muse-glimmer-30b-q4/manifest.json +4 -3
- package/data/chat-models/mu/muse-glimmer-30b-q4/versions/1.0.2/manifest.json +20 -0
- package/data/chat-models/or/ornith-9b-q4/manifest.json +1 -1
- package/data/chat-models/or/ornith1.5-9b-q4/manifest.json +187 -0
- package/data/chat-models/or/ornith1.5-9b-q4/versions/1.0.0/manifest.json +53 -0
- package/data/chat-models/qw/qwen3.8-27b-iq1-s/manifest.json +195 -0
- package/data/chat-models/qw/qwen3.8-27b-iq1-s/versions/1.0.0/manifest.json +19 -0
- package/data/chat-models/qw/qwen3.8-27b-q2/manifest.json +194 -0
- package/data/chat-models/qw/qwen3.8-27b-q2/versions/1.0.0/manifest.json +19 -0
- package/data/craftbook-templates/a1/a11y-audit/manifest.json +1 -0
- package/data/craftbook-templates/ab/ab-test-readout/manifest.json +1 -0
- package/data/craftbook-templates/ac/accessibility-retrofit/manifest.json +6 -4
- package/data/craftbook-templates/ac/accessibility-retrofit/versions/2.0.0/craftbook.json +451 -0
- package/data/craftbook-templates/ac/accessibility-retrofit/versions/2.0.0/test.json +231 -0
- package/data/craftbook-templates/ad/ad-variations/manifest.json +1 -0
- package/data/craftbook-templates/al/album-curate/manifest.json +1 -0
- package/data/craftbook-templates/al/alert-rules/manifest.json +1 -0
- package/data/craftbook-templates/al/alt-text-pass/manifest.json +6 -1
- package/data/craftbook-templates/an/anniversary-cut/manifest.json +1 -0
- package/data/craftbook-templates/an/annotated-bibliography/manifest.json +1 -0
- package/data/craftbook-templates/an/annual-document-review/manifest.json +1 -0
- package/data/craftbook-templates/an/anomaly-scan/manifest.json +1 -0
- package/data/craftbook-templates/ap/api-contract-review/manifest.json +1 -0
- package/data/craftbook-templates/ap/apply-review-findings/art.json +12 -0
- package/data/craftbook-templates/ap/apply-review-findings/logo.webp +0 -0
- package/data/craftbook-templates/ap/apply-review-findings/manifest.json +23 -0
- package/data/craftbook-templates/ap/apply-review-findings/versions/1.0.0/craftbook.json +436 -0
- package/data/craftbook-templates/ap/apply-review-findings/versions/1.0.0/test.json +291 -0
- package/data/craftbook-templates/ar/artifact-integrity-review/manifest.json +1 -0
- package/data/craftbook-templates/au/audio-ad-spot/manifest.json +1 -0
- package/data/craftbook-templates/au/audio-highlight-reel/manifest.json +1 -0
- package/data/craftbook-templates/au/audiobook-master-pack/manifest.json +1 -0
- package/data/craftbook-templates/au/auth-flow/manifest.json +1 -0
- package/data/craftbook-templates/au/automation-recipe/manifest.json +1 -0
- package/data/craftbook-templates/ba/backup-routine/manifest.json +1 -0
- package/data/craftbook-templates/bl/blog-post/manifest.json +1 -0
- package/data/craftbook-templates/bo/board-deck/manifest.json +1 -0
- package/data/craftbook-templates/bo/board-game-web/manifest.json +1 -0
- package/data/craftbook-templates/bo/booking-automation/manifest.json +1 -0
- package/data/craftbook-templates/br/branding-website/manifest.json +1 -0
- package/data/craftbook-templates/br/broadcast-announcement/manifest.json +1 -0
- package/data/craftbook-templates/br/browser-qa-audit/manifest.json +6 -1
- package/data/craftbook-templates/br/browser-qa-audit/versions/2.0.5/craftbook.json +438 -0
- package/data/craftbook-templates/br/browser-qa-audit/versions/2.0.5/test.json +379 -0
- package/data/craftbook-templates/bu/bug-fix-tdd/manifest.json +4 -3
- package/data/craftbook-templates/bu/bug-fix-tdd/versions/2.0.0/craftbook.json +545 -0
- package/data/craftbook-templates/bu/bug-fix-tdd/versions/2.0.0/test.json +222 -0
- package/data/craftbook-templates/bu/build-loop/manifest.json +1 -0
- package/data/craftbook-templates/ca/calendar-brief/manifest.json +1 -0
- package/data/craftbook-templates/ca/canvas-generative-art/manifest.json +1 -0
- package/data/craftbook-templates/ca/careful-mode/manifest.json +1 -0
- package/data/craftbook-templates/ca/case-study/manifest.json +1 -0
- package/data/craftbook-templates/ca/case-study-writeup/manifest.json +1 -0
- package/data/craftbook-templates/ch/changelog-cut/manifest.json +6 -1
- package/data/craftbook-templates/ch/changelog-writeup/manifest.json +6 -1
- package/data/craftbook-templates/ch/chapter-narration-run/manifest.json +1 -0
- package/data/craftbook-templates/ch/chapter-weave/manifest.json +1 -0
- package/data/craftbook-templates/ch/character-sheet/manifest.json +1 -0
- package/data/craftbook-templates/ch/character-turnaround/manifest.json +1 -0
- package/data/craftbook-templates/ch/chart-pack/manifest.json +1 -0
- package/data/craftbook-templates/ch/chrome-extension/manifest.json +1 -0
- package/data/craftbook-templates/ci/ci-pipeline/manifest.json +6 -3
- package/data/craftbook-templates/ci/ci-pipeline/versions/2.0.0/craftbook.json +423 -0
- package/data/craftbook-templates/ci/ci-pipeline/versions/2.0.0/test.json +228 -0
- package/data/craftbook-templates/ci/citation-audit/manifest.json +1 -0
- package/data/craftbook-templates/cl/cli-tool/manifest.json +1 -0
- package/data/craftbook-templates/co/code-review/manifest.json +1 -0
- package/data/craftbook-templates/co/codebase-refactoring-review/manifest.json +1 -0
- package/data/craftbook-templates/co/codebase-ux-review/manifest.json +1 -0
- package/data/craftbook-templates/co/codemod-sweep/art.json +12 -0
- package/data/craftbook-templates/co/codemod-sweep/logo.webp +0 -0
- package/data/craftbook-templates/co/codemod-sweep/manifest.json +23 -0
- package/data/craftbook-templates/co/codemod-sweep/versions/1.0.0/craftbook.json +441 -0
- package/data/craftbook-templates/co/codemod-sweep/versions/1.0.0/test.json +253 -0
- package/data/craftbook-templates/co/cohort-analysis/manifest.json +1 -0
- package/data/craftbook-templates/co/company-research-brief/manifest.json +1 -0
- package/data/craftbook-templates/co/comparison-matrix/manifest.json +1 -0
- package/data/craftbook-templates/co/compat-check/manifest.json +1 -0
- package/data/craftbook-templates/co/competitive-analysis/manifest.json +1 -0
- package/data/craftbook-templates/co/comprehensive-codebase-review/art.json +12 -0
- package/data/craftbook-templates/co/comprehensive-codebase-review/logo.webp +0 -0
- package/data/craftbook-templates/co/comprehensive-codebase-review/manifest.json +27 -0
- package/data/craftbook-templates/co/comprehensive-codebase-review/versions/1.0.0/craftbook.json +337 -0
- package/data/craftbook-templates/co/comprehensive-codebase-review/versions/1.0.0/test.json +160 -0
- package/data/craftbook-templates/co/config-scaffold/manifest.json +1 -0
- package/data/craftbook-templates/co/content-accuracy-review/manifest.json +1 -0
- package/data/craftbook-templates/co/content-deck/manifest.json +1 -0
- package/data/craftbook-templates/co/contract-template/manifest.json +1 -0
- package/data/craftbook-templates/co/cookbook-layout/manifest.json +1 -0
- package/data/craftbook-templates/co/copy-review/manifest.json +1 -0
- package/data/craftbook-templates/co/corpus-email-digest/manifest.json +1 -0
- package/data/craftbook-templates/co/corpus-synthesis/manifest.json +1 -0
- package/data/craftbook-templates/co/cover-letter/manifest.json +1 -0
- package/data/craftbook-templates/cr/crm-update-batch/manifest.json +1 -0
- package/data/craftbook-templates/cr/cron-job/manifest.json +1 -0
- package/data/craftbook-templates/cr/crossword-forge/manifest.json +1 -0
- package/data/craftbook-templates/cs/csv-transformer/manifest.json +1 -0
- package/data/craftbook-templates/da/dashboard-spec/manifest.json +1 -0
- package/data/craftbook-templates/da/data-dictionary/manifest.json +1 -0
- package/data/craftbook-templates/da/data-export-migrate/manifest.json +1 -0
- package/data/craftbook-templates/da/data-join-merge/manifest.json +1 -0
- package/data/craftbook-templates/da/data-pipeline-etl/manifest.json +1 -0
- package/data/craftbook-templates/da/data-quality-audit/manifest.json +1 -0
- package/data/craftbook-templates/da/data-to-report/manifest.json +1 -0
- package/data/craftbook-templates/da/data-viz-page/manifest.json +1 -0
- package/data/craftbook-templates/da/dataset-clean/manifest.json +1 -0
- package/data/craftbook-templates/db/db-index-tuning/manifest.json +1 -0
- package/data/craftbook-templates/de/deep-security-review/manifest.json +1 -0
- package/data/craftbook-templates/de/dependency-audit/manifest.json +1 -0
- package/data/craftbook-templates/de/dependency-upgrade/art.json +12 -0
- package/data/craftbook-templates/de/dependency-upgrade/logo.webp +0 -0
- package/data/craftbook-templates/de/dependency-upgrade/manifest.json +23 -0
- package/data/craftbook-templates/de/dependency-upgrade/versions/1.0.0/craftbook.json +459 -0
- package/data/craftbook-templates/de/dependency-upgrade/versions/1.0.0/test.json +236 -0
- package/data/craftbook-templates/de/deploy-checklist/manifest.json +1 -0
- package/data/craftbook-templates/de/design-review/manifest.json +1 -0
- package/data/craftbook-templates/de/design-system-consultation/manifest.json +1 -0
- package/data/craftbook-templates/di/diagram-from-text/manifest.json +1 -0
- package/data/craftbook-templates/di/digest-from-feeds/manifest.json +1 -0
- package/data/craftbook-templates/do/doc-intake-pipeline/manifest.json +1 -0
- package/data/craftbook-templates/do/doc-rewrite/manifest.json +1 -0
- package/data/craftbook-templates/do/dockerize-app/manifest.json +1 -0
- package/data/craftbook-templates/do/docs-site/manifest.json +1 -0
- package/data/craftbook-templates/do/documentation-drift-review/manifest.json +1 -0
- package/data/craftbook-templates/dr/draft-social-post/manifest.json +1 -0
- package/data/craftbook-templates/dr/drive-wrap-up/manifest.json +1 -0
- package/data/craftbook-templates/du/due-diligence-brief/manifest.json +1 -0
- package/data/craftbook-templates/eb/ebook-compile/manifest.json +1 -0
- package/data/craftbook-templates/ed/edit-notes/manifest.json +1 -0
- package/data/craftbook-templates/em/email-sequence/manifest.json +1 -0
- package/data/craftbook-templates/em/email-template/manifest.json +1 -0
- package/data/craftbook-templates/en/engineering-retrospective/manifest.json +1 -0
- package/data/craftbook-templates/ep/episode-plan/manifest.json +1 -0
- package/data/craftbook-templates/es/escalation-playbook/manifest.json +1 -0
- package/data/craftbook-templates/ev/evidence-brief/manifest.json +1 -0
- package/data/craftbook-templates/ex/executive-level-review/manifest.json +1 -0
- package/data/craftbook-templates/ex/expense-categorize/manifest.json +1 -0
- package/data/craftbook-templates/fa/fact-check/manifest.json +1 -0
- package/data/craftbook-templates/fa/family-story-chapter/manifest.json +1 -0
- package/data/craftbook-templates/fa/faq-from-docs/manifest.json +1 -0
- package/data/craftbook-templates/fa/favicon-set/manifest.json +1 -0
- package/data/craftbook-templates/fe/feature-flag-release/manifest.json +6 -1
- package/data/craftbook-templates/fe/feature-flag-rollout/manifest.json +5 -1
- package/data/craftbook-templates/fe/feature-flag-rollout/versions/1.1.0/craftbook.json +203 -0
- package/data/craftbook-templates/fe/feature-flag-rollout/versions/1.1.0/test.json +165 -0
- package/data/craftbook-templates/fe/feedback-widget/manifest.json +1 -0
- package/data/craftbook-templates/fl/flaky-test-fix/art.json +12 -0
- package/data/craftbook-templates/fl/flaky-test-fix/logo.webp +0 -0
- package/data/craftbook-templates/fl/flaky-test-fix/manifest.json +24 -0
- package/data/craftbook-templates/fl/flaky-test-fix/versions/1.0.0/craftbook.json +534 -0
- package/data/craftbook-templates/fl/flaky-test-fix/versions/1.0.0/test.json +240 -0
- package/data/craftbook-templates/fo/folder-to-audio/manifest.json +1 -0
- package/data/craftbook-templates/fo/forecast-model/manifest.json +1 -0
- package/data/craftbook-templates/fo/form-fill-batch/manifest.json +1 -0
- package/data/craftbook-templates/fo/form-wizard/manifest.json +1 -0
- package/data/craftbook-templates/fr/freeze-scope/manifest.json +1 -0
- package/data/craftbook-templates/ga/game-with-screens/manifest.json +1 -0
- package/data/craftbook-templates/gl/glossary-build/manifest.json +1 -0
- package/data/craftbook-templates/gr/graphql-api/manifest.json +1 -0
- package/data/craftbook-templates/gr/grpc-service/manifest.json +1 -0
- package/data/craftbook-templates/ha/handbook-section/manifest.json +1 -0
- package/data/craftbook-templates/he/hero-image/manifest.json +1 -0
- package/data/craftbook-templates/ho/holiday-card-run/manifest.json +1 -0
- package/data/craftbook-templates/ho/hotfix-flow/manifest.json +6 -3
- package/data/craftbook-templates/ho/hotfix-flow/versions/2.0.0/craftbook.json +442 -0
- package/data/craftbook-templates/ho/hotfix-flow/versions/2.0.0/test.json +221 -0
- package/data/craftbook-templates/ht/html-arcade-game/manifest.json +1 -0
- package/data/craftbook-templates/ht/html-puzzle-game/manifest.json +1 -0
- package/data/craftbook-templates/ic/icon-pack/manifest.json +1 -0
- package/data/craftbook-templates/id/idea-office-hours/manifest.json +1 -0
- package/data/craftbook-templates/id/idle-clicker-game/manifest.json +1 -0
- package/data/craftbook-templates/im/image-batch-edit/manifest.json +1 -0
- package/data/craftbook-templates/im/image-dedup-cluster/manifest.json +1 -0
- package/data/craftbook-templates/im/image-palette-extract/manifest.json +1 -0
- package/data/craftbook-templates/im/image-seo-rename/manifest.json +1 -0
- package/data/craftbook-templates/im/image-set-index/manifest.json +1 -0
- package/data/craftbook-templates/in/inbox-triage/manifest.json +1 -0
- package/data/craftbook-templates/in/incident-comms-templates/manifest.json +1 -0
- package/data/craftbook-templates/in/incident-postmortem/manifest.json +1 -0
- package/data/craftbook-templates/in/insurance-inventory/manifest.json +1 -0
- package/data/craftbook-templates/in/interactive-quiz/manifest.json +1 -0
- package/data/craftbook-templates/in/investigate/manifest.json +5 -1
- package/data/craftbook-templates/in/investigate-root-cause/manifest.json +6 -1
- package/data/craftbook-templates/in/invitation-design/manifest.json +1 -0
- package/data/craftbook-templates/in/invoice-generator/manifest.json +1 -0
- package/data/craftbook-templates/in/invoice-run/manifest.json +1 -0
- package/data/craftbook-templates/index.json +1 -1
- package/data/craftbook-templates/it/item-intake/manifest.json +1 -0
- package/data/craftbook-templates/ju/juice-pass/manifest.json +1 -0
- package/data/craftbook-templates/kn/knowledge-base-article/manifest.json +1 -0
- package/data/craftbook-templates/kp/kpi-scorecard/manifest.json +1 -0
- package/data/craftbook-templates/la/landing-copy/manifest.json +1 -0
- package/data/craftbook-templates/la/landing-page/manifest.json +1 -0
- package/data/craftbook-templates/le/lead-enrichment/manifest.json +1 -0
- package/data/craftbook-templates/li/library-package/manifest.json +1 -0
- package/data/craftbook-templates/li/literature-review/manifest.json +1 -0
- package/data/craftbook-templates/li/live-browser-qa/manifest.json +6 -1
- package/data/craftbook-templates/lo/localize-content/manifest.json +1 -0
- package/data/craftbook-templates/lo/logo-set/manifest.json +1 -0
- package/data/craftbook-templates/ma/market-scan/manifest.json +1 -0
- package/data/craftbook-templates/me/meeting-minutes/manifest.json +1 -0
- package/data/craftbook-templates/me/meeting-notes-to-actions/manifest.json +1 -0
- package/data/craftbook-templates/me/meeting-prep-brief/manifest.json +1 -0
- package/data/craftbook-templates/me/meeting-summary-audio/manifest.json +1 -0
- package/data/craftbook-templates/me/memory-prompt-session/manifest.json +1 -0
- package/data/craftbook-templates/me/message-queue-consumer/manifest.json +1 -0
- package/data/craftbook-templates/mi/micro-game-jam/manifest.json +1 -0
- package/data/craftbook-templates/mo/mock-interview/manifest.json +1 -0
- package/data/craftbook-templates/mo/mod-scaffold/manifest.json +1 -0
- package/data/craftbook-templates/mo/monitor-and-alert/manifest.json +1 -0
- package/data/craftbook-templates/mo/month-close/manifest.json +1 -0
- package/data/craftbook-templates/mo/monthly-recording-review/manifest.json +1 -0
- package/data/craftbook-templates/mo/moodboard/manifest.json +1 -0
- package/data/craftbook-templates/mo/morning-brief/manifest.json +1 -0
- package/data/craftbook-templates/mo/morning-report/manifest.json +1 -0
- package/data/craftbook-templates/mu/music-metadata-tag/manifest.json +1 -0
- package/data/craftbook-templates/na/narrated-slideshow/manifest.json +1 -0
- package/data/craftbook-templates/ne/newsletter-issue/manifest.json +1 -0
- package/data/craftbook-templates/ni/nightly-fix-sweep/art.json +12 -0
- package/data/craftbook-templates/ni/nightly-fix-sweep/logo.webp +0 -0
- package/data/craftbook-templates/ni/nightly-fix-sweep/manifest.json +23 -0
- package/data/craftbook-templates/ni/nightly-fix-sweep/versions/1.0.0/craftbook.json +145 -0
- package/data/craftbook-templates/ni/nightly-fix-sweep/versions/1.0.0/test.json +121 -0
- package/data/craftbook-templates/no/notification-router/manifest.json +1 -0
- package/data/craftbook-templates/oc/ocr-extract/manifest.json +1 -0
- package/data/craftbook-templates/of/offer-compare/manifest.json +1 -0
- package/data/craftbook-templates/of/office-hours/manifest.json +1 -0
- package/data/craftbook-templates/on/onboarding-checklist/manifest.json +1 -0
- package/data/craftbook-templates/on/onboarding-flow/manifest.json +1 -0
- package/data/craftbook-templates/on/oncall-handoff/manifest.json +1 -0
- package/data/craftbook-templates/on/one-pager/manifest.json +1 -0
- package/data/craftbook-templates/op/ops-runbook/manifest.json +1 -0
- package/data/craftbook-templates/pa/page-spread/manifest.json +1 -0
- package/data/craftbook-templates/pa/parser-grammar/manifest.json +1 -0
- package/data/craftbook-templates/pe/perf-audit/manifest.json +1 -0
- package/data/craftbook-templates/pe/perf-audit/versions/1.1.0/craftbook.json +195 -0
- package/data/craftbook-templates/pe/perf-audit/versions/1.1.0/test.json +165 -0
- package/data/craftbook-templates/pe/perf-optimization/manifest.json +4 -3
- package/data/craftbook-templates/pe/perf-optimization/versions/2.0.0/craftbook.json +511 -0
- package/data/craftbook-templates/pe/perf-optimization/versions/2.0.0/test.json +236 -0
- package/data/craftbook-templates/pe/pest-diagnosis/manifest.json +1 -0
- package/data/craftbook-templates/ph/photo-cull/manifest.json +1 -0
- package/data/craftbook-templates/ph/physics-toy/manifest.json +1 -0
- package/data/craftbook-templates/pi/pitch-deck/manifest.json +1 -0
- package/data/craftbook-templates/pl/plan/manifest.json +1 -0
- package/data/craftbook-templates/pl/playtest-report/manifest.json +1 -0
- package/data/craftbook-templates/po/podcast-chaptering/manifest.json +1 -0
- package/data/craftbook-templates/po/portfolio-site/manifest.json +1 -0
- package/data/craftbook-templates/po/powerpoint-deck/manifest.json +1 -0
- package/data/craftbook-templates/pr/pr-security-review/manifest.json +1 -0
- package/data/craftbook-templates/pr/practice-exam/manifest.json +1 -0
- package/data/craftbook-templates/pr/practice-session/manifest.json +1 -0
- package/data/craftbook-templates/pr/pre-departure-countdown/manifest.json +1 -0
- package/data/craftbook-templates/pr/press-release/manifest.json +1 -0
- package/data/craftbook-templates/pr/price-tracker/manifest.json +1 -0
- package/data/craftbook-templates/pr/pricing-page/manifest.json +1 -0
- package/data/craftbook-templates/pr/product-descriptions/manifest.json +1 -0
- package/data/craftbook-templates/pr/proposal-sow/manifest.json +1 -0
- package/data/craftbook-templates/pu/pull-request-review/manifest.json +1 -0
- package/data/craftbook-templates/pu/puzzle-pack-layout/manifest.json +1 -0
- package/data/craftbook-templates/pw/pwa-offline/manifest.json +1 -0
- package/data/craftbook-templates/qa/qa/manifest.json +4 -1
- package/data/craftbook-templates/qu/quarterly-summary/manifest.json +1 -0
- package/data/craftbook-templates/re/reading-list/manifest.json +1 -0
- package/data/craftbook-templates/re/receipt-intake/manifest.json +1 -0
- package/data/craftbook-templates/re/receipt-ocr-ledger/manifest.json +1 -0
- package/data/craftbook-templates/re/reception-report/manifest.json +1 -0
- package/data/craftbook-templates/re/recipe-capture/manifest.json +1 -0
- package/data/craftbook-templates/re/record-a-relative/manifest.json +1 -0
- package/data/craftbook-templates/re/recurring-invoice-run/manifest.json +1 -0
- package/data/craftbook-templates/re/refactor-module/manifest.json +3 -2
- package/data/craftbook-templates/re/refactor-module/versions/1.0.4/craftbook.json +150 -0
- package/data/craftbook-templates/re/refactor-module/versions/1.0.4/test.json +95 -0
- package/data/craftbook-templates/re/refactor-module/versions/2.0.0/craftbook.json +509 -0
- package/data/craftbook-templates/re/refactor-module/versions/2.0.0/test.json +242 -0
- package/data/craftbook-templates/re/regex-builder/manifest.json +1 -0
- package/data/craftbook-templates/re/release-announcement/manifest.json +1 -0
- package/data/craftbook-templates/re/release-artifact-sanity-check/manifest.json +1 -0
- package/data/craftbook-templates/re/release-notes/manifest.json +6 -1
- package/data/craftbook-templates/re/release-notes/versions/1.0.3/craftbook.json +220 -0
- package/data/craftbook-templates/re/release-notes/versions/1.0.3/test.json +114 -0
- package/data/craftbook-templates/re/release-pipeline-ci/manifest.json +6 -1
- package/data/craftbook-templates/re/release-readiness-review/manifest.json +1 -0
- package/data/craftbook-templates/re/release-readiness-review/versions/1.1.0/craftbook.json +192 -0
- package/data/craftbook-templates/re/release-readiness-review/versions/1.1.0/test.json +113 -0
- package/data/craftbook-templates/re/reliability-review/manifest.json +1 -0
- package/data/craftbook-templates/re/report-pdf/manifest.json +1 -0
- package/data/craftbook-templates/re/research-report/manifest.json +1 -0
- package/data/craftbook-templates/re/research-to-document/manifest.json +1 -0
- package/data/craftbook-templates/re/rest-api/manifest.json +1 -0
- package/data/craftbook-templates/re/resume-cv/manifest.json +1 -0
- package/data/craftbook-templates/re/reviewer-loop/manifest.json +1 -0
- package/data/craftbook-templates/ro/rollback-plan/manifest.json +1 -0
- package/data/craftbook-templates/ro/root-cause-investigation/manifest.json +8 -1
- package/data/craftbook-templates/ro/root-cause-investigation/versions/2.0.5/craftbook.json +433 -0
- package/data/craftbook-templates/ro/root-cause-investigation/versions/2.0.5/test.json +157 -0
- package/data/craftbook-templates/ro/rough-cut-assembly/manifest.json +1 -0
- package/data/craftbook-templates/ru/runbook/manifest.json +1 -0
- package/data/craftbook-templates/sc/schema-migration/manifest.json +5 -4
- package/data/craftbook-templates/sc/schema-migration/versions/2.0.0/craftbook.json +459 -0
- package/data/craftbook-templates/sc/schema-migration/versions/2.0.0/test.json +226 -0
- package/data/craftbook-templates/sc/scrape-to-structured/manifest.json +1 -0
- package/data/craftbook-templates/sc/script-automation/manifest.json +1 -0
- package/data/craftbook-templates/sd/sdk-wrapper/manifest.json +1 -0
- package/data/craftbook-templates/se/seasonal-maintenance-sweep/manifest.json +1 -0
- package/data/craftbook-templates/se/security-architecture-review/manifest.json +1 -0
- package/data/craftbook-templates/se/seo-meta-pack/manifest.json +1 -0
- package/data/craftbook-templates/sh/ship/manifest.json +1 -0
- package/data/craftbook-templates/so/social-digest/manifest.json +1 -0
- package/data/craftbook-templates/so/social-thread/manifest.json +1 -0
- package/data/craftbook-templates/so/source-quality-audit/manifest.json +1 -0
- package/data/craftbook-templates/sp/spa-dashboard/manifest.json +1 -0
- package/data/craftbook-templates/sp/spec-authoring/manifest.json +1 -0
- package/data/craftbook-templates/sp/spec-doc/manifest.json +1 -0
- package/data/craftbook-templates/sp/spreadsheet-model/manifest.json +1 -0
- package/data/craftbook-templates/sp/sprite-sheet/manifest.json +1 -0
- package/data/craftbook-templates/sq/sql-analysis/manifest.json +1 -0
- package/data/craftbook-templates/st/standup-summary/manifest.json +1 -0
- package/data/craftbook-templates/st/state-machine/manifest.json +1 -0
- package/data/craftbook-templates/st/status-report/manifest.json +1 -0
- package/data/craftbook-templates/su/subscription-audit/manifest.json +1 -0
- package/data/craftbook-templates/su/subtitle-generator/manifest.json +1 -0
- package/data/craftbook-templates/su/summarize-long/manifest.json +1 -0
- package/data/craftbook-templates/su/survey-analysis/manifest.json +1 -0
- package/data/craftbook-templates/sv/svg-animation/manifest.json +1 -0
- package/data/craftbook-templates/ta/tailor-resume/manifest.json +1 -0
- package/data/craftbook-templates/te/technical-documentation/manifest.json +1 -0
- package/data/craftbook-templates/te/test-coverage-review/manifest.json +1 -0
- package/data/craftbook-templates/te/test-coverage-review/versions/1.2.0/craftbook.json +195 -0
- package/data/craftbook-templates/te/test-coverage-review/versions/1.2.0/test.json +116 -0
- package/data/craftbook-templates/te/test-suite-backfill/manifest.json +2 -2
- package/data/craftbook-templates/te/test-suite-backfill/versions/2.0.0/craftbook.json +428 -0
- package/data/craftbook-templates/te/test-suite-backfill/versions/2.0.0/test.json +198 -0
- package/data/craftbook-templates/th/thank-you-batch/manifest.json +1 -0
- package/data/craftbook-templates/th/thank-you-sweep/manifest.json +1 -0
- package/data/craftbook-templates/th/threat-model/manifest.json +1 -0
- package/data/craftbook-templates/th/thumbnail-generator/manifest.json +1 -0
- package/data/craftbook-templates/ti/tileset-batch/manifest.json +1 -0
- package/data/craftbook-templates/to/tone-rewrite/manifest.json +1 -0
- package/data/craftbook-templates/to/topic-explainer/manifest.json +1 -0
- package/data/craftbook-templates/tr/transcribe-and-shownotes/manifest.json +1 -0
- package/data/craftbook-templates/tr/transcribe-audio/manifest.json +1 -0
- package/data/craftbook-templates/tr/transcribe-index/manifest.json +1 -0
- package/data/craftbook-templates/tr/translate-content/manifest.json +1 -0
- package/data/craftbook-templates/ty/type-safety-pass/manifest.json +4 -3
- package/data/craftbook-templates/ty/type-safety-pass/versions/2.0.0/craftbook.json +428 -0
- package/data/craftbook-templates/ty/type-safety-pass/versions/2.0.0/test.json +222 -0
- package/data/craftbook-templates/ux/ux-update/art.json +12 -0
- package/data/craftbook-templates/ux/ux-update/logo.webp +0 -0
- package/data/craftbook-templates/ux/ux-update/manifest.json +22 -0
- package/data/craftbook-templates/ux/ux-update/versions/1.0.0/craftbook.json +439 -0
- package/data/craftbook-templates/ux/ux-update/versions/1.0.0/test.json +207 -0
- package/data/craftbook-templates/ve/version-bump/manifest.json +1 -0
- package/data/craftbook-templates/ve/version-bump/versions/1.1.0/craftbook.json +206 -0
- package/data/craftbook-templates/ve/version-bump/versions/1.1.0/test.json +95 -0
- package/data/craftbook-templates/vi/video-storyboard/manifest.json +1 -0
- package/data/craftbook-templates/vi/visit-prep/manifest.json +1 -0
- package/data/craftbook-templates/vo/voiceover-script/manifest.json +1 -0
- package/data/craftbook-templates/we/weak-spot-drill/manifest.json +1 -0
- package/data/craftbook-templates/we/web-app-crud/manifest.json +1 -0
- package/data/craftbook-templates/we/web-component/manifest.json +1 -0
- package/data/craftbook-templates/we/webhook-handler/manifest.json +1 -0
- package/data/craftbook-templates/we/week-plan/manifest.json +1 -0
- package/data/craftbook-templates/we/weekly-menu-plan/manifest.json +1 -0
- package/data/craftbook-templates/we/weekly-pipeline-review/manifest.json +1 -0
- package/data/craftbook-templates/we/weekly-review/manifest.json +1 -0
- package/data/craftbook-templates/we/weekly-walkthrough/manifest.json +1 -0
- package/data/craftbook-templates/wh/whitepaper/manifest.json +1 -0
- package/data/craftbook-templates/ye/year-in-review/manifest.json +1 -0
- package/data/craftbook-templates/yo/youtube-chapters-seo/manifest.json +1 -0
- package/data/gezel-templates/bo/boekwachter/versions/1.1.0/about.md +29 -0
- package/data/gezel-templates/bo/boekwachter/versions/1.1.0/manifest.json +16 -0
- package/data/gezel-templates/bu/builder/versions/1.5.0/about.md +34 -0
- package/data/gezel-templates/bu/builder/versions/1.5.0/manifest.json +16 -0
- package/data/gezel-templates/de/developer/versions/1.5.0/about.md +34 -0
- package/data/gezel-templates/de/developer/versions/1.5.0/manifest.json +21 -0
- package/data/gezel-templates/index.json +1 -1
- package/data/gezel-templates/re/reviewer/versions/1.4.0/about.md +49 -0
- package/data/gezel-templates/re/reviewer/versions/1.4.0/manifest.json +21 -0
- package/data/project-types/index.json +1 -1
- package/data/project-types/so/software-project/manifest.json +20 -0
- package/data/project-types/so/software-project/versions/1.0.0/about.md +3 -0
- package/data/project-types/so/software-project/versions/1.0.0/manifest.json +41 -0
- package/data/project-types/so/software-project/versions/1.0.0/mission.md +4 -0
- package/package.json +1 -1
- package/schemas/craftbook-doc.schema.json +248 -0
- package/schemas/craftbook-template-identity.schema.json +21 -0
- package/schemas/craftbook-template-version.schema.json +248 -0
- package/schemas/craftbook-test.schema.json +210 -0
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "refactor-module",
|
|
3
|
+
"name": "Behavior-Preserving Refactor",
|
|
4
|
+
"description": "Restructure code without changing what it does, with proof at every stage: a green suite recorded before anything moves (characterization tests pinned first when coverage is thin), small reversible stages that keep the tests green, a re-measured structure target, and an enforced independent review.",
|
|
5
|
+
"category": "code-quality",
|
|
6
|
+
"role": "maintenance-review",
|
|
7
|
+
"tags": [
|
|
8
|
+
"refactor",
|
|
9
|
+
"cleanup",
|
|
10
|
+
"code-quality",
|
|
11
|
+
"maintainability",
|
|
12
|
+
"duplication",
|
|
13
|
+
"tests"
|
|
14
|
+
],
|
|
15
|
+
"triggers": [
|
|
16
|
+
"refactor this module",
|
|
17
|
+
"clean up the code",
|
|
18
|
+
"improve code structure",
|
|
19
|
+
"behavior-preserving refactor",
|
|
20
|
+
"reduce duplication"
|
|
21
|
+
],
|
|
22
|
+
"about": "Restructure code with the discipline that makes refactoring safe, and with each claim mechanically verified. First BASELINE: run the suite and record it green before anything moves — and where the code about to be reshaped has no tests, write characterization tests FIRST, pinning CURRENT behavior bugs included, because a refactor without a behavioral pin is just hopeful editing. The baseline also records the structural measurements the refactor targets (duplicated blocks, function lengths, tangled responsibilities) with the method used to count them. Then PLAN: the target structure and a sequence of small stages, each individually reversible and each leaving the tree working. Then CHANGE: execute stage by stage at the real sites — never a prescribed scratch file — running the suite between stages so a red step is reverted or narrowed, not stacked on. Then VERIFY: re-measure with the SAME method, quote before and after side by side, and show the whole suite green. Finally an independent reviewer grades the chain against fixed criteria — behavior preserved, target genuinely moved, no stage left red — and a REVISE verdict routes the work back automatically with concrete findings. Needs a project whose tests run via `npm run test`. Works identically whether the run edits the project directly or drafts a change proposal for the user to apply.",
|
|
23
|
+
"doc": {
|
|
24
|
+
"paramSchema": {
|
|
25
|
+
"type": "object",
|
|
26
|
+
"properties": {
|
|
27
|
+
"scope": {
|
|
28
|
+
"type": "string",
|
|
29
|
+
"title": "What to refactor",
|
|
30
|
+
"description": "The module, folder, duplication, or structural problem to work on. Leave empty when the task description already carries it.",
|
|
31
|
+
"default": ""
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"capabilityFloor": "medium",
|
|
36
|
+
"diffpackCapable": true,
|
|
37
|
+
"commands": [
|
|
38
|
+
{
|
|
39
|
+
"scope": "script",
|
|
40
|
+
"name": "test",
|
|
41
|
+
"reason": "The suite is the guardrail: it must be green before any restructuring starts, stay green between stages, and be green at the end. The gates verify the green-before/green-after receipts from real runs, not the author's claims."
|
|
42
|
+
}
|
|
43
|
+
]
|
|
44
|
+
},
|
|
45
|
+
"workflow": {
|
|
46
|
+
"plan": "Record a green baseline and the guardrail (characterization tests first when coverage is thin) -> plan small reversible stages -> restructure stage by stage with the suite green throughout -> re-measure with the same method and prove behavior held -> enforced independent review.",
|
|
47
|
+
"maxGateAttempts": 4,
|
|
48
|
+
"maxReviewRounds": 3,
|
|
49
|
+
"phases": [
|
|
50
|
+
{
|
|
51
|
+
"id": "baseline",
|
|
52
|
+
"name": "Capture the baseline",
|
|
53
|
+
"description": "Record the current truth before changing anything: suite green, structural measurements, and the guardrail — with characterization tests added first where coverage is thin.",
|
|
54
|
+
"suggestedRole": "software engineer",
|
|
55
|
+
"capabilityFloor": "medium",
|
|
56
|
+
"prompt": "The refactor scope: {{scope}}\n\nCapture the current truth before changing anything — measure BEFORE, so the improvement can be proven later with the same method. Read the involved source and find how this project runs its tests (`list_package_scripts`, then read the existing test layout). Run the suite with `run_package_script` (`test`) and confirm it is GREEN before any restructuring; if it is already red, stop and report that honestly instead of refactoring on a broken base. If the command needs first-use approval, say so and wait rather than guessing.\n\nWhere the code you are about to restructure lacks tests, write characterization tests FIRST: tests that pin the CURRENT behavior — bugs and quirks included — in the project's real test layout and style. They are the guardrail. Run them and record that they pass against today's code; do not fix anything they reveal.\n\nThen record the structural measurements this refactor targets, as numbers gathered by a stated method: duplicated blocks and where each copy lives, function lengths, file sizes, tangled responsibilities — counted, not adjectived.\n\nWrite `{{workPath}}/baseline.md` with exactly these sections: `## Current behavior` (what the code does today and which tests pin it, including any characterization tests you just added), `## Measurements` (the structural numbers and the exact method used to gather them), `## Guardrail` (what must not change: public API, observable behavior, and the suite staying green). Cite the real files involved with backtick paths.",
|
|
57
|
+
"output": {
|
|
58
|
+
"path": "{{workPath}}/baseline.md",
|
|
59
|
+
"minBytes": 500,
|
|
60
|
+
"requiredPatterns": [
|
|
61
|
+
{
|
|
62
|
+
"pattern": "^##\\s+Current behavior",
|
|
63
|
+
"label": "Current behavior section"
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"pattern": "^##\\s+Measurements[\\s\\S]*\\d",
|
|
67
|
+
"label": "Measurements section with recorded numbers"
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"pattern": "^##\\s+Guardrail",
|
|
71
|
+
"label": "Guardrail section"
|
|
72
|
+
}
|
|
73
|
+
],
|
|
74
|
+
"additionalChecks": [
|
|
75
|
+
{
|
|
76
|
+
"kind": "citationsResolve",
|
|
77
|
+
"file": "{{workPath}}/baseline.md",
|
|
78
|
+
"minCitations": 2,
|
|
79
|
+
"artifact": true
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"kind": "commandEvidence",
|
|
83
|
+
"script": "test",
|
|
84
|
+
"expect": "pass",
|
|
85
|
+
"label": "green before the work starts"
|
|
86
|
+
}
|
|
87
|
+
]
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"id": "plan",
|
|
92
|
+
"name": "Plan reversible stages",
|
|
93
|
+
"description": "Design the target structure and an ordered sequence of small stages, each individually reversible and each leaving the tree working. No source edits.",
|
|
94
|
+
"suggestedRole": "software architect",
|
|
95
|
+
"capabilityFloor": "medium",
|
|
96
|
+
"prompt": "Read `{{workPath}}/baseline.md`, then design the restructure as a sequence of small stages. State the target structure concretely: what exists after the refactor that does not exist now, and what disappears. Break the work into ordered stages where EACH stage is individually reversible and leaves the tree working with the suite green — extract this function, move that block behind a seam, collapse the duplicate — never a big-bang rewrite. Name the files each stage touches. State the acceptance criteria: the measured target from the baseline moving (with the figures it should reach), the suite green after every stage, and the public API unchanged unless you explicitly declare a break here and say why. Do not edit any source in this phase.\n\nWrite `{{workPath}}/plan.md` with exactly these sections: `## Target` (the end structure), `## Stages` (numbered, each reversible, each naming its files), `## Acceptance criteria`. Cite the real files with backtick paths.",
|
|
97
|
+
"output": {
|
|
98
|
+
"path": "{{workPath}}/plan.md",
|
|
99
|
+
"minBytes": 500,
|
|
100
|
+
"requiredPatterns": [
|
|
101
|
+
{
|
|
102
|
+
"pattern": "^##\\s+Target",
|
|
103
|
+
"label": "Target section"
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"pattern": "^##\\s+Stages",
|
|
107
|
+
"label": "Stages section"
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"pattern": "^##\\s+Acceptance criteria",
|
|
111
|
+
"label": "Acceptance criteria section"
|
|
112
|
+
}
|
|
113
|
+
],
|
|
114
|
+
"additionalChecks": [
|
|
115
|
+
{
|
|
116
|
+
"kind": "citationsResolve",
|
|
117
|
+
"file": "{{workPath}}/plan.md",
|
|
118
|
+
"minCitations": 2,
|
|
119
|
+
"artifact": true
|
|
120
|
+
}
|
|
121
|
+
]
|
|
122
|
+
}
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"id": "change",
|
|
126
|
+
"name": "Restructure stage by stage",
|
|
127
|
+
"description": "Execute the planned stages at the real sites, keeping the suite green between stages.",
|
|
128
|
+
"suggestedRole": "software engineer",
|
|
129
|
+
"capabilityFloor": "medium",
|
|
130
|
+
"prompt": "Read `{{workPath}}/plan.md` and `{{workPath}}/baseline.md`, then execute the stages in order at the REAL sites — edit the actual files with `read_file` plus `write_file`/`replace_in_file`; there is no prescribed output path for source changes and never a scratch copy. After EACH stage, run the suite with `run_package_script` (`test`) and confirm it is still green before starting the next; a stage that goes red gets reverted or narrowed until green, not stacked on. Keep behavior identical: no fixes or features smuggled in under cover of the restructure — if you find a genuine bug, record it in your notes for the user instead of silently changing behavior the tests pin. Keep the characterization tests from the baseline; they ride along as permanent guards.\n\nWrite `{{workPath}}/change-notes.md` with exactly these sections: `## Stages executed` (each stage, in order, with its suite-green confirmation), `## Files touched` (backtick path per line), `## Deviations from plan` (anything done differently than plan.md and why; write `none` honestly when there are none).",
|
|
131
|
+
"output": {
|
|
132
|
+
"path": "{{workPath}}/change-notes.md",
|
|
133
|
+
"minBytes": 600,
|
|
134
|
+
"requiredPatterns": [
|
|
135
|
+
{
|
|
136
|
+
"pattern": "^##\\s+Stages executed",
|
|
137
|
+
"label": "Stages executed section"
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
"pattern": "^##\\s+Files touched",
|
|
141
|
+
"label": "Files touched section"
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"pattern": "^##\\s+Deviations from plan",
|
|
145
|
+
"label": "Deviations from plan section"
|
|
146
|
+
}
|
|
147
|
+
],
|
|
148
|
+
"additionalChecks": [
|
|
149
|
+
{
|
|
150
|
+
"kind": "citationsResolve",
|
|
151
|
+
"file": "{{workPath}}/change-notes.md",
|
|
152
|
+
"minCitations": 2,
|
|
153
|
+
"artifact": true
|
|
154
|
+
}
|
|
155
|
+
]
|
|
156
|
+
}
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
"id": "verify",
|
|
160
|
+
"name": "Re-measure and verify",
|
|
161
|
+
"description": "Re-measure with the same method as the baseline, quote both figures, and record the suite green.",
|
|
162
|
+
"suggestedRole": "software engineer",
|
|
163
|
+
"capabilityFloor": "medium",
|
|
164
|
+
"prompt": "Prove the refactor with fresh eyes. Read `{{workPath}}/baseline.md` and re-measure the SAME structural numbers with the SAME method it records — the comparison is meaningless if the method moved. Quote the before figure from the baseline and the after figure side by side. Then run the whole suite with `run_package_script` (`test`) and record the green result. Check the guardrail: exports, signatures, and observable behavior unchanged unless plan.md declared a break. Anything you could not actually re-run gets labeled unverified, never claimed.\n\nWrite `{{workPath}}/verification.md` with exactly these sections: `## Before / after` (each baseline measurement quoted next to its re-measured value, same method), `## Suite` (the full-suite result from the real run), `## Result` (behavior preserved and target moved, or what remains unverified and why).",
|
|
165
|
+
"output": {
|
|
166
|
+
"path": "{{workPath}}/verification.md",
|
|
167
|
+
"minBytes": 400,
|
|
168
|
+
"requiredPatterns": [
|
|
169
|
+
{
|
|
170
|
+
"pattern": "^##\\s+Before\\s*/\\s*after[\\s\\S]*\\d",
|
|
171
|
+
"label": "Before / after section with both figures"
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
"pattern": "^##\\s+Suite",
|
|
175
|
+
"label": "Suite section"
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
"pattern": "^##\\s+Result",
|
|
179
|
+
"label": "Result section"
|
|
180
|
+
}
|
|
181
|
+
],
|
|
182
|
+
"additionalChecks": [
|
|
183
|
+
{
|
|
184
|
+
"kind": "commandEvidence",
|
|
185
|
+
"script": "test",
|
|
186
|
+
"expect": "pass",
|
|
187
|
+
"label": "green after the restructure (verified run receipt)"
|
|
188
|
+
}
|
|
189
|
+
]
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
],
|
|
193
|
+
"review": {
|
|
194
|
+
"artifactPath": "{{workPath}}/verification.md",
|
|
195
|
+
"relatedPaths": [
|
|
196
|
+
"{{workPath}}/baseline.md",
|
|
197
|
+
"{{workPath}}/plan.md",
|
|
198
|
+
"{{workPath}}/change-notes.md"
|
|
199
|
+
],
|
|
200
|
+
"reviewPath": "{{workPath}}/review.md",
|
|
201
|
+
"reviewerRole": "refactoring reviewer",
|
|
202
|
+
"repairRole": "software engineer",
|
|
203
|
+
"minReviewBytes": 400,
|
|
204
|
+
"enforce": {
|
|
205
|
+
"fixStepId": "repair"
|
|
206
|
+
},
|
|
207
|
+
"criteria": [
|
|
208
|
+
"baseline.md records a genuinely green suite from a real run receipt before any restructuring, and pins the guardrail — with characterization tests written first (pinning current behavior, bugs included) wherever the touched area lacked coverage.",
|
|
209
|
+
"Observable behavior unchanged (or changed only as the plan declared): public API and outputs held, and the pinning tests still pass unmodified — open the touched files and the tests; do not grade from change-notes.md alone.",
|
|
210
|
+
"The measured target moved against the recorded baseline using the same method: verification.md quotes both figures side by side, and the duplication/structure improvement is visible in the real files, not just claimed.",
|
|
211
|
+
"No stage left the suite red (receipts, not claims): the recorded runs show green between stages and green at the end.",
|
|
212
|
+
"Every stage in change-notes.md matches a plan.md stage or an honestly recorded deviation, and every touched file it names exists.",
|
|
213
|
+
"The public API is unchanged unless plan.md explicitly declared a break, and no fix or feature was smuggled in under cover of the restructure."
|
|
214
|
+
]
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "schema-migration",
|
|
3
|
+
"name": "Schema / Type Migration",
|
|
4
|
+
"description": "Migrate a schema or data shape with the expand/contract discipline: reads accept both shapes while the data moves, the old shape is dropped only after every record is transformed, and real suite runs between stages prove no record was ever stranded.",
|
|
5
|
+
"category": "code-quality",
|
|
6
|
+
"role": "maintenance-review",
|
|
7
|
+
"tags": [
|
|
8
|
+
"migration",
|
|
9
|
+
"schema",
|
|
10
|
+
"types",
|
|
11
|
+
"refactor",
|
|
12
|
+
"codemod",
|
|
13
|
+
"expand-contract"
|
|
14
|
+
],
|
|
15
|
+
"triggers": [
|
|
16
|
+
"migrate a schema",
|
|
17
|
+
"change a type everywhere",
|
|
18
|
+
"multi-file migration",
|
|
19
|
+
"rename a model across the codebase",
|
|
20
|
+
"type migration"
|
|
21
|
+
],
|
|
22
|
+
"about": "Change a data model, schema, or type across a codebase while the data stays alive at every moment - expand/contract is THE method, and each claim is mechanically verified. First PLAN from the real files: read the actual schema and data files and every accessor that touches the current shape, document the current and target shapes with fields taken from those files, and lay the work out as expand (readers accept both shapes), migrate (transform the stored data), contract (drop the old shape and retire the dual-read) - with per-stage data safety and a per-stage rollback. Then MIGRATE at the real sites the plan names, running the suite between stages so every green is a recorded receipt: expand must be green before the data moves, and the data must be fully transformed before contract lands. Then VERIFY that no record was stranded - the old shape is gone exactly where contract says, every record is readable in the target shape with its values intact, and the whole suite is green. Finally an independent reviewer grades the chain against fixed criteria, and their REVISE verdict routes the work back automatically with concrete findings. Needs a project whose tests run via `npm run test`. Works identically whether the run edits the project directly or drafts a change proposal for the user to apply.",
|
|
23
|
+
"doc": {
|
|
24
|
+
"paramSchema": {
|
|
25
|
+
"type": "object",
|
|
26
|
+
"properties": {
|
|
27
|
+
"scope": {
|
|
28
|
+
"type": "string",
|
|
29
|
+
"title": "What to migrate",
|
|
30
|
+
"description": "The schema or shape change to make: the current shape, the target shape, and where the data lives. Leave empty when the task description already carries it.",
|
|
31
|
+
"default": ""
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"capabilityFloor": "medium",
|
|
36
|
+
"diffpackCapable": true,
|
|
37
|
+
"commands": [
|
|
38
|
+
{
|
|
39
|
+
"scope": "script",
|
|
40
|
+
"name": "test",
|
|
41
|
+
"reason": "every migration stage must keep reads working - receipts"
|
|
42
|
+
}
|
|
43
|
+
]
|
|
44
|
+
},
|
|
45
|
+
"workflow": {
|
|
46
|
+
"plan": "Plan expand/migrate/contract from the real schema and data files (per-stage data safety and rollback) -> execute at the real sites with the suite green between stages and reads accepting both shapes while the data moves -> verify every record readable, the old shape gone where contract says, and the suite green -> enforced independent review.",
|
|
47
|
+
"maxGateAttempts": 4,
|
|
48
|
+
"maxReviewRounds": 3,
|
|
49
|
+
"phases": [
|
|
50
|
+
{
|
|
51
|
+
"id": "plan-migration",
|
|
52
|
+
"name": "Plan the expand/contract migration",
|
|
53
|
+
"description": "Document the current and target shapes from the real files and stage the work as expand, migrate, contract - with per-stage data safety and rollback.",
|
|
54
|
+
"suggestedRole": "migration planner",
|
|
55
|
+
"capabilityFloor": "medium",
|
|
56
|
+
"prompt": "The migration: {{scope}}\n\nPlan from the REAL files before changing anything. Read the actual schema definitions and the actual data files, and find every accessor that touches the current shape with real searches over the tree - never from memory. Document the current shape and the exact target shape with field names and types taken from those files. Then lay the work out as expand/contract stages - the data must stay readable through every stage: first EXPAND (readers accept both the old and the new shape), then MIGRATE (transform the stored data to the new shape), then CONTRACT (drop the old shape and retire the dual-read). For each stage, state what keeps every existing record readable while that stage is in flight, and the concrete rollback if it goes wrong. If the current shape cannot be determined from the real files, record what is missing honestly and stop.\n\nWrite `{{workPath}}/migration-plan.md` with exactly these sections: `## Current shape` (from the real files, cited with backtick paths), `## Target shape` (exact fields and types), `## Stages` (expand, migrate, contract - what each touches, in order), `## Data safety` (why no record becomes unreadable at any stage), `## Rollback per stage`.",
|
|
57
|
+
"output": {
|
|
58
|
+
"path": "{{workPath}}/migration-plan.md",
|
|
59
|
+
"minBytes": 700,
|
|
60
|
+
"requiredPatterns": [
|
|
61
|
+
{
|
|
62
|
+
"pattern": "^##\\s+Current shape",
|
|
63
|
+
"label": "Current shape section"
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"pattern": "^##\\s+Target shape",
|
|
67
|
+
"label": "Target shape section"
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"pattern": "^##\\s+Stages",
|
|
71
|
+
"label": "Stages section"
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"pattern": "^##\\s+Data safety",
|
|
75
|
+
"label": "Data safety section"
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"pattern": "^##\\s+Rollback per stage",
|
|
79
|
+
"label": "Rollback per stage section"
|
|
80
|
+
}
|
|
81
|
+
],
|
|
82
|
+
"additionalChecks": [
|
|
83
|
+
{
|
|
84
|
+
"kind": "citationsResolve",
|
|
85
|
+
"file": "{{workPath}}/migration-plan.md",
|
|
86
|
+
"minCitations": 2,
|
|
87
|
+
"artifact": true
|
|
88
|
+
}
|
|
89
|
+
]
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"id": "migrate",
|
|
94
|
+
"name": "Execute the stages",
|
|
95
|
+
"description": "Apply expand, migrate, contract at the real sites with the suite run between stages; reads accept both shapes until the plan retires the dual-read.",
|
|
96
|
+
"suggestedRole": "software engineer",
|
|
97
|
+
"capabilityFloor": "medium",
|
|
98
|
+
"prompt": "Read `{{workPath}}/migration-plan.md` and execute its stages in order at the real sites it names - the schema definition, the accessors, and the data transform - using `read_file` plus `write_file`/`replace_in_file`. Run the suite with `run_package_script` (`test`) between stages: expand must be green before the data moves, and the data must be fully transformed before contract drops the old shape. During expand, reads accept BOTH shapes, and the plan's contract stage says exactly when that dual-read retires - do not leave it behind as permanent fallback code, and do not remove it before the data has moved. Transform the stored data with a real, repeatable step (a script you ran, or an explicit recorded edit), never by retyping records from memory. If the command needs first-use approval, say so and wait rather than guessing. If a stage cannot keep the suite green, return the tree to the last green stage and record what blocked you honestly.\n\nWrite `{{workPath}}/change-notes.md` with exactly these sections: `## Stages executed` (each stage with its suite result), `## Files touched` (backtick path per line), `## Data transformed` (which records moved, how, and how you know none were lost), `## Deviations` (where execution departed from the plan and why, or 'none').",
|
|
99
|
+
"output": {
|
|
100
|
+
"path": "{{workPath}}/change-notes.md",
|
|
101
|
+
"minBytes": 700,
|
|
102
|
+
"requiredPatterns": [
|
|
103
|
+
{
|
|
104
|
+
"pattern": "^##\\s+Stages executed",
|
|
105
|
+
"label": "Stages executed section"
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
"pattern": "^##\\s+Files touched",
|
|
109
|
+
"label": "Files touched section"
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"pattern": "^##\\s+Data transformed",
|
|
113
|
+
"label": "Data transformed section"
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"pattern": "^##\\s+Deviations",
|
|
117
|
+
"label": "Deviations section"
|
|
118
|
+
}
|
|
119
|
+
],
|
|
120
|
+
"additionalChecks": [
|
|
121
|
+
{
|
|
122
|
+
"kind": "citationsResolve",
|
|
123
|
+
"file": "{{workPath}}/change-notes.md",
|
|
124
|
+
"minCitations": 2,
|
|
125
|
+
"artifact": true
|
|
126
|
+
}
|
|
127
|
+
]
|
|
128
|
+
}
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
"id": "verify",
|
|
132
|
+
"name": "Prove no record was stranded",
|
|
133
|
+
"description": "Check every record is in the target shape with values intact, the old shape is gone where contract says, and the whole suite is green.",
|
|
134
|
+
"suggestedRole": "software engineer",
|
|
135
|
+
"capabilityFloor": "medium",
|
|
136
|
+
"prompt": "Prove the migration with fresh eyes. Open the migrated data with `read_file` and check every record is in the target shape and none was lost - count records against the pre-migration state recorded in `{{workPath}}/change-notes.md`, and spot-check that values survived exactly. Search the real code for leftover reads of the old shape: the old field access must be gone exactly where the plan's contract stage says it should be gone. Re-run the whole suite with `run_package_script` (`test`) - it must be green. Anything you could not actually run or open gets labeled unverified, never claimed.\n\nWrite `{{workPath}}/verification.md` with exactly these sections: `## Old shape check` (the search you ran for leftover old-shape reads and what it found), `## Data integrity` (record counts and the spot-checked values), `## Suite` (the full-suite result), `## Result` (migrated with no record stranded, or what remains unverified and why).",
|
|
137
|
+
"output": {
|
|
138
|
+
"path": "{{workPath}}/verification.md",
|
|
139
|
+
"minBytes": 500,
|
|
140
|
+
"requiredPatterns": [
|
|
141
|
+
{
|
|
142
|
+
"pattern": "^##\\s+Old shape check",
|
|
143
|
+
"label": "Old shape check section"
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
"pattern": "^##\\s+Data integrity",
|
|
147
|
+
"label": "Data integrity section"
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
"pattern": "^##\\s+Suite",
|
|
151
|
+
"label": "Suite section"
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
"pattern": "^##\\s+Result",
|
|
155
|
+
"label": "Result section"
|
|
156
|
+
}
|
|
157
|
+
],
|
|
158
|
+
"additionalChecks": [
|
|
159
|
+
{
|
|
160
|
+
"kind": "commandEvidence",
|
|
161
|
+
"script": "test",
|
|
162
|
+
"expect": "pass",
|
|
163
|
+
"label": "the whole suite is green after the migration (verified run receipt)"
|
|
164
|
+
}
|
|
165
|
+
]
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
],
|
|
169
|
+
"review": {
|
|
170
|
+
"artifactPath": "{{workPath}}/verification.md",
|
|
171
|
+
"relatedPaths": [
|
|
172
|
+
"{{workPath}}/migration-plan.md",
|
|
173
|
+
"{{workPath}}/change-notes.md"
|
|
174
|
+
],
|
|
175
|
+
"reviewPath": "{{workPath}}/review.md",
|
|
176
|
+
"reviewerRole": "migration reviewer",
|
|
177
|
+
"repairRole": "software engineer",
|
|
178
|
+
"minReviewBytes": 400,
|
|
179
|
+
"enforce": {
|
|
180
|
+
"fixStepId": "repair"
|
|
181
|
+
},
|
|
182
|
+
"criteria": [
|
|
183
|
+
"Every record stayed readable at every stage: the plan's expand stage genuinely accepted both shapes, and the recorded stage order never left data unreadable in between.",
|
|
184
|
+
"The contract stage landed only after the data moved: change-notes.md shows the transform completed (with a green suite) before the old shape was dropped.",
|
|
185
|
+
"Accessors changed at real sites: every path under Files touched exists and the change there matches the plan - open the touched files; do not grade from change-notes.md alone.",
|
|
186
|
+
"Data integrity is proven, not asserted: verification.md counts records against the pre-migration state and spot-checks that values survived exactly.",
|
|
187
|
+
"No old-shape read is left outside what the plan deliberately retains: the verification search is quoted and its result matches the contract stage.",
|
|
188
|
+
"Rollback per stage is genuine: each stage names a concrete restore path a person could actually follow, not a vague promise."
|
|
189
|
+
]
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "test-suite-backfill",
|
|
3
|
+
"name": "Test Suite Backfill",
|
|
4
|
+
"description": "Add tests that actually bite to untested code: rank the untested behavior by breakage cost, write tests in the project's real layout that a wrong implementation would fail, and prove the suite green with real run receipts — under an enforced independent review.",
|
|
5
|
+
"category": "code-quality",
|
|
6
|
+
"role": "maintenance-review",
|
|
7
|
+
"tags": [
|
|
8
|
+
"tests",
|
|
9
|
+
"coverage",
|
|
10
|
+
"testing",
|
|
11
|
+
"quality",
|
|
12
|
+
"regression"
|
|
13
|
+
],
|
|
14
|
+
"triggers": [
|
|
15
|
+
"add tests to this code",
|
|
16
|
+
"backfill tests",
|
|
17
|
+
"increase test coverage",
|
|
18
|
+
"write tests for an untested module",
|
|
19
|
+
"test this function"
|
|
20
|
+
],
|
|
21
|
+
"about": "Backfill a test suite that would actually catch a regression, not one that inflates a coverage number. First map the RISK: read the target modules and rank their untested behavior by breakage cost — what would hurt most if it went silently wrong — then choose concrete targets, because a suite built without that ranking pins the easy paths and misses the expensive ones. Then WRITE the tests in the project's real test layout and style, with one discipline above all others: every test must be able to FAIL. Assert actual values, actual errors, actual edge cases — never tautologies like expecting true, asserting a mock returns what it was told, or restating the implementation back at itself. The module under test does not change: if a test exposes what looks like a genuine bug, pin the current behavior or flag it honestly for the user instead of silently editing the source to match an expectation. Then VERIFY with the whole suite green — judged from real run receipts, not the author's summary — and a per-test statement of the regression each one guards. Finally an independent reviewer opens the tests themselves and grades the assertions against fixed criteria; a REVISE verdict routes the work back automatically with concrete findings. Needs a project whose tests run via `npm run test`. Suited to unattended night-shift runs. Works identically whether the run edits the project directly or drafts a change proposal for the user to apply.",
|
|
22
|
+
"doc": {
|
|
23
|
+
"capabilityFloor": "small",
|
|
24
|
+
"diffpackCapable": true,
|
|
25
|
+
"commands": [
|
|
26
|
+
{
|
|
27
|
+
"scope": "script",
|
|
28
|
+
"name": "test",
|
|
29
|
+
"reason": "The new tests must run green in the real suite — the verify gate checks real run receipts, not claims."
|
|
30
|
+
}
|
|
31
|
+
],
|
|
32
|
+
"runModes": {
|
|
33
|
+
"nightShift": "supported"
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
"workflow": {
|
|
37
|
+
"plan": "Map untested behavior by breakage cost and choose targets -> write tests in the real layout that a wrong implementation would fail -> verify the whole suite green with run receipts -> enforced independent review of the assertions.",
|
|
38
|
+
"maxGateAttempts": 4,
|
|
39
|
+
"maxReviewRounds": 3,
|
|
40
|
+
"phases": [
|
|
41
|
+
{
|
|
42
|
+
"id": "risk-map",
|
|
43
|
+
"name": "Map the risk",
|
|
44
|
+
"description": "Read the target modules and rank untested behavior by breakage cost; choose concrete targets. No test writing yet.",
|
|
45
|
+
"suggestedRole": "quality engineer",
|
|
46
|
+
"capabilityFloor": "small",
|
|
47
|
+
"prompt": "Before writing any test, learn what is worth testing. Read the target module(s) named by the task with `read_file` — the whole file, not the signatures — and read the existing test layout (`list_dir` on the test folder, then the test files) to learn where tests live and how this project writes them. Rank the UNTESTED behavior by breakage cost: what would hurt users or downstream code most if it went silently wrong — boundary semantics, error contracts, arithmetic, state transitions — not what is easiest to cover. Then choose concrete targets: the specific functions and the specific behaviors of each you will pin, including the edge and error cases. Be honest about what you are deliberately leaving untested and why.\n\nWrite `{{workPath}}/risk-map.md` with exactly these sections: `## Modules` (each target module and what it does, with backtick paths), `## Risks ranked` (the untested behaviors ordered by breakage cost, with the cost stated), `## Chosen targets` (the tests you will write, each naming the behavior it pins). Every path you cite must be real.",
|
|
48
|
+
"output": {
|
|
49
|
+
"path": "{{workPath}}/risk-map.md",
|
|
50
|
+
"minBytes": 500,
|
|
51
|
+
"requiredPatterns": [
|
|
52
|
+
{
|
|
53
|
+
"pattern": "^##\\s+Modules",
|
|
54
|
+
"label": "Modules section"
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"pattern": "^##\\s+Risks ranked",
|
|
58
|
+
"label": "Risks ranked section"
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"pattern": "^##\\s+Chosen targets",
|
|
62
|
+
"label": "Chosen targets section"
|
|
63
|
+
}
|
|
64
|
+
],
|
|
65
|
+
"additionalChecks": [
|
|
66
|
+
{
|
|
67
|
+
"kind": "citationsResolve",
|
|
68
|
+
"file": "{{workPath}}/risk-map.md",
|
|
69
|
+
"minCitations": 2,
|
|
70
|
+
"artifact": true
|
|
71
|
+
}
|
|
72
|
+
]
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"id": "write-tests",
|
|
77
|
+
"name": "Write tests that can fail",
|
|
78
|
+
"description": "Add the tests in the project's real layout and style, asserting actual behavior — never tautologies.",
|
|
79
|
+
"suggestedRole": "software engineer",
|
|
80
|
+
"capabilityFloor": "small",
|
|
81
|
+
"prompt": "Read `{{workPath}}/risk-map.md` and write the chosen tests in the project's REAL test layout and style — the same folder, naming convention, and assertion idioms the existing tests use, added with `write_file`. There is no prescribed output path for the tests themselves; they live where this project's tests live. Every test must be able to FAIL: assert actual values, actual thrown errors, actual edge-case results. Never write tautologies — expecting true, asserting a mock returns what it was told, or asserting whatever the implementation currently returns without knowing why it is right. Backfill means tests, not source changes: do not modify the module under test. If a test exposes what you believe is a genuine bug, pin the current behavior with a characterization test or flag it honestly in your notes for the user — never silently edit the source to match your expectation. Run the suite with `run_package_script` (`test`) as you go and make each test pass for the right reason; if the command needs first-use approval, say so and wait rather than guessing.\n\nThen write `{{workPath}}/test-notes.md` with exactly these sections: `## Tests added` (the real path of every new test file, backtick path per line), `## Behaviors pinned` (each test and the exact behavior it asserts), `## How each test would catch a realistic break` (for each test, the plausible wrong implementation it would fail on).",
|
|
82
|
+
"output": {
|
|
83
|
+
"path": "{{workPath}}/test-notes.md",
|
|
84
|
+
"minBytes": 600,
|
|
85
|
+
"requiredPatterns": [
|
|
86
|
+
{
|
|
87
|
+
"pattern": "^##\\s+Tests added",
|
|
88
|
+
"label": "Tests added section"
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"pattern": "^##\\s+Behaviors pinned",
|
|
92
|
+
"label": "Behaviors pinned section"
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"pattern": "^##\\s+How each test would catch a realistic break",
|
|
96
|
+
"label": "realistic-break section"
|
|
97
|
+
}
|
|
98
|
+
],
|
|
99
|
+
"additionalChecks": [
|
|
100
|
+
{
|
|
101
|
+
"kind": "citationsResolve",
|
|
102
|
+
"file": "{{workPath}}/test-notes.md",
|
|
103
|
+
"minCitations": 2,
|
|
104
|
+
"artifact": true
|
|
105
|
+
}
|
|
106
|
+
]
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"id": "verify",
|
|
111
|
+
"name": "Verify the suite green",
|
|
112
|
+
"description": "Run the whole suite and record the real result, with a per-test statement of the regression it guards.",
|
|
113
|
+
"suggestedRole": "software engineer",
|
|
114
|
+
"capabilityFloor": "small",
|
|
115
|
+
"prompt": "Prove the backfill with a full, fresh run. Execute the whole suite with `run_package_script` (`test`) — every test, old and new, must pass. If anything fails, fix the TEST (or honestly report the module bug it exposed); do not touch the module under test to force green. Then account for the coverage: for each new test, one line stating the regression it now guards — what break it would catch that yesterday's suite would have missed. Compare against `{{workPath}}/risk-map.md`: any chosen target you did not cover gets an honest deferral with the reason, never silence.\n\nWrite `{{workPath}}/verification.md` with exactly these sections: `## Suite` (the exact command and the real full-suite result), `## Coverage summary` (per-test: the regression it guards; plus honest deferrals), `## Result` (green confirmed, or what remains open and why).",
|
|
116
|
+
"output": {
|
|
117
|
+
"path": "{{workPath}}/verification.md",
|
|
118
|
+
"minBytes": 400,
|
|
119
|
+
"requiredPatterns": [
|
|
120
|
+
{
|
|
121
|
+
"pattern": "^##\\s+Suite",
|
|
122
|
+
"label": "Suite section"
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"pattern": "^##\\s+Coverage summary",
|
|
126
|
+
"label": "Coverage summary section"
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
"pattern": "^##\\s+Result",
|
|
130
|
+
"label": "Result section"
|
|
131
|
+
}
|
|
132
|
+
],
|
|
133
|
+
"additionalChecks": [
|
|
134
|
+
{
|
|
135
|
+
"kind": "citationsResolve",
|
|
136
|
+
"file": "{{workPath}}/verification.md",
|
|
137
|
+
"minCitations": 2,
|
|
138
|
+
"artifact": true
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
"kind": "commandEvidence",
|
|
142
|
+
"script": "test",
|
|
143
|
+
"expect": "pass",
|
|
144
|
+
"label": "the whole suite is green with the new tests (verified run receipt)"
|
|
145
|
+
}
|
|
146
|
+
]
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
],
|
|
150
|
+
"review": {
|
|
151
|
+
"artifactPath": "{{workPath}}/verification.md",
|
|
152
|
+
"relatedPaths": [
|
|
153
|
+
"{{workPath}}/risk-map.md",
|
|
154
|
+
"{{workPath}}/test-notes.md"
|
|
155
|
+
],
|
|
156
|
+
"reviewPath": "{{workPath}}/review.md",
|
|
157
|
+
"reviewerRole": "test reviewer",
|
|
158
|
+
"repairRole": "software engineer",
|
|
159
|
+
"minReviewBytes": 400,
|
|
160
|
+
"enforce": {
|
|
161
|
+
"fixStepId": "repair"
|
|
162
|
+
},
|
|
163
|
+
"criteria": [
|
|
164
|
+
"The new tests live in the project's real test layout and follow its existing naming and assertion style — open the test files and check.",
|
|
165
|
+
"Each test pins observable behavior a wrong implementation would fail: open the assertions — expecting true, asserting a mock returns what it was told, or restating the implementation back at itself does not pass.",
|
|
166
|
+
"The edge and error cases the risk map ranked are covered, or honestly deferred with a stated reason — reconcile risk-map.md's chosen targets against test-notes.md and verification.md.",
|
|
167
|
+
"The whole suite is green by real run receipt, judged from the recorded runs rather than the author's summary.",
|
|
168
|
+
"The module under test was not modified to make tests pass — the only changes are new or updated test files and the working notes."
|
|
169
|
+
]
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|