@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,227 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"title": "CI pipeline grounded in real scripts",
|
|
4
|
+
"objective": "The craftbook authors a CI workflow for a repo that has exactly two scripts (test and lint) and no typecheck. The oracle verifies a real workflow exists under .github/workflows/, runs both real scripts with checkout and node setup pinned to major versions, triggers on push and pull_request, and invents nothing — no typecheck stage, no publish job, no fabricated secrets.",
|
|
5
|
+
"tags": [
|
|
6
|
+
"code",
|
|
7
|
+
"ci",
|
|
8
|
+
"devops",
|
|
9
|
+
"tactical-fleet"
|
|
10
|
+
],
|
|
11
|
+
"prompt": "Use the CI Pipeline from Scratch craftbook: this repo has no CI at all. Set up a pipeline that runs on every push and pull request using what the repo already has — do not add stages for tools the repo does not use. Standard GitHub Actions layout.",
|
|
12
|
+
"setup": {
|
|
13
|
+
"projectName": "Relay Notes",
|
|
14
|
+
"about": "A small Node library with two package scripts: `npm run test` (node --test) and `npm run lint` (a repo-local lint script). No typecheck, no build step, no publish configuration.",
|
|
15
|
+
"files": [
|
|
16
|
+
{
|
|
17
|
+
"path": "package.json",
|
|
18
|
+
"content": "{\n \"name\": \"relay-notes\",\n \"private\": true,\n \"version\": \"1.0.0\",\n \"type\": \"module\",\n \"scripts\": {\n \"test\": \"node --test\",\n \"lint\": \"node tools/lint.mjs\"\n }\n}\n"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"path": "package-lock.json",
|
|
22
|
+
"content": "{\n \"name\": \"relay-notes\",\n \"version\": \"1.0.0\",\n \"lockfileVersion\": 3,\n \"requires\": true,\n \"packages\": {\n \"\": {\n \"name\": \"relay-notes\",\n \"version\": \"1.0.0\"\n }\n }\n}\n"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"path": "src/greet.js",
|
|
26
|
+
"content": "export function greet(name) {\n const label = String(name ?? '').trim();\n if (label === '') return 'Hello there!';\n return `Hello, ${label}!`;\n}\n"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"path": "tools/lint.mjs",
|
|
30
|
+
"content": "import { readFileSync, readdirSync } from 'node:fs';\n\nlet problems = 0;\nfor (const file of readdirSync('src')) {\n if (!file.endsWith('.js')) continue;\n const text = readFileSync(`src/${file}`, 'utf8');\n if (/\\t/.test(text)) {\n console.error(`lint: tab indentation in src/${file}`);\n problems++;\n }\n}\nif (problems > 0) process.exit(1);\nconsole.log('lint ok');\n"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"path": "tests/greet.test.mjs",
|
|
34
|
+
"content": "import assert from 'node:assert/strict';\nimport { test } from 'node:test';\nimport { greet } from '../src/greet.js';\n\ntest('greets a trimmed name', () => {\n assert.equal(greet(' Mira '), 'Hello, Mira!');\n});\n\ntest('falls back for an empty name', () => {\n assert.equal(greet(''), 'Hello there!');\n});\n"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"path": "tests/verify-ci.mjs",
|
|
38
|
+
"surface": "harness",
|
|
39
|
+
"content": "import assert from 'node:assert/strict';\nimport { readFileSync, readdirSync } from 'node:fs';\nimport { join } from 'node:path';\n\nconst dir = '.github/workflows';\nlet names = [];\ntry {\n names = readdirSync(dir).filter((f) => /\\.ya?ml$/i.test(f));\n} catch {}\nassert.ok(names.length >= 1, 'no workflow file exists under .github/workflows/');\nconst raw = names.map((f) => readFileSync(join(dir, f), 'utf8')).join('\\n---\\n');\n// Judge only active YAML: a comment honestly noting \"no typecheck script\"\n// must never trip the anti-invention assertions below.\nconst all = raw.replace(/#[^\\n]*/g, '');\nconsole.log('CIPIPE_ORACLE workflow found');\n\n// Checkout and Node setup, pinned to major versions.\nassert.ok(/actions\\/checkout@v\\d+/.test(all), 'uses actions/checkout pinned to a major version');\nassert.ok(/actions\\/setup-node@v\\d+/.test(all), 'uses actions/setup-node pinned to a major version');\nconsole.log('CIPIPE_ORACLE actions ok');\n\n// Runs both real scripts.\nassert.ok(/\\bnpm\\s+(?:run\\s+)?test\\b/.test(all), 'the workflow runs the test script');\nassert.ok(/\\bnpm\\s+run\\s+lint\\b/.test(all), 'the workflow runs the lint script');\nconsole.log('CIPIPE_ORACLE scripts ok');\n\n// Invokes nothing the repo does not have.\nassert.ok(!/typecheck/i.test(all), 'no invented typecheck stage - the repo has no such script');\nconst pkg = JSON.parse(readFileSync('package.json', 'utf8'));\nfor (const m of all.matchAll(/npm\\s+run\\s+([A-Za-z0-9:_-]+)/g)) {\n if (m[1].startsWith('-')) continue;\n assert.ok(pkg.scripts && pkg.scripts[m[1]], `workflow invokes \"npm run ${m[1]}\" but package.json has no such script`);\n}\nconsole.log('CIPIPE_ORACLE no invented commands');\n\n// Triggers on push and pull_request.\nassert.ok(/\\bpush\\b/.test(all), 'triggers on push');\nassert.ok(/\\bpull_request\\b/.test(all), 'triggers on pull_request');\nconsole.log('CIPIPE_ORACLE triggers ok');\n\n// No invented secrets, and no publish job in a repo with no release evidence.\nfor (const m of all.matchAll(/secrets\\.([A-Za-z0-9_]+)/g)) {\n assert.equal(m[1], 'GITHUB_TOKEN', `workflow references invented secret \"${m[1]}\"`);\n}\nassert.ok(!/npm\\s+publish/.test(all), 'no publish step - the repo shows no release configuration');\nconsole.log('CIPIPE_ORACLE nothing invented');\nconsole.log('CIPIPE_ORACLE done');\n"
|
|
40
|
+
}
|
|
41
|
+
],
|
|
42
|
+
"craftbookParams": {
|
|
43
|
+
"workPath": "tasks/eval"
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
"success": {
|
|
47
|
+
"summary": "A real GitHub Actions workflow exists at the conventional location, runs exactly the repo's two scripts on push and pull_request with pinned actions, invents no command, secret, or publish job — and every fleet artifact exists with the workflow commands verified against quoted package.json lines.",
|
|
48
|
+
"deliverables": [
|
|
49
|
+
{
|
|
50
|
+
"path": "tasks/eval/ci-plan.md",
|
|
51
|
+
"kind": "markdown-notes",
|
|
52
|
+
"artifact": true,
|
|
53
|
+
"minBytes": 500,
|
|
54
|
+
"checks": [
|
|
55
|
+
{
|
|
56
|
+
"kind": "contains",
|
|
57
|
+
"file": "tasks/eval/ci-plan.md",
|
|
58
|
+
"pattern": "^##\\s+Detected commands[\\s\\S]*^##\\s+Pipeline stages[\\s\\S]*^##\\s+Caching[\\s\\S]*^##\\s+Triggers",
|
|
59
|
+
"flags": "im",
|
|
60
|
+
"label": "ci-plan sections in order"
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"kind": "contains",
|
|
64
|
+
"file": "tasks/eval/ci-plan.md",
|
|
65
|
+
"pattern": "package\\.json",
|
|
66
|
+
"label": "the plan reads the real manifest"
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"kind": "citationsResolve",
|
|
70
|
+
"file": "tasks/eval/ci-plan.md",
|
|
71
|
+
"minCitations": 2,
|
|
72
|
+
"artifact": true
|
|
73
|
+
}
|
|
74
|
+
]
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"path": "tasks/eval/ci-notes.md",
|
|
78
|
+
"kind": "markdown-notes",
|
|
79
|
+
"artifact": true,
|
|
80
|
+
"minBytes": 500,
|
|
81
|
+
"checks": [
|
|
82
|
+
{
|
|
83
|
+
"kind": "contains",
|
|
84
|
+
"file": "tasks/eval/ci-notes.md",
|
|
85
|
+
"pattern": "^##\\s+Files written[\\s\\S]*^##\\s+Stages[\\s\\S]*^##\\s+Choices explained",
|
|
86
|
+
"flags": "im",
|
|
87
|
+
"label": "ci-notes sections in order"
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"kind": "contains",
|
|
91
|
+
"file": "tasks/eval/ci-notes.md",
|
|
92
|
+
"pattern": "\\.github/workflows/",
|
|
93
|
+
"label": "names the conventional workflow location"
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"kind": "citationsResolve",
|
|
97
|
+
"file": "tasks/eval/ci-notes.md",
|
|
98
|
+
"minCitations": 2,
|
|
99
|
+
"artifact": true
|
|
100
|
+
}
|
|
101
|
+
]
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"path": "tasks/eval/verification.md",
|
|
105
|
+
"kind": "markdown-notes",
|
|
106
|
+
"artifact": true,
|
|
107
|
+
"minBytes": 500,
|
|
108
|
+
"checks": [
|
|
109
|
+
{
|
|
110
|
+
"kind": "contains",
|
|
111
|
+
"file": "tasks/eval/verification.md",
|
|
112
|
+
"pattern": "^##\\s+Workflow files[\\s\\S]*^##\\s+Commands verified against package\\.json[\\s\\S]*^##\\s+Result",
|
|
113
|
+
"flags": "im",
|
|
114
|
+
"label": "verification sections in order"
|
|
115
|
+
}
|
|
116
|
+
]
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"path": "tasks/eval/review.md",
|
|
120
|
+
"kind": "markdown-report",
|
|
121
|
+
"artifact": true,
|
|
122
|
+
"minBytes": 400,
|
|
123
|
+
"checks": [
|
|
124
|
+
{
|
|
125
|
+
"kind": "contains",
|
|
126
|
+
"file": "tasks/eval/review.md",
|
|
127
|
+
"pattern": "Verdict:\\s*(?:PASS|REVISE)",
|
|
128
|
+
"flags": "i",
|
|
129
|
+
"label": "explicit reviewer verdict"
|
|
130
|
+
}
|
|
131
|
+
]
|
|
132
|
+
}
|
|
133
|
+
],
|
|
134
|
+
"checks": [
|
|
135
|
+
{
|
|
136
|
+
"kind": "nodeRuns",
|
|
137
|
+
"file": "tests/greet.test.mjs"
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
"kind": "nodeScriptPasses",
|
|
141
|
+
"script": "tools/lint.mjs",
|
|
142
|
+
"timeoutMs": 30000,
|
|
143
|
+
"requiredOutput": [
|
|
144
|
+
{
|
|
145
|
+
"pattern": "lint ok",
|
|
146
|
+
"label": "the repo lint still passes"
|
|
147
|
+
}
|
|
148
|
+
]
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
"kind": "nodeScriptPasses",
|
|
152
|
+
"script": "tests/verify-ci.mjs",
|
|
153
|
+
"timeoutMs": 60000,
|
|
154
|
+
"requiredOutput": [
|
|
155
|
+
{
|
|
156
|
+
"pattern": "CIPIPE_ORACLE workflow found",
|
|
157
|
+
"label": "a workflow exists at the conventional location"
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
"pattern": "CIPIPE_ORACLE scripts ok",
|
|
161
|
+
"label": "both real scripts run in CI"
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
"pattern": "CIPIPE_ORACLE no invented commands",
|
|
165
|
+
"label": "no command invented beyond package.json"
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
"pattern": "CIPIPE_ORACLE triggers ok",
|
|
169
|
+
"label": "triggers on push and pull_request"
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
"pattern": "CIPIPE_ORACLE nothing invented",
|
|
173
|
+
"label": "no fabricated secrets or publish job"
|
|
174
|
+
}
|
|
175
|
+
]
|
|
176
|
+
}
|
|
177
|
+
],
|
|
178
|
+
"taskNotes": {
|
|
179
|
+
"minBytes": 120,
|
|
180
|
+
"checks": [
|
|
181
|
+
{
|
|
182
|
+
"kind": "contains",
|
|
183
|
+
"file": "task-notes.md",
|
|
184
|
+
"pattern": "\\bDONE\\b[\\s\\S]*(workflows|ci\\.yml|verification\\.md)",
|
|
185
|
+
"flags": "i",
|
|
186
|
+
"label": "DONE note names the workflow deliverable"
|
|
187
|
+
}
|
|
188
|
+
]
|
|
189
|
+
},
|
|
190
|
+
"taskGraph": {
|
|
191
|
+
"requireCraftbookTask": true,
|
|
192
|
+
"requireTerminalStep": true
|
|
193
|
+
},
|
|
194
|
+
"unchangedFixtures": [
|
|
195
|
+
"package.json",
|
|
196
|
+
"package-lock.json",
|
|
197
|
+
"src/greet.js",
|
|
198
|
+
"tools/lint.mjs",
|
|
199
|
+
"tests/greet.test.mjs"
|
|
200
|
+
]
|
|
201
|
+
},
|
|
202
|
+
"rubric": {
|
|
203
|
+
"artifact": {
|
|
204
|
+
"path": "tasks/eval/ci-notes.md",
|
|
205
|
+
"kind": "markdown"
|
|
206
|
+
},
|
|
207
|
+
"axes": [
|
|
208
|
+
{
|
|
209
|
+
"name": "Grounded inventory",
|
|
210
|
+
"description": "Every planned stage maps to a script that exists in package.json, quoted verbatim; no typecheck, build, or publish stage was invented for this repo."
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
"name": "Workflow quality",
|
|
214
|
+
"description": "The workflow sits at the conventional location, pins actions to major versions, orders install before lint and test, wires dependency caching, and triggers on push and pull_request."
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
"name": "Verification honesty",
|
|
218
|
+
"description": "The verify pass matched each workflow command to a quoted manifest line and is plain about what only a live CI run on the host can prove."
|
|
219
|
+
}
|
|
220
|
+
]
|
|
221
|
+
},
|
|
222
|
+
"qualityFocus": [
|
|
223
|
+
"no invented commands or secrets",
|
|
224
|
+
"manifest-quoted verification",
|
|
225
|
+
"enforced review loop"
|
|
226
|
+
]
|
|
227
|
+
}
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"title": "Repo-wide rename sweep with reconciled counts",
|
|
4
|
+
"objective": "The craftbook drives a complete mechanical rename of fetchUserData to loadUser across a small repo whose sites include a re-export and a template-literal log string, with a changelog legitimately excluded as history - verified mechanically by a residual scan, behavior probes on every site, and a green suite.",
|
|
5
|
+
"tags": [
|
|
6
|
+
"code",
|
|
7
|
+
"codemod",
|
|
8
|
+
"rename",
|
|
9
|
+
"tactical-fleet"
|
|
10
|
+
],
|
|
11
|
+
"prompt": "Use the Codemod Sweep craftbook for this: rename fetchUserData to loadUser across the whole repo - the export, the re-export, every import and call site, and log strings that mention the old name. CHANGELOG.md is history and keeps the old name. The brief is in source/rename-brief.md. No behavior change.",
|
|
12
|
+
"setup": {
|
|
13
|
+
"projectName": "Profile Cards",
|
|
14
|
+
"about": "A tiny profile-rendering module with an in-memory user store. Tests run with `npm run test` (node --test).",
|
|
15
|
+
"files": [
|
|
16
|
+
{
|
|
17
|
+
"path": "package.json",
|
|
18
|
+
"content": "{\n \"name\": \"profile-cards\",\n \"private\": true,\n \"version\": \"1.0.0\",\n \"type\": \"module\",\n \"scripts\": {\n \"test\": \"node --test\"\n }\n}\n"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"path": "src/api.js",
|
|
22
|
+
"content": "const USERS = new Map([\n [1, { id: 1, name: 'Ada' }],\n [2, { id: 2, name: 'Grace' }],\n]);\n\nexport function fetchUserData(id) {\n const user = USERS.get(id);\n if (!user) throw new Error(`no user ${id}`);\n return { ...user };\n}\n"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"path": "src/index.js",
|
|
26
|
+
"content": "export { fetchUserData } from './api.js';\n"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"path": "src/log.js",
|
|
30
|
+
"content": "export const lines = [];\n\nexport function logLine(line) {\n lines.push(line);\n}\n"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"path": "src/profile.js",
|
|
34
|
+
"content": "import { fetchUserData } from './api.js';\nimport { logLine } from './log.js';\n\nexport function profileSummary(id) {\n const user = fetchUserData(id);\n logLine(`fetchUserData resolved user ${user.id}`);\n return `${user.name} (#${user.id})`;\n}\n"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"path": "tests/profile.test.mjs",
|
|
38
|
+
"content": "import assert from 'node:assert/strict';\nimport { test } from 'node:test';\nimport { fetchUserData } from '../src/index.js';\nimport { lines } from '../src/log.js';\nimport { profileSummary } from '../src/profile.js';\n\ntest('profileSummary renders the user line', () => {\n assert.equal(profileSummary(1), 'Ada (#1)');\n});\n\ntest('profileSummary logs the lookup', () => {\n profileSummary(2);\n assert.ok(lines.some((line) => line.includes('resolved user 2')));\n});\n\ntest('the re-export serves the same function', () => {\n assert.equal(fetchUserData(1).name, 'Ada');\n});\n"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"path": "CHANGELOG.md",
|
|
42
|
+
"content": "# Changelog\n\n## 1.2.0\n\n- fetchUserData now copies the record before returning it, so callers can\n mutate the result safely.\n\n## 1.0.0\n\n- Initial release with fetchUserData and the profile summary renderer.\n"
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"path": "source/rename-brief.md",
|
|
46
|
+
"content": "# Rename brief: fetchUserData -> loadUser\n\nThe function does not fetch anything remote any more, so the name misleads.\nRename `fetchUserData` to `loadUser` everywhere it appears: the export, the\nre-export, every import and call site, and log strings that mention the old\nname - the log lines should follow the rename too.\n\nDo not rewrite history: `CHANGELOG.md` keeps the old name, because it records\nwhat past releases were actually called.\n\nNo behavior change: same records returned, same summary strings, same number\nof log lines.\n"
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"path": "tests/verify-sweep.mjs",
|
|
50
|
+
"surface": "harness",
|
|
51
|
+
"content": "import assert from 'node:assert/strict';\nimport { execFileSync } from 'node:child_process';\nimport { readFileSync, readdirSync, statSync } from 'node:fs';\nimport { join, relative } from 'node:path';\nimport { pathToFileURL } from 'node:url';\n\nconst root = process.cwd();\n\n// 1) Residual scan: zero mentions of the old name outside the excluded\n// history (CHANGELOG.md), the briefing material (source/), and\n// harness-owned files.\nconst SKIP_FILES = new Set(['CHANGELOG.md', 'task-notes.md', 'task-graph.md', 'tests/verify-sweep.mjs']);\nconst SKIP_DIRS = new Set(['node_modules', 'source']);\nconst hits = [];\nfunction scan(dir) {\n for (const entry of readdirSync(dir)) {\n if (entry.startsWith('.')) continue;\n const full = join(dir, entry);\n const rel = relative(root, full).split('\\\\').join('/');\n const stat = statSync(full);\n if (stat.isDirectory()) {\n if (SKIP_DIRS.has(entry)) continue;\n scan(full);\n continue;\n }\n if (SKIP_FILES.has(rel)) continue;\n if (!/\\.(js|mjs|cjs|json|md|txt)$/.test(entry)) continue;\n if (/\\bfetchUserData\\b/.test(readFileSync(full, 'utf8'))) hits.push(rel);\n }\n}\nscan(root);\nassert.deepEqual(hits, [], `the old name survives outside the exclusions in: ${hits.join(', ')}`);\nconsole.log('CODEMOD_ORACLE residual scan clean');\n\n// 2) Every site behaves under the new name, including the tricky ones.\nconst api = await import(pathToFileURL(join(root, 'src/api.js')).href);\nassert.equal(typeof api.loadUser, 'function', 'src/api.js must export loadUser');\nassert.equal(api.fetchUserData, undefined, 'src/api.js still exports the old name');\nconst index = await import(pathToFileURL(join(root, 'src/index.js')).href);\nassert.equal(typeof index.loadUser, 'function', 'src/index.js must re-export loadUser');\nassert.equal(index.fetchUserData, undefined, 'src/index.js still re-exports the old name');\nassert.equal(index.loadUser(1).name, 'Ada', 'the re-exported loadUser must return the same records');\nconst { profileSummary } = await import(pathToFileURL(join(root, 'src/profile.js')).href);\nconst { lines } = await import(pathToFileURL(join(root, 'src/log.js')).href);\nassert.equal(profileSummary(1), 'Ada (#1)', 'profileSummary behavior must be unchanged');\nassert.ok(\n lines.some((line) => line.includes('loadUser resolved user 1')),\n 'the log string must follow the rename',\n);\nassert.ok(\n !lines.some((line) => line.includes('fetchUserData')),\n 'a log string still mentions the old name',\n);\nconsole.log('CODEMOD_ORACLE behavior ok');\n\n// 3) History kept: the excluded changelog still records the old name.\nassert.ok(\n /\\bfetchUserData\\b/.test(readFileSync(join(root, 'CHANGELOG.md'), 'utf8')),\n 'CHANGELOG.md must keep the historical name',\n);\nconsole.log('CODEMOD_ORACLE history kept');\n\n// 4) The suite is green after the sweep, and the seeded test file survives.\nreadFileSync(join(root, 'tests/profile.test.mjs'));\nfunction runSuite(cwd) {\n try {\n execFileSync(process.execPath, ['--test'], { cwd, stdio: 'pipe', timeout: 30000 });\n return 0;\n } catch (err) {\n return typeof err.status === 'number' ? err.status : 1;\n }\n}\nassert.equal(runSuite(root), 0, 'the suite must be green after the sweep');\nconsole.log('CODEMOD_ORACLE suite green');\nconsole.log('CODEMOD_ORACLE done');\n"
|
|
52
|
+
}
|
|
53
|
+
],
|
|
54
|
+
"craftbookParams": {
|
|
55
|
+
"workPath": "tasks/eval",
|
|
56
|
+
"scope": "Rename fetchUserData to loadUser everywhere, including log strings that mention it; CHANGELOG.md keeps the historical name; no behavior change. See source/rename-brief.md."
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
"success": {
|
|
60
|
+
"summary": "Zero references to the old name remain outside the excluded changelog and brief, every site (including the re-export and the log string) behaves under the new name, the suite is green, and every fleet artifact exists with counts that reconcile.",
|
|
61
|
+
"deliverables": [
|
|
62
|
+
{
|
|
63
|
+
"path": "tasks/eval/sites.md",
|
|
64
|
+
"kind": "markdown-notes",
|
|
65
|
+
"artifact": true,
|
|
66
|
+
"minBytes": 500,
|
|
67
|
+
"checks": [
|
|
68
|
+
{
|
|
69
|
+
"kind": "contains",
|
|
70
|
+
"file": "tasks/eval/sites.md",
|
|
71
|
+
"pattern": "^##\\s+Pattern[\\s\\S]*^##\\s+Sites found[\\s\\S]*^##\\s+Exclusions",
|
|
72
|
+
"flags": "im",
|
|
73
|
+
"label": "sites sections in order"
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"kind": "contains",
|
|
77
|
+
"file": "tasks/eval/sites.md",
|
|
78
|
+
"pattern": "src/index\\.js",
|
|
79
|
+
"label": "found the re-export site"
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"kind": "citationsResolve",
|
|
83
|
+
"file": "tasks/eval/sites.md",
|
|
84
|
+
"minCitations": 2,
|
|
85
|
+
"artifact": true
|
|
86
|
+
}
|
|
87
|
+
]
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"path": "tasks/eval/change-notes.md",
|
|
91
|
+
"kind": "markdown-notes",
|
|
92
|
+
"artifact": true,
|
|
93
|
+
"minBytes": 500,
|
|
94
|
+
"checks": [
|
|
95
|
+
{
|
|
96
|
+
"kind": "contains",
|
|
97
|
+
"file": "tasks/eval/change-notes.md",
|
|
98
|
+
"pattern": "^##\\s+Sites changed[\\s\\S]*^##\\s+Files touched[\\s\\S]*^##\\s+Invariants held",
|
|
99
|
+
"flags": "im",
|
|
100
|
+
"label": "change-notes sections in order"
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"kind": "citationsResolve",
|
|
104
|
+
"file": "tasks/eval/change-notes.md",
|
|
105
|
+
"minCitations": 2,
|
|
106
|
+
"artifact": true
|
|
107
|
+
}
|
|
108
|
+
]
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
"path": "tasks/eval/verification.md",
|
|
112
|
+
"kind": "markdown-notes",
|
|
113
|
+
"artifact": true,
|
|
114
|
+
"minBytes": 450,
|
|
115
|
+
"checks": [
|
|
116
|
+
{
|
|
117
|
+
"kind": "contains",
|
|
118
|
+
"file": "tasks/eval/verification.md",
|
|
119
|
+
"pattern": "^##\\s+Residual scan[\\s\\S]*^##\\s+Counts reconciled[\\s\\S]*^##\\s+Suite[\\s\\S]*^##\\s+Result",
|
|
120
|
+
"flags": "im",
|
|
121
|
+
"label": "verification sections in order"
|
|
122
|
+
}
|
|
123
|
+
]
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
"path": "tasks/eval/review.md",
|
|
127
|
+
"kind": "markdown-report",
|
|
128
|
+
"artifact": true,
|
|
129
|
+
"minBytes": 400,
|
|
130
|
+
"checks": [
|
|
131
|
+
{
|
|
132
|
+
"kind": "contains",
|
|
133
|
+
"file": "tasks/eval/review.md",
|
|
134
|
+
"pattern": "Verdict:\\s*(?:PASS|REVISE)",
|
|
135
|
+
"flags": "i",
|
|
136
|
+
"label": "explicit reviewer verdict"
|
|
137
|
+
}
|
|
138
|
+
]
|
|
139
|
+
}
|
|
140
|
+
],
|
|
141
|
+
"checks": [
|
|
142
|
+
{
|
|
143
|
+
"kind": "notContains",
|
|
144
|
+
"file": "src/api.js",
|
|
145
|
+
"pattern": "\\bfetchUserData\\b",
|
|
146
|
+
"label": "the old name is gone from the definition site"
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
"kind": "notContains",
|
|
150
|
+
"file": "src/index.js",
|
|
151
|
+
"pattern": "\\bfetchUserData\\b",
|
|
152
|
+
"label": "the old name is gone from the re-export site"
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
"kind": "notContains",
|
|
156
|
+
"file": "src/profile.js",
|
|
157
|
+
"pattern": "\\bfetchUserData\\b",
|
|
158
|
+
"label": "the old name is gone from the call site and its log string"
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
"kind": "notContains",
|
|
162
|
+
"file": "tests/profile.test.mjs",
|
|
163
|
+
"pattern": "\\bfetchUserData\\b",
|
|
164
|
+
"label": "the old name is gone from the test call sites"
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
"kind": "contains",
|
|
168
|
+
"file": "CHANGELOG.md",
|
|
169
|
+
"pattern": "\\bfetchUserData\\b",
|
|
170
|
+
"label": "the excluded changelog keeps the historical name"
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
"kind": "sourceParses",
|
|
174
|
+
"file": "src/api.js"
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
"kind": "sourceParses",
|
|
178
|
+
"file": "src/profile.js"
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
"kind": "nodeRuns",
|
|
182
|
+
"file": "tests/profile.test.mjs"
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
"kind": "nodeScriptPasses",
|
|
186
|
+
"script": "tests/verify-sweep.mjs",
|
|
187
|
+
"timeoutMs": 60000,
|
|
188
|
+
"requiredOutput": [
|
|
189
|
+
{
|
|
190
|
+
"pattern": "CODEMOD_ORACLE residual scan clean",
|
|
191
|
+
"label": "zero un-excluded sites remain"
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
"pattern": "CODEMOD_ORACLE behavior ok",
|
|
195
|
+
"label": "every site behaves under the new name"
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
"pattern": "CODEMOD_ORACLE suite green",
|
|
199
|
+
"label": "suite green after the sweep"
|
|
200
|
+
}
|
|
201
|
+
]
|
|
202
|
+
}
|
|
203
|
+
],
|
|
204
|
+
"taskNotes": {
|
|
205
|
+
"minBytes": 120,
|
|
206
|
+
"checks": [
|
|
207
|
+
{
|
|
208
|
+
"kind": "contains",
|
|
209
|
+
"file": "task-notes.md",
|
|
210
|
+
"pattern": "\\bDONE\\b[\\s\\S]*(npm\\s+run\\s+test|node\\s+--test)",
|
|
211
|
+
"flags": "i",
|
|
212
|
+
"label": "DONE note names the real test command"
|
|
213
|
+
}
|
|
214
|
+
]
|
|
215
|
+
},
|
|
216
|
+
"taskGraph": {
|
|
217
|
+
"requireCraftbookTask": true,
|
|
218
|
+
"requireTerminalStep": true
|
|
219
|
+
},
|
|
220
|
+
"unchangedFixtures": [
|
|
221
|
+
"CHANGELOG.md",
|
|
222
|
+
"source/rename-brief.md",
|
|
223
|
+
"package.json",
|
|
224
|
+
"src/log.js"
|
|
225
|
+
]
|
|
226
|
+
},
|
|
227
|
+
"rubric": {
|
|
228
|
+
"artifact": {
|
|
229
|
+
"path": "tasks/eval/verification.md",
|
|
230
|
+
"kind": "markdown"
|
|
231
|
+
},
|
|
232
|
+
"axes": [
|
|
233
|
+
{
|
|
234
|
+
"name": "Enumeration completeness",
|
|
235
|
+
"description": "Every site was found by real searches before any edit - the definition, the re-export, the imports and call sites, and the log string - with the changelog excluded for a stated reason rather than missed."
|
|
236
|
+
},
|
|
237
|
+
{
|
|
238
|
+
"name": "Invariant discipline",
|
|
239
|
+
"description": "The change stayed mechanical: nothing changed beyond the declared rename, the excluded files are untouched, and behavior is identical."
|
|
240
|
+
},
|
|
241
|
+
{
|
|
242
|
+
"name": "Reconciled verification",
|
|
243
|
+
"description": "The residual re-scan is quoted with its result, the found/changed/excluded counts add up exactly, and the suite run backing the green claim is real."
|
|
244
|
+
}
|
|
245
|
+
]
|
|
246
|
+
},
|
|
247
|
+
"qualityFocus": [
|
|
248
|
+
"sweep completeness",
|
|
249
|
+
"count reconciliation",
|
|
250
|
+
"behavior invariants"
|
|
251
|
+
]
|
|
252
|
+
}
|