@bendyline/gilde 0.1.37 → 0.1.39
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/data/craftbook-templates/a1/a11y-audit/versions/1.1.2/craftbook.json +153 -0
- package/data/craftbook-templates/a1/a11y-audit/versions/1.1.2/test.json +118 -0
- package/data/craftbook-templates/ab/ab-test-readout/versions/1.0.2/craftbook.json +153 -0
- package/data/craftbook-templates/ab/ab-test-readout/versions/1.0.2/test.json +189 -0
- package/data/craftbook-templates/ac/accessibility-retrofit/versions/1.0.2/craftbook.json +122 -0
- package/data/craftbook-templates/ac/accessibility-retrofit/versions/1.0.2/test.json +100 -0
- package/data/craftbook-templates/ad/ad-variations/versions/1.0.2/craftbook.json +117 -0
- package/data/craftbook-templates/ad/ad-variations/versions/1.0.2/test.json +111 -0
- package/data/craftbook-templates/al/album-curate/versions/1.0.2/craftbook.json +127 -0
- package/data/craftbook-templates/al/album-curate/versions/1.0.2/test.json +150 -0
- package/data/craftbook-templates/al/alert-rules/versions/1.0.2/craftbook.json +113 -0
- package/data/craftbook-templates/al/alert-rules/versions/1.0.2/test.json +148 -0
- package/data/craftbook-templates/al/alt-text-pass/versions/1.0.2/craftbook.json +154 -0
- package/data/craftbook-templates/al/alt-text-pass/versions/1.0.2/test.json +100 -0
- package/data/craftbook-templates/an/anniversary-cut/versions/1.0.4/craftbook.json +238 -0
- package/data/craftbook-templates/an/anniversary-cut/versions/1.0.4/test.json +160 -0
- package/data/craftbook-templates/an/annotated-bibliography/versions/1.0.2/craftbook.json +158 -0
- package/data/craftbook-templates/an/annotated-bibliography/versions/1.0.2/test.json +105 -0
- package/data/craftbook-templates/an/annual-document-review/versions/1.0.2/craftbook.json +152 -0
- package/data/craftbook-templates/an/annual-document-review/versions/1.0.2/test.json +113 -0
- package/data/craftbook-templates/an/anomaly-scan/versions/1.0.2/craftbook.json +153 -0
- package/data/craftbook-templates/an/anomaly-scan/versions/1.0.2/test.json +123 -0
- package/data/craftbook-templates/ap/api-contract-review/versions/1.1.2/craftbook.json +153 -0
- package/data/craftbook-templates/ap/api-contract-review/versions/1.1.2/test.json +118 -0
- package/data/craftbook-templates/ar/artifact-integrity-review/versions/1.0.2/craftbook.json +170 -0
- package/data/craftbook-templates/ar/artifact-integrity-review/versions/1.0.2/test.json +139 -0
- package/data/craftbook-templates/au/audio-ad-spot/versions/1.0.2/craftbook.json +141 -0
- package/data/craftbook-templates/au/audio-ad-spot/versions/1.0.2/test.json +106 -0
- package/data/craftbook-templates/au/audio-highlight-reel/versions/1.0.2/craftbook.json +135 -0
- package/data/craftbook-templates/au/audio-highlight-reel/versions/1.0.2/test.json +106 -0
- package/data/craftbook-templates/au/audiobook-master-pack/versions/1.0.4/craftbook.json +222 -0
- package/data/craftbook-templates/au/audiobook-master-pack/versions/1.0.4/test.json +224 -0
- package/data/craftbook-templates/au/auth-flow/versions/1.0.2/craftbook.json +160 -0
- package/data/craftbook-templates/au/auth-flow/versions/1.0.2/test.json +143 -0
- package/data/craftbook-templates/au/automation-recipe/versions/1.0.2/craftbook.json +176 -0
- package/data/craftbook-templates/au/automation-recipe/versions/1.0.2/test.json +299 -0
- package/data/craftbook-templates/ba/backup-routine/versions/1.0.2/craftbook.json +160 -0
- package/data/craftbook-templates/ba/backup-routine/versions/1.0.2/test.json +111 -0
- package/data/craftbook-templates/bl/blog-post/versions/1.0.2/craftbook.json +155 -0
- package/data/craftbook-templates/bl/blog-post/versions/1.0.2/test.json +121 -0
- package/data/craftbook-templates/bo/board-deck/versions/1.0.2/craftbook.json +153 -0
- package/data/craftbook-templates/bo/board-deck/versions/1.0.2/test.json +103 -0
- package/data/craftbook-templates/bo/board-game-web/versions/1.0.2/craftbook.json +162 -0
- package/data/craftbook-templates/bo/board-game-web/versions/1.0.2/test.json +102 -0
- package/data/craftbook-templates/bo/booking-automation/versions/1.0.2/craftbook.json +170 -0
- package/data/craftbook-templates/bo/booking-automation/versions/1.0.2/test.json +165 -0
- package/data/craftbook-templates/br/broadcast-announcement/versions/1.0.2/craftbook.json +119 -0
- package/data/craftbook-templates/br/broadcast-announcement/versions/1.0.2/test.json +106 -0
- package/data/craftbook-templates/br/browser-qa-audit/versions/2.0.4/craftbook.json +429 -0
- package/data/craftbook-templates/br/browser-qa-audit/versions/2.0.4/test.json +379 -0
- package/data/craftbook-templates/bu/bug-fix-tdd/versions/1.0.3/craftbook.json +176 -0
- package/data/craftbook-templates/bu/bug-fix-tdd/versions/1.0.3/test.json +95 -0
- package/data/craftbook-templates/ca/calendar-brief/versions/1.0.2/craftbook.json +119 -0
- package/data/craftbook-templates/ca/calendar-brief/versions/1.0.2/test.json +105 -0
- package/data/craftbook-templates/ca/canvas-generative-art/versions/1.0.2/craftbook.json +122 -0
- package/data/craftbook-templates/ca/canvas-generative-art/versions/1.0.2/test.json +109 -0
- package/data/craftbook-templates/ca/case-study/versions/1.0.2/craftbook.json +155 -0
- package/data/craftbook-templates/ca/case-study/versions/1.0.2/test.json +115 -0
- package/data/craftbook-templates/ca/case-study-writeup/versions/1.0.2/craftbook.json +163 -0
- package/data/craftbook-templates/ca/case-study-writeup/versions/1.0.2/test.json +108 -0
- package/data/craftbook-templates/ch/changelog-cut/versions/1.0.2/craftbook.json +125 -0
- package/data/craftbook-templates/ch/changelog-cut/versions/1.0.2/test.json +109 -0
- package/data/craftbook-templates/ch/changelog-writeup/versions/1.0.2/craftbook.json +119 -0
- package/data/craftbook-templates/ch/changelog-writeup/versions/1.0.2/test.json +132 -0
- package/data/craftbook-templates/ch/chapter-narration-run/versions/1.0.3/craftbook.json +135 -0
- package/data/craftbook-templates/ch/chapter-narration-run/versions/1.0.3/test.json +158 -0
- package/data/craftbook-templates/ch/chapter-weave/versions/1.0.2/craftbook.json +86 -0
- package/data/craftbook-templates/ch/chapter-weave/versions/1.0.2/test.json +101 -0
- package/data/craftbook-templates/ch/character-sheet/versions/1.0.2/craftbook.json +94 -0
- package/data/craftbook-templates/ch/character-sheet/versions/1.0.2/test.json +146 -0
- package/data/craftbook-templates/ch/character-turnaround/versions/1.0.2/craftbook.json +133 -0
- package/data/craftbook-templates/ch/character-turnaround/versions/1.0.2/test.json +181 -0
- package/data/craftbook-templates/ch/chart-pack/versions/1.0.2/craftbook.json +160 -0
- package/data/craftbook-templates/ch/chart-pack/versions/1.0.2/test.json +107 -0
- package/data/craftbook-templates/ch/chrome-extension/versions/1.0.2/craftbook.json +160 -0
- package/data/craftbook-templates/ch/chrome-extension/versions/1.0.2/test.json +100 -0
- package/data/craftbook-templates/ci/ci-pipeline/versions/1.0.2/craftbook.json +144 -0
- package/data/craftbook-templates/ci/ci-pipeline/versions/1.0.2/test.json +165 -0
- package/data/craftbook-templates/ci/citation-audit/versions/1.0.2/craftbook.json +158 -0
- package/data/craftbook-templates/ci/citation-audit/versions/1.0.2/test.json +152 -0
- package/data/craftbook-templates/cl/cli-tool/versions/1.1.2/craftbook.json +159 -0
- package/data/craftbook-templates/cl/cli-tool/versions/1.1.2/test.json +131 -0
- package/data/craftbook-templates/co/codebase-refactoring-review/versions/1.0.2/craftbook.json +165 -0
- package/data/craftbook-templates/co/codebase-refactoring-review/versions/1.0.2/test.json +119 -0
- package/data/craftbook-templates/co/codebase-ux-review/versions/1.0.2/craftbook.json +165 -0
- package/data/craftbook-templates/co/codebase-ux-review/versions/1.0.2/test.json +122 -0
- package/data/craftbook-templates/co/cohort-analysis/versions/1.0.2/craftbook.json +153 -0
- package/data/craftbook-templates/co/cohort-analysis/versions/1.0.2/test.json +229 -0
- package/data/craftbook-templates/co/company-research-brief/versions/1.0.2/craftbook.json +151 -0
- package/data/craftbook-templates/co/company-research-brief/versions/1.0.2/test.json +100 -0
- package/data/craftbook-templates/co/comparison-matrix/versions/1.0.2/craftbook.json +165 -0
- package/data/craftbook-templates/co/comparison-matrix/versions/1.0.2/test.json +112 -0
- package/data/craftbook-templates/co/compat-check/versions/1.0.2/craftbook.json +158 -0
- package/data/craftbook-templates/co/compat-check/versions/1.0.2/test.json +148 -0
- package/data/craftbook-templates/co/competitive-analysis/versions/1.0.2/craftbook.json +152 -0
- package/data/craftbook-templates/co/competitive-analysis/versions/1.0.2/test.json +119 -0
- package/data/craftbook-templates/co/config-scaffold/versions/1.0.2/craftbook.json +117 -0
- package/data/craftbook-templates/co/config-scaffold/versions/1.0.2/test.json +123 -0
- package/data/craftbook-templates/co/content-accuracy-review/versions/1.0.2/craftbook.json +153 -0
- package/data/craftbook-templates/co/content-accuracy-review/versions/1.0.2/test.json +152 -0
- package/data/craftbook-templates/co/contract-template/versions/1.0.2/craftbook.json +157 -0
- package/data/craftbook-templates/co/contract-template/versions/1.0.2/test.json +105 -0
- package/data/craftbook-templates/co/cookbook-layout/versions/1.0.2/craftbook.json +133 -0
- package/data/craftbook-templates/co/cookbook-layout/versions/1.0.2/test.json +162 -0
- package/data/craftbook-templates/co/copy-review/versions/1.0.2/craftbook.json +153 -0
- package/data/craftbook-templates/co/copy-review/versions/1.0.2/test.json +105 -0
- package/data/craftbook-templates/co/corpus-synthesis/versions/1.0.2/craftbook.json +158 -0
- package/data/craftbook-templates/co/corpus-synthesis/versions/1.0.2/test.json +159 -0
- package/data/craftbook-templates/co/cover-letter/versions/1.0.2/craftbook.json +119 -0
- package/data/craftbook-templates/co/cover-letter/versions/1.0.2/test.json +103 -0
- package/data/craftbook-templates/cr/crm-update-batch/versions/1.0.2/craftbook.json +113 -0
- package/data/craftbook-templates/cr/crm-update-batch/versions/1.0.2/test.json +210 -0
- package/data/craftbook-templates/cr/cron-job/versions/1.0.2/craftbook.json +159 -0
- package/data/craftbook-templates/cr/cron-job/versions/1.0.2/test.json +107 -0
- package/data/craftbook-templates/cr/crossword-forge/versions/1.0.2/craftbook.json +176 -0
- package/data/craftbook-templates/cr/crossword-forge/versions/1.0.2/test.json +138 -0
- package/data/craftbook-templates/cs/csv-transformer/versions/1.2.3/craftbook.json +113 -0
- package/data/craftbook-templates/cs/csv-transformer/versions/1.2.3/test.json +105 -0
- package/data/craftbook-templates/da/dashboard-spec/versions/1.0.2/craftbook.json +119 -0
- package/data/craftbook-templates/da/dashboard-spec/versions/1.0.2/test.json +117 -0
- package/data/craftbook-templates/da/data-dictionary/versions/1.0.2/craftbook.json +119 -0
- package/data/craftbook-templates/da/data-dictionary/versions/1.0.2/test.json +104 -0
- package/data/craftbook-templates/da/data-export-migrate/versions/1.0.2/craftbook.json +160 -0
- package/data/craftbook-templates/da/data-export-migrate/versions/1.0.2/test.json +107 -0
- package/data/craftbook-templates/da/data-join-merge/versions/1.0.2/craftbook.json +113 -0
- package/data/craftbook-templates/da/data-join-merge/versions/1.0.2/test.json +107 -0
- package/data/craftbook-templates/da/data-pipeline-etl/versions/1.0.3/craftbook.json +160 -0
- package/data/craftbook-templates/da/data-pipeline-etl/versions/1.0.3/test.json +165 -0
- package/data/craftbook-templates/da/data-quality-audit/versions/1.0.2/craftbook.json +153 -0
- package/data/craftbook-templates/da/data-quality-audit/versions/1.0.2/test.json +329 -0
- package/data/craftbook-templates/da/data-to-report/versions/1.0.2/craftbook.json +152 -0
- package/data/craftbook-templates/da/data-to-report/versions/1.0.2/test.json +98 -0
- package/data/craftbook-templates/da/data-viz-page/versions/1.0.2/craftbook.json +155 -0
- package/data/craftbook-templates/da/data-viz-page/versions/1.0.2/test.json +120 -0
- package/data/craftbook-templates/da/dataset-clean/versions/1.2.3/craftbook.json +113 -0
- package/data/craftbook-templates/da/dataset-clean/versions/1.2.3/test.json +98 -0
- package/data/craftbook-templates/db/db-index-tuning/versions/1.0.2/craftbook.json +160 -0
- package/data/craftbook-templates/db/db-index-tuning/versions/1.0.2/test.json +107 -0
- package/data/craftbook-templates/de/deep-security-review/versions/1.1.2/craftbook.json +223 -0
- package/data/craftbook-templates/de/deep-security-review/versions/1.1.2/test.json +160 -0
- package/data/craftbook-templates/de/dependency-audit/versions/1.1.2/craftbook.json +153 -0
- package/data/craftbook-templates/de/dependency-audit/versions/1.1.2/test.json +111 -0
- package/data/craftbook-templates/de/deploy-checklist/versions/1.0.2/craftbook.json +171 -0
- package/data/craftbook-templates/de/deploy-checklist/versions/1.0.2/test.json +168 -0
- package/data/craftbook-templates/de/design-review/versions/1.0.2/craftbook.json +153 -0
- package/data/craftbook-templates/de/design-review/versions/1.0.2/test.json +121 -0
- package/data/craftbook-templates/de/design-system-consultation/versions/2.0.4/craftbook.json +443 -0
- package/data/craftbook-templates/de/design-system-consultation/versions/2.0.4/test.json +204 -0
- package/data/craftbook-templates/di/diagram-from-text/versions/1.0.2/craftbook.json +121 -0
- package/data/craftbook-templates/di/diagram-from-text/versions/1.0.2/test.json +100 -0
- package/data/craftbook-templates/di/digest-from-feeds/versions/1.0.2/craftbook.json +158 -0
- package/data/craftbook-templates/di/digest-from-feeds/versions/1.0.2/test.json +165 -0
- package/data/craftbook-templates/do/doc-intake-pipeline/versions/1.0.2/craftbook.json +160 -0
- package/data/craftbook-templates/do/doc-intake-pipeline/versions/1.0.2/test.json +107 -0
- package/data/craftbook-templates/do/doc-rewrite/versions/1.0.2/craftbook.json +119 -0
- package/data/craftbook-templates/do/doc-rewrite/versions/1.0.2/test.json +113 -0
- package/data/craftbook-templates/do/dockerize-app/versions/1.0.2/craftbook.json +160 -0
- package/data/craftbook-templates/do/dockerize-app/versions/1.0.2/test.json +95 -0
- package/data/craftbook-templates/do/docs-site/versions/1.0.2/craftbook.json +155 -0
- package/data/craftbook-templates/do/docs-site/versions/1.0.2/test.json +100 -0
- package/data/craftbook-templates/do/documentation-drift-review/versions/1.0.2/craftbook.json +165 -0
- package/data/craftbook-templates/do/documentation-drift-review/versions/1.0.2/test.json +135 -0
- package/data/craftbook-templates/dr/drive-wrap-up/versions/1.0.2/craftbook.json +152 -0
- package/data/craftbook-templates/dr/drive-wrap-up/versions/1.0.2/test.json +107 -0
- package/data/craftbook-templates/du/due-diligence-brief/versions/1.0.2/craftbook.json +158 -0
- package/data/craftbook-templates/du/due-diligence-brief/versions/1.0.2/test.json +113 -0
- package/data/craftbook-templates/eb/ebook-compile/versions/1.0.2/craftbook.json +155 -0
- package/data/craftbook-templates/eb/ebook-compile/versions/1.0.2/test.json +100 -0
- package/data/craftbook-templates/ed/edit-notes/versions/1.0.2/craftbook.json +188 -0
- package/data/craftbook-templates/ed/edit-notes/versions/1.0.2/test.json +149 -0
- package/data/craftbook-templates/em/email-sequence/versions/1.0.2/craftbook.json +154 -0
- package/data/craftbook-templates/em/email-sequence/versions/1.0.2/test.json +100 -0
- package/data/craftbook-templates/em/email-template/versions/1.0.2/craftbook.json +155 -0
- package/data/craftbook-templates/em/email-template/versions/1.0.2/test.json +100 -0
- package/data/craftbook-templates/en/engineering-retrospective/versions/2.0.4/craftbook.json +415 -0
- package/data/craftbook-templates/en/engineering-retrospective/versions/2.0.4/test.json +194 -0
- package/data/craftbook-templates/ep/episode-plan/versions/1.0.2/craftbook.json +152 -0
- package/data/craftbook-templates/ep/episode-plan/versions/1.0.2/test.json +100 -0
- package/data/craftbook-templates/es/escalation-playbook/versions/1.0.2/craftbook.json +119 -0
- package/data/craftbook-templates/es/escalation-playbook/versions/1.0.2/test.json +113 -0
- package/data/craftbook-templates/ev/evidence-brief/versions/1.0.2/craftbook.json +158 -0
- package/data/craftbook-templates/ev/evidence-brief/versions/1.0.2/test.json +113 -0
- package/data/craftbook-templates/ex/executive-level-review/versions/2.0.4/craftbook.json +445 -0
- package/data/craftbook-templates/ex/executive-level-review/versions/2.0.4/test.json +139 -0
- package/data/craftbook-templates/ex/expense-categorize/versions/1.0.2/craftbook.json +152 -0
- package/data/craftbook-templates/ex/expense-categorize/versions/1.0.2/test.json +107 -0
- package/data/craftbook-templates/fa/fact-check/versions/1.0.2/craftbook.json +158 -0
- package/data/craftbook-templates/fa/fact-check/versions/1.0.2/test.json +113 -0
- package/data/craftbook-templates/fa/family-story-chapter/versions/1.0.2/craftbook.json +86 -0
- package/data/craftbook-templates/fa/family-story-chapter/versions/1.0.2/test.json +111 -0
- package/data/craftbook-templates/fa/faq-from-docs/versions/1.0.2/craftbook.json +119 -0
- package/data/craftbook-templates/fa/faq-from-docs/versions/1.0.2/test.json +113 -0
- package/data/craftbook-templates/fa/favicon-set/versions/1.0.2/craftbook.json +158 -0
- package/data/craftbook-templates/fa/favicon-set/versions/1.0.2/test.json +106 -0
- package/data/craftbook-templates/fe/feature-flag-release/versions/1.0.2/craftbook.json +171 -0
- package/data/craftbook-templates/fe/feature-flag-release/versions/1.0.2/test.json +165 -0
- package/data/craftbook-templates/fe/feature-flag-rollout/versions/1.0.2/craftbook.json +160 -0
- package/data/craftbook-templates/fe/feature-flag-rollout/versions/1.0.2/test.json +165 -0
- package/data/craftbook-templates/fe/feedback-widget/versions/1.0.2/craftbook.json +155 -0
- package/data/craftbook-templates/fe/feedback-widget/versions/1.0.2/test.json +100 -0
- package/data/craftbook-templates/fo/folder-to-audio/versions/1.0.2/craftbook.json +115 -0
- package/data/craftbook-templates/fo/folder-to-audio/versions/1.0.2/test.json +106 -0
- package/data/craftbook-templates/fo/forecast-model/versions/1.0.2/craftbook.json +117 -0
- package/data/craftbook-templates/fo/forecast-model/versions/1.0.2/test.json +107 -0
- package/data/craftbook-templates/fo/form-fill-batch/versions/1.0.2/craftbook.json +160 -0
- package/data/craftbook-templates/fo/form-fill-batch/versions/1.0.2/test.json +165 -0
- package/data/craftbook-templates/fo/form-wizard/versions/1.0.2/craftbook.json +122 -0
- package/data/craftbook-templates/fo/form-wizard/versions/1.0.2/test.json +113 -0
- package/data/craftbook-templates/ga/game-with-screens/versions/1.0.2/craftbook.json +180 -0
- package/data/craftbook-templates/ga/game-with-screens/versions/1.0.2/test.json +102 -0
- package/data/craftbook-templates/gl/glossary-build/versions/1.0.2/craftbook.json +152 -0
- package/data/craftbook-templates/gl/glossary-build/versions/1.0.2/test.json +113 -0
- package/data/craftbook-templates/gr/graphql-api/versions/1.0.3/craftbook.json +158 -0
- package/data/craftbook-templates/gr/graphql-api/versions/1.0.3/test.json +95 -0
- package/data/craftbook-templates/gr/grpc-service/versions/1.0.2/craftbook.json +159 -0
- package/data/craftbook-templates/gr/grpc-service/versions/1.0.2/test.json +95 -0
- package/data/craftbook-templates/ha/handbook-section/versions/1.0.2/craftbook.json +157 -0
- package/data/craftbook-templates/ha/handbook-section/versions/1.0.2/test.json +113 -0
- package/data/craftbook-templates/he/hero-image/versions/1.0.2/craftbook.json +166 -0
- package/data/craftbook-templates/he/hero-image/versions/1.0.2/test.json +106 -0
- package/data/craftbook-templates/ho/holiday-card-run/versions/1.0.2/craftbook.json +214 -0
- package/data/craftbook-templates/ho/holiday-card-run/versions/1.0.2/test.json +131 -0
- package/data/craftbook-templates/ho/hotfix-flow/versions/1.0.2/craftbook.json +194 -0
- package/data/craftbook-templates/ho/hotfix-flow/versions/1.0.2/test.json +95 -0
- package/data/craftbook-templates/ht/html-puzzle-game/versions/1.0.2/craftbook.json +162 -0
- package/data/craftbook-templates/ht/html-puzzle-game/versions/1.0.2/test.json +102 -0
- package/data/craftbook-templates/ic/icon-pack/versions/1.0.2/craftbook.json +158 -0
- package/data/craftbook-templates/ic/icon-pack/versions/1.0.2/test.json +106 -0
- package/data/craftbook-templates/id/idea-office-hours/versions/2.0.4/craftbook.json +409 -0
- package/data/craftbook-templates/id/idea-office-hours/versions/2.0.4/test.json +144 -0
- package/data/craftbook-templates/id/idle-clicker-game/versions/1.0.2/craftbook.json +162 -0
- package/data/craftbook-templates/id/idle-clicker-game/versions/1.0.2/test.json +102 -0
- package/data/craftbook-templates/im/image-batch-edit/versions/1.0.2/craftbook.json +153 -0
- package/data/craftbook-templates/im/image-batch-edit/versions/1.0.2/test.json +106 -0
- package/data/craftbook-templates/im/image-dedup-cluster/versions/1.0.2/craftbook.json +152 -0
- package/data/craftbook-templates/im/image-dedup-cluster/versions/1.0.2/test.json +106 -0
- package/data/craftbook-templates/im/image-palette-extract/versions/1.0.2/craftbook.json +121 -0
- package/data/craftbook-templates/im/image-palette-extract/versions/1.0.2/test.json +100 -0
- package/data/craftbook-templates/im/image-seo-rename/versions/1.0.2/craftbook.json +117 -0
- package/data/craftbook-templates/im/image-seo-rename/versions/1.0.2/test.json +106 -0
- package/data/craftbook-templates/in/inbox-triage/versions/1.0.2/craftbook.json +152 -0
- package/data/craftbook-templates/in/inbox-triage/versions/1.0.2/test.json +107 -0
- package/data/craftbook-templates/in/incident-comms-templates/versions/1.0.2/craftbook.json +119 -0
- package/data/craftbook-templates/in/incident-comms-templates/versions/1.0.2/test.json +113 -0
- package/data/craftbook-templates/in/incident-postmortem/versions/1.0.2/craftbook.json +170 -0
- package/data/craftbook-templates/in/incident-postmortem/versions/1.0.2/test.json +112 -0
- package/data/craftbook-templates/in/insurance-inventory/versions/1.0.2/craftbook.json +165 -0
- package/data/craftbook-templates/in/insurance-inventory/versions/1.0.2/test.json +124 -0
- package/data/craftbook-templates/in/interactive-quiz/versions/1.0.2/craftbook.json +155 -0
- package/data/craftbook-templates/in/interactive-quiz/versions/1.0.2/test.json +102 -0
- package/data/craftbook-templates/in/investigate-root-cause/versions/1.0.2/craftbook.json +153 -0
- package/data/craftbook-templates/in/investigate-root-cause/versions/1.0.2/test.json +113 -0
- package/data/craftbook-templates/in/invitation-design/versions/1.0.2/craftbook.json +140 -0
- package/data/craftbook-templates/in/invitation-design/versions/1.0.2/test.json +124 -0
- package/data/craftbook-templates/in/invoice-generator/versions/1.0.2/craftbook.json +122 -0
- package/data/craftbook-templates/in/invoice-generator/versions/1.0.2/test.json +100 -0
- package/data/craftbook-templates/in/invoice-run/versions/1.1.2/craftbook.json +211 -0
- package/data/craftbook-templates/in/invoice-run/versions/1.1.2/test.json +143 -0
- package/data/craftbook-templates/index.json +1 -1
- package/data/craftbook-templates/it/item-intake/versions/1.0.2/craftbook.json +152 -0
- package/data/craftbook-templates/it/item-intake/versions/1.0.2/test.json +148 -0
- package/data/craftbook-templates/ju/juice-pass/versions/1.0.2/craftbook.json +128 -0
- package/data/craftbook-templates/ju/juice-pass/versions/1.0.2/test.json +119 -0
- package/data/craftbook-templates/kn/knowledge-base-article/versions/1.0.2/craftbook.json +155 -0
- package/data/craftbook-templates/kn/knowledge-base-article/versions/1.0.2/test.json +113 -0
- package/data/craftbook-templates/kp/kpi-scorecard/versions/1.0.2/craftbook.json +160 -0
- package/data/craftbook-templates/kp/kpi-scorecard/versions/1.0.2/test.json +100 -0
- package/data/craftbook-templates/la/landing-copy/versions/1.0.2/craftbook.json +155 -0
- package/data/craftbook-templates/la/landing-copy/versions/1.0.2/test.json +113 -0
- package/data/craftbook-templates/la/landing-page/versions/1.0.2/craftbook.json +196 -0
- package/data/craftbook-templates/la/landing-page/versions/1.0.2/test.json +100 -0
- package/data/craftbook-templates/le/lead-enrichment/versions/1.0.2/craftbook.json +152 -0
- package/data/craftbook-templates/le/lead-enrichment/versions/1.0.2/test.json +107 -0
- package/data/craftbook-templates/li/library-package/versions/1.0.2/craftbook.json +159 -0
- package/data/craftbook-templates/li/library-package/versions/1.0.2/test.json +95 -0
- package/data/craftbook-templates/li/literature-review/versions/1.0.2/craftbook.json +158 -0
- package/data/craftbook-templates/li/literature-review/versions/1.0.2/test.json +113 -0
- package/data/craftbook-templates/li/live-browser-qa/versions/1.0.2/craftbook.json +153 -0
- package/data/craftbook-templates/li/live-browser-qa/versions/1.0.2/test.json +165 -0
- package/data/craftbook-templates/lo/localize-content/versions/1.0.2/craftbook.json +155 -0
- package/data/craftbook-templates/lo/localize-content/versions/1.0.2/test.json +113 -0
- package/data/craftbook-templates/lo/logo-set/versions/1.0.2/craftbook.json +158 -0
- package/data/craftbook-templates/lo/logo-set/versions/1.0.2/test.json +106 -0
- package/data/craftbook-templates/ma/market-scan/versions/1.0.2/craftbook.json +158 -0
- package/data/craftbook-templates/ma/market-scan/versions/1.0.2/test.json +213 -0
- package/data/craftbook-templates/me/meeting-minutes/versions/1.0.2/craftbook.json +120 -0
- package/data/craftbook-templates/me/meeting-minutes/versions/1.0.2/test.json +113 -0
- package/data/craftbook-templates/me/meeting-notes-to-actions/versions/1.0.2/craftbook.json +119 -0
- package/data/craftbook-templates/me/meeting-notes-to-actions/versions/1.0.2/test.json +113 -0
- package/data/craftbook-templates/me/meeting-prep-brief/versions/1.0.2/craftbook.json +119 -0
- package/data/craftbook-templates/me/meeting-prep-brief/versions/1.0.2/test.json +187 -0
- package/data/craftbook-templates/me/meeting-summary-audio/versions/1.0.2/craftbook.json +121 -0
- package/data/craftbook-templates/me/meeting-summary-audio/versions/1.0.2/test.json +106 -0
- package/data/craftbook-templates/me/memory-prompt-session/versions/1.0.2/craftbook.json +127 -0
- package/data/craftbook-templates/me/memory-prompt-session/versions/1.0.2/test.json +115 -0
- package/data/craftbook-templates/me/message-queue-consumer/versions/1.0.2/craftbook.json +159 -0
- package/data/craftbook-templates/me/message-queue-consumer/versions/1.0.2/test.json +95 -0
- package/data/craftbook-templates/mi/micro-game-jam/versions/1.0.2/craftbook.json +129 -0
- package/data/craftbook-templates/mi/micro-game-jam/versions/1.0.2/test.json +102 -0
- package/data/craftbook-templates/mo/mock-interview/versions/1.0.2/craftbook.json +151 -0
- package/data/craftbook-templates/mo/mock-interview/versions/1.0.2/test.json +113 -0
- package/data/craftbook-templates/mo/mod-scaffold/versions/1.0.2/craftbook.json +168 -0
- package/data/craftbook-templates/mo/mod-scaffold/versions/1.0.2/test.json +136 -0
- package/data/craftbook-templates/mo/monitor-and-alert/versions/1.0.2/craftbook.json +170 -0
- package/data/craftbook-templates/mo/monitor-and-alert/versions/1.0.2/test.json +200 -0
- package/data/craftbook-templates/mo/month-close/versions/1.0.2/craftbook.json +152 -0
- package/data/craftbook-templates/mo/month-close/versions/1.0.2/test.json +100 -0
- package/data/craftbook-templates/mo/monthly-recording-review/versions/1.0.2/craftbook.json +152 -0
- package/data/craftbook-templates/mo/monthly-recording-review/versions/1.0.2/test.json +120 -0
- package/data/craftbook-templates/mo/moodboard/versions/1.0.2/craftbook.json +121 -0
- package/data/craftbook-templates/mo/moodboard/versions/1.0.2/test.json +106 -0
- package/data/craftbook-templates/mo/morning-brief/versions/1.0.2/craftbook.json +119 -0
- package/data/craftbook-templates/mo/morning-brief/versions/1.0.2/test.json +228 -0
- package/data/craftbook-templates/mo/morning-report/versions/1.0.2/craftbook.json +164 -0
- package/data/craftbook-templates/mo/morning-report/versions/1.0.2/test.json +253 -0
- package/data/craftbook-templates/mu/music-metadata-tag/versions/1.0.2/craftbook.json +113 -0
- package/data/craftbook-templates/mu/music-metadata-tag/versions/1.0.2/test.json +106 -0
- package/data/craftbook-templates/na/narrated-slideshow/versions/1.1.2/craftbook.json +193 -0
- package/data/craftbook-templates/na/narrated-slideshow/versions/1.1.2/test.json +89 -0
- package/data/craftbook-templates/ne/newsletter-issue/versions/1.0.2/craftbook.json +155 -0
- package/data/craftbook-templates/ne/newsletter-issue/versions/1.0.2/test.json +113 -0
- package/data/craftbook-templates/no/notification-router/versions/1.0.2/craftbook.json +170 -0
- package/data/craftbook-templates/no/notification-router/versions/1.0.2/test.json +165 -0
- package/data/craftbook-templates/oc/ocr-extract/versions/1.0.2/craftbook.json +149 -0
- package/data/craftbook-templates/oc/ocr-extract/versions/1.0.2/test.json +106 -0
- package/data/craftbook-templates/of/offer-compare/versions/1.0.2/craftbook.json +118 -0
- package/data/craftbook-templates/of/offer-compare/versions/1.0.2/test.json +113 -0
- package/data/craftbook-templates/on/onboarding-checklist/versions/1.0.2/craftbook.json +119 -0
- package/data/craftbook-templates/on/onboarding-checklist/versions/1.0.2/test.json +113 -0
- package/data/craftbook-templates/on/onboarding-flow/versions/1.0.2/craftbook.json +155 -0
- package/data/craftbook-templates/on/onboarding-flow/versions/1.0.2/test.json +100 -0
- package/data/craftbook-templates/on/oncall-handoff/versions/1.0.2/craftbook.json +119 -0
- package/data/craftbook-templates/on/oncall-handoff/versions/1.0.2/test.json +113 -0
- package/data/craftbook-templates/on/one-pager/versions/1.0.2/craftbook.json +155 -0
- package/data/craftbook-templates/on/one-pager/versions/1.0.2/test.json +113 -0
- package/data/craftbook-templates/op/ops-runbook/versions/1.0.2/craftbook.json +124 -0
- package/data/craftbook-templates/op/ops-runbook/versions/1.0.2/test.json +107 -0
- package/data/craftbook-templates/pa/page-spread/versions/1.0.2/craftbook.json +94 -0
- package/data/craftbook-templates/pa/page-spread/versions/1.0.2/test.json +135 -0
- package/data/craftbook-templates/pa/parser-grammar/versions/1.0.2/craftbook.json +159 -0
- package/data/craftbook-templates/pa/parser-grammar/versions/1.0.2/test.json +95 -0
- package/data/craftbook-templates/pe/perf-audit/versions/1.0.2/craftbook.json +153 -0
- package/data/craftbook-templates/pe/perf-audit/versions/1.0.2/test.json +165 -0
- package/data/craftbook-templates/pe/perf-optimization/versions/1.0.2/craftbook.json +160 -0
- package/data/craftbook-templates/pe/perf-optimization/versions/1.0.2/test.json +95 -0
- package/data/craftbook-templates/pe/pest-diagnosis/versions/1.0.2/craftbook.json +152 -0
- package/data/craftbook-templates/pe/pest-diagnosis/versions/1.0.2/test.json +125 -0
- package/data/craftbook-templates/ph/photo-cull/versions/1.0.2/craftbook.json +152 -0
- package/data/craftbook-templates/ph/photo-cull/versions/1.0.2/test.json +106 -0
- package/data/craftbook-templates/ph/physics-toy/versions/1.0.2/craftbook.json +122 -0
- package/data/craftbook-templates/ph/physics-toy/versions/1.0.2/test.json +102 -0
- package/data/craftbook-templates/pi/pitch-deck/versions/1.0.2/craftbook.json +153 -0
- package/data/craftbook-templates/pi/pitch-deck/versions/1.0.2/test.json +100 -0
- package/data/craftbook-templates/pl/playtest-report/versions/1.0.2/craftbook.json +152 -0
- package/data/craftbook-templates/pl/playtest-report/versions/1.0.2/test.json +114 -0
- package/data/craftbook-templates/po/podcast-chaptering/versions/1.0.2/craftbook.json +152 -0
- package/data/craftbook-templates/po/podcast-chaptering/versions/1.0.2/test.json +106 -0
- package/data/craftbook-templates/po/portfolio-site/versions/1.0.2/craftbook.json +163 -0
- package/data/craftbook-templates/po/portfolio-site/versions/1.0.2/test.json +100 -0
- package/data/craftbook-templates/po/powerpoint-deck/versions/1.7.3/craftbook.json +9 -8
- package/data/craftbook-templates/po/powerpoint-deck/versions/1.7.4/craftbook.json +397 -0
- package/data/craftbook-templates/po/powerpoint-deck/versions/1.7.4/test.json +242 -0
- package/data/craftbook-templates/pr/pr-security-review/versions/1.0.2/craftbook.json +153 -0
- package/data/craftbook-templates/pr/pr-security-review/versions/1.0.2/test.json +113 -0
- package/data/craftbook-templates/pr/practice-exam/versions/1.0.2/craftbook.json +171 -0
- package/data/craftbook-templates/pr/practice-exam/versions/1.0.2/test.json +120 -0
- package/data/craftbook-templates/pr/practice-session/versions/1.0.2/craftbook.json +127 -0
- package/data/craftbook-templates/pr/practice-session/versions/1.0.2/test.json +117 -0
- package/data/craftbook-templates/pr/pre-departure-countdown/versions/1.0.2/craftbook.json +152 -0
- package/data/craftbook-templates/pr/pre-departure-countdown/versions/1.0.2/test.json +100 -0
- package/data/craftbook-templates/pr/press-release/versions/1.0.2/craftbook.json +155 -0
- package/data/craftbook-templates/pr/press-release/versions/1.0.2/test.json +359 -0
- package/data/craftbook-templates/pr/price-tracker/versions/1.0.2/craftbook.json +121 -0
- package/data/craftbook-templates/pr/price-tracker/versions/1.0.2/test.json +153 -0
- package/data/craftbook-templates/pr/pricing-page/versions/1.0.2/craftbook.json +196 -0
- package/data/craftbook-templates/pr/pricing-page/versions/1.0.2/test.json +100 -0
- package/data/craftbook-templates/pr/product-descriptions/versions/1.0.2/craftbook.json +117 -0
- package/data/craftbook-templates/pr/product-descriptions/versions/1.0.2/test.json +113 -0
- package/data/craftbook-templates/pr/proposal-sow/versions/1.0.2/craftbook.json +155 -0
- package/data/craftbook-templates/pr/proposal-sow/versions/1.0.2/test.json +113 -0
- package/data/craftbook-templates/pu/pull-request-review/versions/1.7.1/craftbook.json +273 -0
- package/data/craftbook-templates/pu/pull-request-review/versions/1.7.1/test.json +141 -0
- package/data/craftbook-templates/pu/pull-request-review/versions/1.7.2/craftbook.json +279 -0
- package/data/craftbook-templates/pu/pull-request-review/versions/1.7.2/test.json +144 -0
- package/data/craftbook-templates/pu/puzzle-pack-layout/versions/1.0.2/craftbook.json +133 -0
- package/data/craftbook-templates/pu/puzzle-pack-layout/versions/1.0.2/test.json +126 -0
- package/data/craftbook-templates/pw/pwa-offline/versions/1.0.2/craftbook.json +167 -0
- package/data/craftbook-templates/pw/pwa-offline/versions/1.0.2/test.json +100 -0
- package/data/craftbook-templates/qu/quarterly-summary/versions/1.0.2/craftbook.json +152 -0
- package/data/craftbook-templates/qu/quarterly-summary/versions/1.0.2/test.json +116 -0
- package/data/craftbook-templates/re/reading-list/versions/1.0.2/craftbook.json +119 -0
- package/data/craftbook-templates/re/reading-list/versions/1.0.2/test.json +113 -0
- package/data/craftbook-templates/re/receipt-intake/versions/1.0.2/craftbook.json +152 -0
- package/data/craftbook-templates/re/receipt-intake/versions/1.0.2/test.json +152 -0
- package/data/craftbook-templates/re/receipt-ocr-ledger/versions/1.0.2/craftbook.json +152 -0
- package/data/craftbook-templates/re/receipt-ocr-ledger/versions/1.0.2/test.json +107 -0
- package/data/craftbook-templates/re/reception-report/versions/1.0.1/craftbook.json +177 -0
- package/data/craftbook-templates/re/reception-report/versions/1.0.1/test.json +169 -0
- package/data/craftbook-templates/re/recipe-capture/versions/1.0.2/craftbook.json +152 -0
- package/data/craftbook-templates/re/recipe-capture/versions/1.0.2/test.json +131 -0
- package/data/craftbook-templates/re/record-a-relative/versions/1.0.2/craftbook.json +127 -0
- package/data/craftbook-templates/re/record-a-relative/versions/1.0.2/test.json +113 -0
- package/data/craftbook-templates/re/recurring-invoice-run/versions/1.0.2/craftbook.json +160 -0
- package/data/craftbook-templates/re/recurring-invoice-run/versions/1.0.2/test.json +107 -0
- package/data/craftbook-templates/re/refactor-module/versions/1.0.3/craftbook.json +160 -0
- package/data/craftbook-templates/re/refactor-module/versions/1.0.3/test.json +95 -0
- package/data/craftbook-templates/re/regex-builder/versions/1.0.2/craftbook.json +159 -0
- package/data/craftbook-templates/re/regex-builder/versions/1.0.2/test.json +95 -0
- package/data/craftbook-templates/re/release-announcement/versions/1.0.2/craftbook.json +171 -0
- package/data/craftbook-templates/re/release-announcement/versions/1.0.2/test.json +205 -0
- package/data/craftbook-templates/re/release-artifact-sanity-check/versions/1.0.2/craftbook.json +226 -0
- package/data/craftbook-templates/re/release-artifact-sanity-check/versions/1.0.2/test.json +141 -0
- package/data/craftbook-templates/re/release-notes/versions/1.0.2/craftbook.json +171 -0
- package/data/craftbook-templates/re/release-notes/versions/1.0.2/test.json +114 -0
- package/data/craftbook-templates/re/release-pipeline-ci/versions/1.0.2/craftbook.json +159 -0
- package/data/craftbook-templates/re/release-pipeline-ci/versions/1.0.2/test.json +165 -0
- package/data/craftbook-templates/re/release-readiness-review/versions/1.0.2/craftbook.json +153 -0
- package/data/craftbook-templates/re/release-readiness-review/versions/1.0.2/test.json +113 -0
- package/data/craftbook-templates/re/reliability-review/versions/1.0.2/craftbook.json +165 -0
- package/data/craftbook-templates/re/reliability-review/versions/1.0.2/test.json +115 -0
- package/data/craftbook-templates/re/report-pdf/versions/1.1.2/craftbook.json +185 -0
- package/data/craftbook-templates/re/report-pdf/versions/1.1.2/test.json +101 -0
- package/data/craftbook-templates/re/research-report/versions/1.0.2/craftbook.json +158 -0
- package/data/craftbook-templates/re/research-report/versions/1.0.2/test.json +113 -0
- package/data/craftbook-templates/re/research-to-document/versions/1.2.2/craftbook.json +228 -0
- package/data/craftbook-templates/re/research-to-document/versions/1.2.2/test.json +243 -0
- package/data/craftbook-templates/re/rest-api/versions/1.0.3/craftbook.json +159 -0
- package/data/craftbook-templates/re/rest-api/versions/1.0.3/test.json +390 -0
- package/data/craftbook-templates/re/resume-cv/versions/1.0.2/craftbook.json +155 -0
- package/data/craftbook-templates/re/resume-cv/versions/1.0.2/test.json +100 -0
- package/data/craftbook-templates/ro/rollback-plan/versions/1.0.2/craftbook.json +171 -0
- package/data/craftbook-templates/ro/rollback-plan/versions/1.0.2/test.json +165 -0
- package/data/craftbook-templates/ro/root-cause-investigation/versions/2.0.4/craftbook.json +425 -0
- package/data/craftbook-templates/ro/root-cause-investigation/versions/2.0.4/test.json +157 -0
- package/data/craftbook-templates/ro/rough-cut-assembly/versions/1.0.3/craftbook.json +179 -0
- package/data/craftbook-templates/ro/rough-cut-assembly/versions/1.0.3/test.json +140 -0
- package/data/craftbook-templates/ru/runbook/versions/1.0.2/craftbook.json +157 -0
- package/data/craftbook-templates/ru/runbook/versions/1.0.2/test.json +121 -0
- package/data/craftbook-templates/sc/schema-migration/versions/1.0.2/craftbook.json +156 -0
- package/data/craftbook-templates/sc/schema-migration/versions/1.0.2/test.json +106 -0
- package/data/craftbook-templates/sc/scrape-to-structured/versions/1.0.3/craftbook.json +152 -0
- package/data/craftbook-templates/sc/scrape-to-structured/versions/1.0.3/test.json +165 -0
- package/data/craftbook-templates/sc/script-automation/versions/1.0.2/craftbook.json +160 -0
- package/data/craftbook-templates/sc/script-automation/versions/1.0.2/test.json +165 -0
- package/data/craftbook-templates/sd/sdk-wrapper/versions/1.0.3/craftbook.json +159 -0
- package/data/craftbook-templates/sd/sdk-wrapper/versions/1.0.3/test.json +93 -0
- package/data/craftbook-templates/se/seasonal-maintenance-sweep/versions/1.0.2/craftbook.json +152 -0
- package/data/craftbook-templates/se/seasonal-maintenance-sweep/versions/1.0.2/test.json +113 -0
- package/data/craftbook-templates/se/security-architecture-review/versions/2.0.4/craftbook.json +452 -0
- package/data/craftbook-templates/se/security-architecture-review/versions/2.0.4/test.json +157 -0
- package/data/craftbook-templates/se/seo-meta-pack/versions/1.0.2/craftbook.json +117 -0
- package/data/craftbook-templates/se/seo-meta-pack/versions/1.0.2/test.json +100 -0
- package/data/craftbook-templates/so/social-digest/versions/1.0.1/craftbook.json +140 -0
- package/data/craftbook-templates/so/social-digest/versions/1.0.1/test.json +169 -0
- package/data/craftbook-templates/so/social-thread/versions/1.0.2/craftbook.json +119 -0
- package/data/craftbook-templates/so/social-thread/versions/1.0.2/test.json +113 -0
- package/data/craftbook-templates/so/source-quality-audit/versions/1.0.2/craftbook.json +152 -0
- package/data/craftbook-templates/so/source-quality-audit/versions/1.0.2/test.json +161 -0
- package/data/craftbook-templates/sp/spa-dashboard/versions/1.0.2/craftbook.json +155 -0
- package/data/craftbook-templates/sp/spa-dashboard/versions/1.0.2/test.json +100 -0
- package/data/craftbook-templates/sp/spec-authoring/versions/2.0.4/craftbook.json +448 -0
- package/data/craftbook-templates/sp/spec-authoring/versions/2.0.4/test.json +165 -0
- package/data/craftbook-templates/sp/spec-doc/versions/1.0.2/craftbook.json +155 -0
- package/data/craftbook-templates/sp/spec-doc/versions/1.0.2/test.json +107 -0
- package/data/craftbook-templates/sp/spreadsheet-model/versions/1.0.2/craftbook.json +121 -0
- package/data/craftbook-templates/sp/spreadsheet-model/versions/1.0.2/test.json +163 -0
- package/data/craftbook-templates/sp/sprite-sheet/versions/1.0.2/craftbook.json +149 -0
- package/data/craftbook-templates/sp/sprite-sheet/versions/1.0.2/test.json +106 -0
- package/data/craftbook-templates/sq/sql-analysis/versions/1.0.2/craftbook.json +121 -0
- package/data/craftbook-templates/sq/sql-analysis/versions/1.0.2/test.json +107 -0
- package/data/craftbook-templates/st/standup-summary/versions/1.0.2/craftbook.json +119 -0
- package/data/craftbook-templates/st/standup-summary/versions/1.0.2/test.json +113 -0
- package/data/craftbook-templates/st/state-machine/versions/1.0.2/craftbook.json +159 -0
- package/data/craftbook-templates/st/state-machine/versions/1.0.2/test.json +95 -0
- package/data/craftbook-templates/st/status-report/versions/1.0.2/craftbook.json +158 -0
- package/data/craftbook-templates/st/status-report/versions/1.0.2/test.json +113 -0
- package/data/craftbook-templates/su/subscription-audit/versions/1.0.2/craftbook.json +152 -0
- package/data/craftbook-templates/su/subscription-audit/versions/1.0.2/test.json +107 -0
- package/data/craftbook-templates/su/subtitle-generator/versions/1.0.2/craftbook.json +140 -0
- package/data/craftbook-templates/su/subtitle-generator/versions/1.0.2/test.json +106 -0
- package/data/craftbook-templates/su/summarize-long/versions/1.0.2/craftbook.json +119 -0
- package/data/craftbook-templates/su/summarize-long/versions/1.0.2/test.json +113 -0
- package/data/craftbook-templates/su/survey-analysis/versions/1.0.2/craftbook.json +153 -0
- package/data/craftbook-templates/su/survey-analysis/versions/1.0.2/test.json +107 -0
- package/data/craftbook-templates/sv/svg-animation/versions/1.0.2/craftbook.json +122 -0
- package/data/craftbook-templates/sv/svg-animation/versions/1.0.2/test.json +100 -0
- package/data/craftbook-templates/ta/tailor-resume/versions/1.0.2/craftbook.json +126 -0
- package/data/craftbook-templates/ta/tailor-resume/versions/1.0.2/test.json +100 -0
- package/data/craftbook-templates/te/technical-documentation/versions/2.0.4/craftbook.json +420 -0
- package/data/craftbook-templates/te/technical-documentation/versions/2.0.4/test.json +177 -0
- package/data/craftbook-templates/te/test-coverage-review/versions/1.1.2/craftbook.json +153 -0
- package/data/craftbook-templates/te/test-coverage-review/versions/1.1.2/test.json +116 -0
- package/data/craftbook-templates/te/test-suite-backfill/versions/1.0.2/craftbook.json +132 -0
- package/data/craftbook-templates/te/test-suite-backfill/versions/1.0.2/test.json +95 -0
- package/data/craftbook-templates/th/thank-you-batch/versions/1.0.2/craftbook.json +155 -0
- package/data/craftbook-templates/th/thank-you-batch/versions/1.0.2/test.json +144 -0
- package/data/craftbook-templates/th/thank-you-sweep/versions/1.0.2/craftbook.json +155 -0
- package/data/craftbook-templates/th/thank-you-sweep/versions/1.0.2/test.json +145 -0
- package/data/craftbook-templates/th/threat-model/versions/1.0.2/craftbook.json +153 -0
- package/data/craftbook-templates/th/threat-model/versions/1.0.2/test.json +113 -0
- package/data/craftbook-templates/th/thumbnail-generator/versions/1.0.2/craftbook.json +115 -0
- package/data/craftbook-templates/th/thumbnail-generator/versions/1.0.2/test.json +106 -0
- package/data/craftbook-templates/ti/tileset-batch/versions/1.0.2/craftbook.json +172 -0
- package/data/craftbook-templates/ti/tileset-batch/versions/1.0.2/test.json +162 -0
- package/data/craftbook-templates/to/tone-rewrite/versions/1.0.2/craftbook.json +119 -0
- package/data/craftbook-templates/to/tone-rewrite/versions/1.0.2/test.json +113 -0
- package/data/craftbook-templates/to/topic-explainer/versions/1.0.2/craftbook.json +152 -0
- package/data/craftbook-templates/to/topic-explainer/versions/1.0.2/test.json +113 -0
- package/data/craftbook-templates/tr/transcribe-and-shownotes/versions/1.0.2/craftbook.json +127 -0
- package/data/craftbook-templates/tr/transcribe-and-shownotes/versions/1.0.2/test.json +101 -0
- package/data/craftbook-templates/tr/transcribe-audio/versions/1.0.2/craftbook.json +119 -0
- package/data/craftbook-templates/tr/transcribe-audio/versions/1.0.2/test.json +106 -0
- package/data/craftbook-templates/tr/transcribe-index/versions/1.0.2/craftbook.json +183 -0
- package/data/craftbook-templates/tr/transcribe-index/versions/1.0.2/test.json +154 -0
- package/data/craftbook-templates/ty/type-safety-pass/versions/1.0.2/craftbook.json +160 -0
- package/data/craftbook-templates/ty/type-safety-pass/versions/1.0.2/test.json +95 -0
- package/data/craftbook-templates/ve/version-bump/versions/1.0.2/craftbook.json +167 -0
- package/data/craftbook-templates/ve/version-bump/versions/1.0.2/test.json +95 -0
- package/data/craftbook-templates/vi/video-storyboard/versions/1.0.2/craftbook.json +121 -0
- package/data/craftbook-templates/vi/video-storyboard/versions/1.0.2/test.json +106 -0
- package/data/craftbook-templates/vi/visit-prep/versions/1.0.2/craftbook.json +152 -0
- package/data/craftbook-templates/vi/visit-prep/versions/1.0.2/test.json +100 -0
- package/data/craftbook-templates/vo/voiceover-script/versions/1.0.2/craftbook.json +119 -0
- package/data/craftbook-templates/vo/voiceover-script/versions/1.0.2/test.json +106 -0
- package/data/craftbook-templates/we/weak-spot-drill/versions/1.0.2/craftbook.json +166 -0
- package/data/craftbook-templates/we/weak-spot-drill/versions/1.0.2/test.json +127 -0
- package/data/craftbook-templates/we/web-app-crud/versions/1.0.2/craftbook.json +155 -0
- package/data/craftbook-templates/we/web-app-crud/versions/1.0.2/test.json +100 -0
- package/data/craftbook-templates/we/web-component/versions/1.0.2/craftbook.json +122 -0
- package/data/craftbook-templates/we/web-component/versions/1.0.2/test.json +100 -0
- package/data/craftbook-templates/we/webhook-handler/versions/1.0.2/craftbook.json +159 -0
- package/data/craftbook-templates/we/webhook-handler/versions/1.0.2/test.json +165 -0
- package/data/craftbook-templates/we/week-plan/versions/1.0.2/craftbook.json +152 -0
- package/data/craftbook-templates/we/week-plan/versions/1.0.2/test.json +258 -0
- package/data/craftbook-templates/we/weekly-menu-plan/versions/1.0.2/craftbook.json +152 -0
- package/data/craftbook-templates/we/weekly-menu-plan/versions/1.0.2/test.json +100 -0
- package/data/craftbook-templates/we/weekly-pipeline-review/versions/1.0.2/craftbook.json +118 -0
- package/data/craftbook-templates/we/weekly-pipeline-review/versions/1.0.2/test.json +107 -0
- package/data/craftbook-templates/we/weekly-review/versions/1.0.2/craftbook.json +119 -0
- package/data/craftbook-templates/we/weekly-review/versions/1.0.2/test.json +113 -0
- package/data/craftbook-templates/we/weekly-walkthrough/versions/1.0.2/craftbook.json +152 -0
- package/data/craftbook-templates/we/weekly-walkthrough/versions/1.0.2/test.json +141 -0
- package/data/craftbook-templates/wh/whitepaper/versions/1.0.2/craftbook.json +153 -0
- package/data/craftbook-templates/wh/whitepaper/versions/1.0.2/test.json +113 -0
- package/data/craftbook-templates/ye/year-in-review/versions/1.0.2/craftbook.json +127 -0
- package/data/craftbook-templates/ye/year-in-review/versions/1.0.2/test.json +148 -0
- package/data/craftbook-templates/yo/youtube-chapters-seo/versions/1.0.2/craftbook.json +146 -0
- package/data/craftbook-templates/yo/youtube-chapters-seo/versions/1.0.2/test.json +106 -0
- package/package.json +1 -1
- package/schemas/craftbook-doc.schema.json +4 -2
- package/schemas/craftbook-template-version.schema.json +4 -2
|
@@ -0,0 +1,390 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"title": "REST API contract and implementation",
|
|
4
|
+
"objective": "Measure the REST API craftbook shape with a deterministic bookstore API brief requiring OpenAPI, a dependency-free Node server, contract tests, pagination, auth, and error handling.",
|
|
5
|
+
"tags": [
|
|
6
|
+
"code"
|
|
7
|
+
],
|
|
8
|
+
"prompt": "In the `REST API Eval` project, read `source/api-brief.md` and write `openapi.yaml`, `server.mjs`, `contract-test.mjs`, and `README.md`. Keep the implementation offline and dependency-free using Node ESM and `node:http` in the server only; do not use `require`, `node-fetch`, Express, Fastify, `/api/v1` prefixes, or package installs. Implement the exact paths GET /books, GET /books/{id}, and POST /books. `openapi.yaml` must use OpenAPI `3.1.0`, define `components.securitySchemes.bearerAuth`, apply that bearer auth to POST /books, define an `ErrorEnvelope` schema, and mention error codes `VALIDATION_ERROR` and `BOOK_NOT_FOUND`. `server.mjs` must export `createBookstoreServer()` without starting the listener itself, must enforce exact `Authorization: Bearer eval-token` on POST /books with 401 for missing/wrong tokens, must not import from `./server` or `./server.mjs`, and must not replace the native `server.close` method. In `server.mjs`, import the HTTP module normally at top level with `import http from 'node:http'` or `import { createServer } from 'node:http'`; do not use `await import('node:http')`. The ban on `node:http` imports applies only to `contract-test.mjs`. In every `server.mjs` route branch, send exactly one response per request: after any `sendResponse`, `sendJson`, `res.writeHead`, or `res.end` for auth, validation, not-found, or success, immediately `return` so the code never falls through into another response. `contract-test.mjs` must be a complete runnable file with no placeholder elisions like `... rest of file`. It must import `createBookstoreServer` from exactly `./server.mjs`, import assertions from `node:assert/strict`, must not import `node:http`, must call `createBookstoreServer()` and run the tests at top level when invoked with `node contract-test.mjs`, call `server.listen(0)` itself, resolve the assigned port inside the `listen(0)` callback using `server.address().port`, build every request URL from that resolved `baseUrl` including the assigned port, and never use `new URL(path, 'http://localhost')` because it drops the port. Use Node's built-in global `fetch()` directly or through a helper that calls `globalThis.fetch(url, options)`, declare any helper that awaits `fetch()` as `async`, pass POST `method`, `headers`, and `body` options through to `fetch`, and make the helper return status plus parsed JSON for all HTTP statuses instead of throwing on expected 400/401/404 responses. Run and log pagination/not-found/auth failure/validation failure/create success checks, include an explicit pagination request using `/books?limit=2` or equivalent URLSearchParams limit=2, run non-mutating checks before the create-success mutation or otherwise isolate state, and close the server cleanly. Do not wait for a `listening` event after `listen()` has already fired. Do not define or export tests that are never called. If you catch a test failure, log `error.stack ?? error` before rethrowing or setting a non-zero exit code; do not print only a generic failure banner. `README.md` must include a Usage section with these exact command lines: `node server.mjs` and `node contract-test.mjs`. It must also list GET /books, GET /books/{id}, POST /books, and show `Authorization: Bearer eval-token` for POST.",
|
|
9
|
+
"setup": {
|
|
10
|
+
"projectName": "REST API Eval",
|
|
11
|
+
"about": "Self-contained eval project for REST API craftbook behavior. The API brief is in workspace/source/api-brief.md and no live service or package install is needed.",
|
|
12
|
+
"missionObjectives": "Build a dependency-free API contract, server stub, tests, and run notes from the seeded brief. Do not use external services or credentials.",
|
|
13
|
+
"files": [
|
|
14
|
+
{
|
|
15
|
+
"path": "source/api-brief.md",
|
|
16
|
+
"content": "# Bookstore API brief\n\nResource: books for a small local bookstore.\nOpenAPI version: 3.1.0.\nSeed books: bk-1 The Left Hand of Darkness by au-1; bk-2 Parable of the Sower by au-2; bk-3 A Wizard of Earthsea by au-1.\nEndpoints:\n- GET /books?limit=&offset= returns `{ items, pagination: { limit, offset, total, hasMore } }`.\n- GET /books/{id} returns one book or 404 `{ error: { code: \"BOOK_NOT_FOUND\", message } }`.\n- POST /books creates a book and requires `Authorization: Bearer eval-token`.\n- POST body requires title and authorId. Missing fields return 400 `{ error: { code: \"VALIDATION_ERROR\", message } }`.\nOpenAPI auth requirement: define `components.securitySchemes.bearerAuth` with HTTP bearer auth and add `security: [{ bearerAuth: [] }]` to POST /books.\nOpenAPI must define an `ErrorEnvelope` schema shaped like `{ error: { code, message } }` and must mention `VALIDATION_ERROR` and `BOOK_NOT_FOUND` as concrete error codes.\nImplementation constraints: Node ESM, built-in modules only, no Express/Fastify/package install, server exports a `createBookstoreServer()` helper for tests and does not call listen() inside that helper. `server.mjs` must import the HTTP module normally at top level, such as `import http from \"node:http\"` or `import { createServer } from \"node:http\"`; do not use `await import(\"node:http\")`. `server.mjs` must enforce exact `Authorization: Bearer eval-token` on POST /books and return 401 for missing or wrong tokens. Every route branch in `server.mjs` must send exactly one response per request; after an auth, validation, not-found, or success response, immediately `return` so later code cannot write headers again. `server.mjs` must not import itself or import from `./server` or `./server.mjs`, and must not assign or replace `server.close`.\nTests must be complete runnable files with no placeholder elisions. They must import from exactly ./server.mjs, use node:assert/strict, call createBookstoreServer(), and run the tests at top level when `node contract-test.mjs` executes. Use the built-in global fetch() directly or through a helper that calls globalThis.fetch(url, options), call server.listen(0), resolve the assigned port inside the listen callback with server.address().port, and build request URLs from that resolved baseUrl before making requests. Do not use `new URL(path, \"http://localhost\")` in contract-test.mjs because it drops the assigned port. Do not wait for a `listening` event after `listen()` has already fired. Do not import node:http, node-fetch, or replace the global fetch function. If a helper uses `await fetch(...)`, declare that helper with `async function` or as an async arrow function, and pass POST method/headers/body options through to fetch. The helper must not throw on expected 400/401/404 HTTP responses; return status plus parsed JSON so negative tests can assert error codes. Do not catch assertion failures unless you log `error.stack ?? error` and then rethrow them or set a non-zero exit code. Run and log pagination, not-found, auth failure, validation failure, and create-success checks; the pagination check must explicitly request limit=2. Do not define or export tests that are never called. Run non-mutating checks before create success, or isolate/reset server state so pagination totals do not assume the seeded count after a create. Close the server cleanly.\nREADME must include a Usage section that shows these exact command lines: `node server.mjs` and `node contract-test.mjs`. It must also list GET /books, GET /books/{id}, POST /books, and the POST header `Authorization: Bearer eval-token`."
|
|
17
|
+
}
|
|
18
|
+
],
|
|
19
|
+
"worker": {
|
|
20
|
+
"name": "Ravi",
|
|
21
|
+
"role": "Developer"
|
|
22
|
+
},
|
|
23
|
+
"craftbookParams": {
|
|
24
|
+
"workPath": "tasks/eval"
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"mocks": [],
|
|
28
|
+
"success": {
|
|
29
|
+
"summary": "The run writes a contract, dependency-free server, contract tests, and run notes covering pagination, auth, validation, and error semantics.",
|
|
30
|
+
"deliverables": [
|
|
31
|
+
{
|
|
32
|
+
"path": "openapi.yaml",
|
|
33
|
+
"kind": "yaml-spec",
|
|
34
|
+
"minBytes": 1600,
|
|
35
|
+
"checks": [
|
|
36
|
+
{
|
|
37
|
+
"kind": "contains",
|
|
38
|
+
"file": "openapi.yaml",
|
|
39
|
+
"pattern": "openapi:\\s*3\\.1"
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"kind": "contains",
|
|
43
|
+
"file": "openapi.yaml",
|
|
44
|
+
"pattern": "/books:"
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"kind": "contains",
|
|
48
|
+
"file": "openapi.yaml",
|
|
49
|
+
"pattern": "/books/\\{id\\}:"
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"kind": "contains",
|
|
53
|
+
"file": "openapi.yaml",
|
|
54
|
+
"pattern": "post:|POST",
|
|
55
|
+
"flags": "i"
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"kind": "contains",
|
|
59
|
+
"file": "openapi.yaml",
|
|
60
|
+
"pattern": "bearerAuth|Authorization",
|
|
61
|
+
"flags": "i"
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"kind": "contains",
|
|
65
|
+
"file": "openapi.yaml",
|
|
66
|
+
"pattern": "hasMore|pagination"
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"kind": "contains",
|
|
70
|
+
"file": "openapi.yaml",
|
|
71
|
+
"pattern": "ErrorEnvelope"
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"kind": "contains",
|
|
75
|
+
"file": "openapi.yaml",
|
|
76
|
+
"pattern": "VALIDATION_ERROR",
|
|
77
|
+
"label": "document VALIDATION_ERROR as a concrete error code"
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"kind": "contains",
|
|
81
|
+
"file": "openapi.yaml",
|
|
82
|
+
"pattern": "BOOK_NOT_FOUND",
|
|
83
|
+
"label": "document BOOK_NOT_FOUND as a concrete error code"
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"kind": "notContains",
|
|
87
|
+
"file": "openapi.yaml",
|
|
88
|
+
"pattern": "/api/v1",
|
|
89
|
+
"label": "use the exact bare paths /books and /books/{id}; do not add /api/v1"
|
|
90
|
+
}
|
|
91
|
+
]
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"path": "server.mjs",
|
|
95
|
+
"kind": "code-module",
|
|
96
|
+
"minBytes": 2200,
|
|
97
|
+
"checks": [
|
|
98
|
+
{
|
|
99
|
+
"kind": "esmImports",
|
|
100
|
+
"file": "server.mjs"
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"kind": "contains",
|
|
104
|
+
"file": "server.mjs",
|
|
105
|
+
"pattern": "node:http|createServer"
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
"kind": "contains",
|
|
109
|
+
"file": "server.mjs",
|
|
110
|
+
"pattern": "GET.*\\/books|\\/books",
|
|
111
|
+
"flags": "is"
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"kind": "contains",
|
|
115
|
+
"file": "server.mjs",
|
|
116
|
+
"pattern": "POST.*\\/books|method.*POST",
|
|
117
|
+
"flags": "is"
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
"kind": "contains",
|
|
121
|
+
"file": "server.mjs",
|
|
122
|
+
"pattern": "(?:authorization|authHeader)[\\s\\S]{0,1200}(?:Bearer\\s+eval-token|AUTH_TOKEN|BEARER_TOKEN|eval-token)|(?:Bearer\\s+eval-token|AUTH_TOKEN|BEARER_TOKEN|eval-token)[\\s\\S]{0,1200}(?:authorization|authHeader)",
|
|
123
|
+
"flags": "i",
|
|
124
|
+
"label": "enforce POST auth by comparing the authorization header to `Bearer eval-token`; if using a token constant, declare it once"
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
"kind": "contains",
|
|
128
|
+
"file": "server.mjs",
|
|
129
|
+
"pattern": "401|UNAUTHORIZED"
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
"kind": "contains",
|
|
133
|
+
"file": "server.mjs",
|
|
134
|
+
"pattern": "limit|offset|hasMore"
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
"kind": "contains",
|
|
138
|
+
"file": "server.mjs",
|
|
139
|
+
"pattern": "BOOK_NOT_FOUND|VALIDATION_ERROR"
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
"kind": "notContains",
|
|
143
|
+
"file": "server.mjs",
|
|
144
|
+
"pattern": "from ['\"](express|fastify)['\"]|require\\(['\"](express|fastify)['\"]",
|
|
145
|
+
"flags": "i"
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
"kind": "notContains",
|
|
149
|
+
"file": "server.mjs",
|
|
150
|
+
"pattern": "from ['\"]\\./server(?:\\.mjs)?['\"]",
|
|
151
|
+
"label": "server.mjs must not import itself; remove imports from ./server or ./server.mjs and export createBookstoreServer exactly once"
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
"kind": "notContains",
|
|
155
|
+
"file": "server.mjs",
|
|
156
|
+
"pattern": "await\\s+import\\(['\"]node:http['\"]\\)",
|
|
157
|
+
"label": "server.mjs may import node:http at top level; do not use await import(\"node:http\") inside createBookstoreServer"
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
"kind": "notContains",
|
|
161
|
+
"file": "server.mjs",
|
|
162
|
+
"pattern": "server\\.close\\s*=",
|
|
163
|
+
"label": "do not replace the native HTTP server close method; close the server from contract-test.mjs"
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
"kind": "notContains",
|
|
167
|
+
"file": "server.mjs",
|
|
168
|
+
"pattern": "/api/v1",
|
|
169
|
+
"label": "route exact bare paths /books and /books/{id}; do not add /api/v1"
|
|
170
|
+
}
|
|
171
|
+
]
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
"path": "contract-test.mjs",
|
|
175
|
+
"kind": "code-with-tests",
|
|
176
|
+
"minBytes": 1500,
|
|
177
|
+
"checks": [
|
|
178
|
+
{
|
|
179
|
+
"kind": "esmImports",
|
|
180
|
+
"file": "contract-test.mjs"
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
"kind": "contains",
|
|
184
|
+
"file": "contract-test.mjs",
|
|
185
|
+
"pattern": "import\\s+(?:assert|\\*\\s+as\\s+assert)\\s+from\\s*['\"]node:assert/strict['\"]|import\\s*\\{\\s*strict\\s+as\\s+assert\\s*\\}\\s*from\\s*['\"]node:assert(?:/strict)?['\"]",
|
|
186
|
+
"label": "import assertions from node:assert/strict before using assert"
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
"kind": "contains",
|
|
190
|
+
"file": "contract-test.mjs",
|
|
191
|
+
"pattern": "import\\s*\\{[^}]*\\bcreateBookstoreServer\\b[^}]*\\}\\s*from\\s*['\"]\\./server\\.mjs['\"]",
|
|
192
|
+
"label": "import createBookstoreServer with `import { createBookstoreServer } from \"./server.mjs\"`"
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
"kind": "notContains",
|
|
196
|
+
"file": "contract-test.mjs",
|
|
197
|
+
"pattern": "from ['\"]\\./server['\"]|require\\("
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
"kind": "notContains",
|
|
201
|
+
"file": "contract-test.mjs",
|
|
202
|
+
"pattern": "\\.\\.\\.\\s*\\(rest of the file content\\)|rest of the file content",
|
|
203
|
+
"flags": "i",
|
|
204
|
+
"label": "contract-test.mjs must be a complete runnable file; do not include placeholder elisions"
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
"kind": "contains",
|
|
208
|
+
"file": "contract-test.mjs",
|
|
209
|
+
"pattern": "createBookstoreServer\\s*\\(",
|
|
210
|
+
"label": "execute the imported server factory from contract-test.mjs; do not only export test helpers"
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
"kind": "notContains",
|
|
214
|
+
"file": "contract-test.mjs",
|
|
215
|
+
"pattern": "export\\s+\\{\\s*runTests\\s*\\}|export\\s+(?:async\\s+)?function\\s+runTests\\b",
|
|
216
|
+
"label": "contract-test.mjs must run tests when invoked with node, not only export runTests"
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
"kind": "contains",
|
|
220
|
+
"file": "contract-test.mjs",
|
|
221
|
+
"pattern": "limit=2|limit\\s*=\\s*2|limit\\s*:\\s*['\"]?2|limit['\"],\\s*['\"]2['\"]|limit[\"],\\s*[\"]2[\"]",
|
|
222
|
+
"label": "exercise GET /books pagination with an explicit limit=2 request"
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
"kind": "contains",
|
|
226
|
+
"file": "contract-test.mjs",
|
|
227
|
+
"pattern": "Bearer eval-token|Authorization"
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
"kind": "contains",
|
|
231
|
+
"file": "contract-test.mjs",
|
|
232
|
+
"pattern": "listen\\(0"
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
"kind": "contains",
|
|
236
|
+
"file": "contract-test.mjs",
|
|
237
|
+
"pattern": "globalThis\\.fetch|fetch\\(",
|
|
238
|
+
"label": "use Node built-in global fetch in contract requests"
|
|
239
|
+
},
|
|
240
|
+
{
|
|
241
|
+
"kind": "contains",
|
|
242
|
+
"file": "contract-test.mjs",
|
|
243
|
+
"pattern": "(?:globalThis\\.)?fetch\\s*\\([^\\n,]+,\\s*(?:\\{|[A-Za-z_$])",
|
|
244
|
+
"label": "pass fetch options for POST requests so method, headers, and body reach the server"
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
"kind": "notContains",
|
|
248
|
+
"file": "contract-test.mjs",
|
|
249
|
+
"pattern": "from\\s+['\"](?:node:)?http['\"]|import\\s+[^;]*['\"](?:node:)?http['\"]|require\\(['\"](?:node:)?http['\"]\\)|from\\s+['\"]node-fetch['\"]|import\\s*\\(['\"]node-fetch['\"]\\)|require\\(['\"]node-fetch['\"]\\)",
|
|
250
|
+
"label": "contract tests must not import node:http or node-fetch; remove those imports and use globalThis.fetch"
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
"kind": "notContains",
|
|
254
|
+
"file": "contract-test.mjs",
|
|
255
|
+
"pattern": "new\\s+URL\\([^,\\n]+,\\s*['\"]http://localhost['\"]\\s*\\)",
|
|
256
|
+
"label": "contract request helpers must include the assigned listen(0) port; build URLs from the resolved baseUrl, not plain http://localhost"
|
|
257
|
+
},
|
|
258
|
+
{
|
|
259
|
+
"kind": "notContains",
|
|
260
|
+
"file": "contract-test.mjs",
|
|
261
|
+
"pattern": "http\\.request|http\\.get",
|
|
262
|
+
"label": "contract tests must not use node:http request helpers; use globalThis.fetch"
|
|
263
|
+
},
|
|
264
|
+
{
|
|
265
|
+
"kind": "notContains",
|
|
266
|
+
"file": "contract-test.mjs",
|
|
267
|
+
"pattern": "\\bfunction\\s+fetch\\s*\\(|\\b(?:const|let|var)\\s+fetch\\s*=",
|
|
268
|
+
"label": "contract tests must not replace the global fetch function; use globalThis.fetch or a differently named helper"
|
|
269
|
+
},
|
|
270
|
+
{
|
|
271
|
+
"kind": "notContains",
|
|
272
|
+
"file": "contract-test.mjs",
|
|
273
|
+
"pattern": "/api/v1",
|
|
274
|
+
"label": "call the generated server with exact bare paths /books and /books/{id}; remove any /api/v1 prefix"
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
"kind": "contains",
|
|
278
|
+
"file": "contract-test.mjs",
|
|
279
|
+
"pattern": "401|403|400|404"
|
|
280
|
+
},
|
|
281
|
+
{
|
|
282
|
+
"kind": "contains",
|
|
283
|
+
"file": "contract-test.mjs",
|
|
284
|
+
"pattern": "close\\(|server\\.close"
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
"kind": "nodeScriptPasses",
|
|
288
|
+
"script": "contract-test.mjs",
|
|
289
|
+
"timeoutMs": 20000,
|
|
290
|
+
"requiredOutput": [
|
|
291
|
+
{
|
|
292
|
+
"pattern": "Pagination|GET /books|List Books",
|
|
293
|
+
"flags": "i",
|
|
294
|
+
"label": "pagination test ran"
|
|
295
|
+
},
|
|
296
|
+
{
|
|
297
|
+
"pattern": "Auth|Authentication|401|403",
|
|
298
|
+
"flags": "i",
|
|
299
|
+
"label": "auth failure test ran"
|
|
300
|
+
},
|
|
301
|
+
{
|
|
302
|
+
"pattern": "Validation|VALIDATION_ERROR|400",
|
|
303
|
+
"flags": "i",
|
|
304
|
+
"label": "validation test ran"
|
|
305
|
+
},
|
|
306
|
+
{
|
|
307
|
+
"pattern": "GET\\s+/books/\\{id\\}|Not Found|BOOK_NOT_FOUND|404",
|
|
308
|
+
"flags": "i",
|
|
309
|
+
"label": "not-found test ran"
|
|
310
|
+
},
|
|
311
|
+
{
|
|
312
|
+
"pattern": "Create|201|POST",
|
|
313
|
+
"flags": "i",
|
|
314
|
+
"label": "create-success test ran"
|
|
315
|
+
}
|
|
316
|
+
]
|
|
317
|
+
}
|
|
318
|
+
]
|
|
319
|
+
},
|
|
320
|
+
{
|
|
321
|
+
"path": "README.md",
|
|
322
|
+
"kind": "markdown-doc",
|
|
323
|
+
"minBytes": 500,
|
|
324
|
+
"checks": [
|
|
325
|
+
{
|
|
326
|
+
"kind": "contains",
|
|
327
|
+
"file": "README.md",
|
|
328
|
+
"pattern": "node server\\.mjs",
|
|
329
|
+
"label": "include the exact server command `node server.mjs`"
|
|
330
|
+
},
|
|
331
|
+
{
|
|
332
|
+
"kind": "contains",
|
|
333
|
+
"file": "README.md",
|
|
334
|
+
"pattern": "node contract-test\\.mjs",
|
|
335
|
+
"label": "include the exact contract-test command `node contract-test.mjs`"
|
|
336
|
+
},
|
|
337
|
+
{
|
|
338
|
+
"kind": "contains",
|
|
339
|
+
"file": "README.md",
|
|
340
|
+
"pattern": "GET /books"
|
|
341
|
+
},
|
|
342
|
+
{
|
|
343
|
+
"kind": "contains",
|
|
344
|
+
"file": "README.md",
|
|
345
|
+
"pattern": "GET /books/\\{id\\}|GET /books/:id|GET /books/<id>"
|
|
346
|
+
},
|
|
347
|
+
{
|
|
348
|
+
"kind": "contains",
|
|
349
|
+
"file": "README.md",
|
|
350
|
+
"pattern": "POST /books"
|
|
351
|
+
},
|
|
352
|
+
{
|
|
353
|
+
"kind": "contains",
|
|
354
|
+
"file": "README.md",
|
|
355
|
+
"pattern": "eval-token|Authorization"
|
|
356
|
+
}
|
|
357
|
+
]
|
|
358
|
+
}
|
|
359
|
+
]
|
|
360
|
+
},
|
|
361
|
+
"rubric": {
|
|
362
|
+
"artifact": {
|
|
363
|
+
"path": "openapi.yaml",
|
|
364
|
+
"kind": "yaml"
|
|
365
|
+
},
|
|
366
|
+
"axes": [
|
|
367
|
+
{
|
|
368
|
+
"name": "correctness",
|
|
369
|
+
"description": "The module does what the requirements ask, with sensible edge handling."
|
|
370
|
+
},
|
|
371
|
+
{
|
|
372
|
+
"name": "verification",
|
|
373
|
+
"description": "Self-tests exercise real behavior, not trivial truths."
|
|
374
|
+
},
|
|
375
|
+
{
|
|
376
|
+
"name": "clarity",
|
|
377
|
+
"description": "Exports, naming, and structure make the module usable without reading every line."
|
|
378
|
+
},
|
|
379
|
+
{
|
|
380
|
+
"name": "robustness",
|
|
381
|
+
"description": "Invalid input and boundary cases fail loudly rather than silently."
|
|
382
|
+
}
|
|
383
|
+
]
|
|
384
|
+
},
|
|
385
|
+
"qualityFocus": [
|
|
386
|
+
"contract-first API design",
|
|
387
|
+
"server implementation",
|
|
388
|
+
"integration tests"
|
|
389
|
+
]
|
|
390
|
+
}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "resume-cv",
|
|
3
|
+
"name": "Résumé / CV",
|
|
4
|
+
"description": "Build a clean, ATS-friendly résumé or CV from a person's background, tailored to a target role. Scopes the target role and the highlight reel of achievements FIRST (so the résumé is targeted, not a life history), then designs a single-column, parser-safe layout, then writes impact-led bullets with metrics that fit one to two pages. Use for job applications, LinkedIn-to-résumé conversions, and role-targeted CV rewrites.\n\nA gallery craftbook generated from an archetype spec. It runs\n`phase → (per-phase gate) → … → evaluate → (loop) → finish`. Each build\nphase that produces a checkable artifact is followed by a **runtime\ngate-checkpoint** — the runtime verifies the artifact and routes with no\nmodel turn, looping back to redo the phase on a miss. The final `evaluate`\nstep holds a static deliverable gate plus a reviewer QA pass. What it adds\nover the generic `build-loop`: a specialist role per phase, a\ndomain-correct ordering, and a concrete per-phase quality bar.\n\nDeliverables marked \"artifact\" land in the project's artifacts drawer (`write_artifact` / `read_artifact`), not the shipped workspace — review output is not product source.\n\nPhases:\n\n1. Scope the résumé (planner) — target role, must-hit keywords, and the achievement highlight reel → gated on artifact `{{workPath}}/scope.md` (markdown-notes)\n2. Design the layout (designer) — single-column ATS-safe template with clean hierarchy → gated on artifact `{{workPath}}/design.md` (markdown-notes)\n3. Write the résumé (copywriter) — write impact bullets into index.html, tailored and within the cap → gated on `index.html` (html-page)\n\nThe gates never advance with an unmet criterion, and loop back to the\nowning phase to fix named gaps.\n",
|
|
5
|
+
"entryStepId": "scope",
|
|
6
|
+
"triggers": [
|
|
7
|
+
"write my resume",
|
|
8
|
+
"build a cv",
|
|
9
|
+
"make a resume",
|
|
10
|
+
"tailor my resume to a job",
|
|
11
|
+
"curriculum vitae",
|
|
12
|
+
"ats friendly resume"
|
|
13
|
+
],
|
|
14
|
+
"steps": [
|
|
15
|
+
{
|
|
16
|
+
"id": "scope",
|
|
17
|
+
"name": "Scope the résumé",
|
|
18
|
+
"description": "target role, must-hit keywords, and the achievement highlight reel",
|
|
19
|
+
"prompt": "Target before drafting. Step 1: identify the target role/title and, if a job description is provided, extract the must-hit skills and keywords. Step 2: from the person's background, select the experiences that matter for THIS role and set aside the rest — a résumé is a targeted highlight reel, not a complete history. Step 3: choose the section set and order (summary, experience, skills, education, plus optional projects/certs) and decide the length cap (1 page for <10 yrs experience, 2 max). Step 4: for each kept role, note the 2-4 strongest achievements and where a metric exists (numbers, %, scale). Step 5: write an acceptance-criteria checklist ('targeted to the stated role', 'reverse-chronological experience', 'every role has impact bullets, most with a metric', 'must-hit keywords appear naturally', 'fits within the page cap', 'no objective-statement filler'). Write the scope + highlight reel + checklist via write_task_note AND to {{workPath}}/scope.md. No layout or final bullets yet.\n\nThe deliverable `{{workPath}}/scope.md` lands in the project's artifacts drawer — write it with `write_artifact` and read it back with `read_artifact`; the shipped workspace stays untouched.",
|
|
20
|
+
"suggestedRole": "planner",
|
|
21
|
+
"advanceWhen": {
|
|
22
|
+
"file": "{{workPath}}/scope.md",
|
|
23
|
+
"minBytes": 1,
|
|
24
|
+
"sniff": "nonempty",
|
|
25
|
+
"artifact": true
|
|
26
|
+
},
|
|
27
|
+
"gate": {
|
|
28
|
+
"at": "completion",
|
|
29
|
+
"checks": [
|
|
30
|
+
{
|
|
31
|
+
"kind": "minBytes",
|
|
32
|
+
"file": "{{workPath}}/scope.md",
|
|
33
|
+
"bytes": 120,
|
|
34
|
+
"artifact": true
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"kind": "sniff",
|
|
38
|
+
"file": "{{workPath}}/scope.md",
|
|
39
|
+
"sniff": "nonempty",
|
|
40
|
+
"artifact": true
|
|
41
|
+
}
|
|
42
|
+
],
|
|
43
|
+
"onReject": "scope",
|
|
44
|
+
"maxAttempts": 3
|
|
45
|
+
},
|
|
46
|
+
"next": "design"
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"id": "design",
|
|
50
|
+
"name": "Design the layout",
|
|
51
|
+
"description": "single-column ATS-safe template with clean hierarchy",
|
|
52
|
+
"prompt": "Design a layout that BOTH a recruiter and an ATS parser can read. Step 1: choose a single-column layout (multi-column and tables confuse parsers) with a clear header (name, title, contact line) and standard section headings (Experience, Skills, Education) in plain text. Step 2: pick a conservative type scale and a restrained palette (mostly ink-on-white, at most one subtle accent) with strong contrast; no graphics, no icons that carry meaning, web-safe fonts only. Step 3: define the entry format for experience (Company | Title | Dates on one line, bullets beneath) and a compact skills format. Step 4: set print rules (@page, Letter/A4) and a height constraint matching the page cap. Step 5: write a visual-criteria checklist ('single column, no tables for layout', 'standard parser-friendly section headings', 'consistent date alignment', 'fits the page cap in print'). Write the layout spec + checklist via write_task_note AND to {{workPath}}/design.md. No copy yet.\n\nThe deliverable `{{workPath}}/design.md` lands in the project's artifacts drawer — write it with `write_artifact` and read it back with `read_artifact`; the shipped workspace stays untouched.",
|
|
53
|
+
"suggestedRole": "designer",
|
|
54
|
+
"advanceWhen": {
|
|
55
|
+
"file": "{{workPath}}/design.md",
|
|
56
|
+
"minBytes": 1,
|
|
57
|
+
"sniff": "nonempty",
|
|
58
|
+
"artifact": true
|
|
59
|
+
},
|
|
60
|
+
"gate": {
|
|
61
|
+
"at": "completion",
|
|
62
|
+
"checks": [
|
|
63
|
+
{
|
|
64
|
+
"kind": "minBytes",
|
|
65
|
+
"file": "{{workPath}}/design.md",
|
|
66
|
+
"bytes": 120,
|
|
67
|
+
"artifact": true
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"kind": "sniff",
|
|
71
|
+
"file": "{{workPath}}/design.md",
|
|
72
|
+
"sniff": "nonempty",
|
|
73
|
+
"artifact": true
|
|
74
|
+
}
|
|
75
|
+
],
|
|
76
|
+
"onReject": "design",
|
|
77
|
+
"maxAttempts": 3
|
|
78
|
+
},
|
|
79
|
+
"next": "write"
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"id": "write",
|
|
83
|
+
"name": "Write the résumé",
|
|
84
|
+
"description": "write impact bullets into index.html, tailored and within the cap",
|
|
85
|
+
"prompt": "Write the résumé and assemble it into the layout as a single self-contained index.html (inline CSS with print rules). Step 1: write a 1-2 line professional summary tailored to the target role, weaving in must-hit keywords naturally. Step 2: write experience entries in reverse-chronological order with impact-led bullets — each starts with a strong verb and, wherever the highlight reel supplied one, includes a metric (scale, %, $, time saved). Step 3: write a scannable skills section using the role's keywords, and a compact education section. Step 4: cut ruthlessly to fit the page cap; remove dated or irrelevant roles before adding pages. Step 5: ensure no objective-statement filler and no first-person pronouns in bullets. On a loop-back, fix ONLY the named gaps. Write the path + a note confirming page count and that keywords are covered via write_task_note.",
|
|
86
|
+
"suggestedRole": "copywriter",
|
|
87
|
+
"advanceWhen": {
|
|
88
|
+
"file": "index.html",
|
|
89
|
+
"minBytes": 1,
|
|
90
|
+
"sniff": "html-complete"
|
|
91
|
+
},
|
|
92
|
+
"gate": {
|
|
93
|
+
"at": "completion",
|
|
94
|
+
"checks": [
|
|
95
|
+
{
|
|
96
|
+
"kind": "minBytes",
|
|
97
|
+
"file": "index.html",
|
|
98
|
+
"bytes": 800
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
"kind": "htmlLint",
|
|
102
|
+
"file": "index.html"
|
|
103
|
+
}
|
|
104
|
+
],
|
|
105
|
+
"scripts": [
|
|
106
|
+
{
|
|
107
|
+
"name": "checkHtmlComplete",
|
|
108
|
+
"scope": "standard",
|
|
109
|
+
"inputs": {
|
|
110
|
+
"file": "index.html"
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
],
|
|
114
|
+
"onReject": "write",
|
|
115
|
+
"maxAttempts": 4
|
|
116
|
+
},
|
|
117
|
+
"next": "evaluate"
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
"id": "evaluate",
|
|
121
|
+
"name": "Evaluate",
|
|
122
|
+
"description": "Grade the deliverable against every acceptance criterion. All pass → finish; any fail → loop back and fix the gap.",
|
|
123
|
+
"prompt": "QA the résumé. Step 1: open/render index.html and, if print-preview is available, confirm it is within the page cap. Step 2: check EACH acceptance criterion: targeted to the stated role, single-column parser-safe layout with standard section headings, reverse-chronological experience, every role has impact bullets and most carry a metric, must-hit keywords appear naturally, no objective-statement filler, dates aligned consistently. Step 3: read it as a recruiter for the target role and confirm the fit is obvious in the top third. Write PASS/FAIL per criterion; if it exceeds the page cap, FAIL and loop back to trim.\n\nThen route — this is the whole point of the loop:\n\n- **Every criterion PASSES →** call `advance_task_step({ ref, stepId: \"evaluate\", next: \"finish\" })`.\n- **Any criterion FAILS →** write the specific gaps to notes, then call `advance_task_step({ ref, stepId: \"evaluate\", next: \"write\" })` to loop back. The builder fixes exactly those gaps.\n\nNever route to `finish` while any criterion is unmet. The build phase's completion gate already blocked a grossly-incomplete deliverable; your job is the judgment an automated check cannot make (does it actually work, read well, look right). After ~3 unproductive loops, stop and report DONE_WITH_CONCERNS so the user can step in.",
|
|
124
|
+
"suggestedRole": "reviewer",
|
|
125
|
+
"consumes": [
|
|
126
|
+
{
|
|
127
|
+
"file": "index.html"
|
|
128
|
+
}
|
|
129
|
+
],
|
|
130
|
+
"next": "write"
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
"id": "finish",
|
|
134
|
+
"name": "Finish",
|
|
135
|
+
"description": "All acceptance criteria met. Stamp a short summary and report DONE.",
|
|
136
|
+
"prompt": "Every acceptance criterion passed. Write a one-paragraph DONE summary to task notes via `write_task_note`: what was built, the deliverable path(s), and a one-line confirmation that each criterion is met. Then report DONE.",
|
|
137
|
+
"suggestedRole": "developer",
|
|
138
|
+
"terminal": true
|
|
139
|
+
}
|
|
140
|
+
],
|
|
141
|
+
"version": "1.0.2",
|
|
142
|
+
"releasedAt": "2026-08-21T00:00:00Z",
|
|
143
|
+
"paramSchema": {
|
|
144
|
+
"type": "object",
|
|
145
|
+
"properties": {
|
|
146
|
+
"workPath": {
|
|
147
|
+
"type": "string",
|
|
148
|
+
"title": "Working folder",
|
|
149
|
+
"description": "Per-task working folder in the artifacts drawer. Defaults to this task's own folder so runs never collide; override with a stable name when you deliberately want runs to share files.",
|
|
150
|
+
"default": "{{task.dir}}"
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
},
|
|
154
|
+
"minGezelVersion": "1.26233"
|
|
155
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"title": "Résumé / CV smoke eval",
|
|
4
|
+
"objective": "Self-contained smoke eval for the Résumé / CV craftbook using the html-page generic harness.",
|
|
5
|
+
"tags": [
|
|
6
|
+
"html-page"
|
|
7
|
+
],
|
|
8
|
+
"prompt": "Can you biuld us a little page for this? The content notes are in source/page-content.md. Save it as index.html — one file, nothing fancy needed on our end.",
|
|
9
|
+
"setup": {
|
|
10
|
+
"projectName": "Résumé / CV Eval",
|
|
11
|
+
"about": "Self-contained eval project for resume-cv. Seeded inputs are under workspace/source or workspace/fixtures; final deliverable is workspace/index.html.",
|
|
12
|
+
"missionObjectives": "Use the Résumé / CV craftbook/template, read the seeded local fixtures, and write index.html without network calls, real credentials, or live services.",
|
|
13
|
+
"files": [
|
|
14
|
+
{
|
|
15
|
+
"path": "source/brief.md",
|
|
16
|
+
"content": "# Résumé / CV Eval Brief\n\nClient: Boreal Desk, a home-office accessories company.\nAudience: operations leads who need an artifact they can use this week.\n\nFixed source facts for grounding:\n- The returns desk pilot covered 18 SKUs.\n- Median first response improved from 18 hours to 6 hours.\n- Preventable refund leakage fell from 14.2% to 8.9%.\n- The top unresolved complaint is status silence after photo submission.\n- Required next actions are automated status emails, barcode-exception training, and a weekly Finance exception export.\n\nUse these facts when the task asks for prose, analysis, copy, UI content, or test data. Do not use live web services, real credentials, or current outside data.\n\nCraftbook under test: resume-cv - Résumé / CV.\n"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"path": "source/page-content.md",
|
|
20
|
+
"content": "# Boreal Desk Support Board\n\nBuild content around a support operations board. Required labels: Open issues, Status silence, Response time, Refund leakage, Next action. Required metric text: 18 hours to 6 hours and 14.2% to 8.9%.\n"
|
|
21
|
+
}
|
|
22
|
+
],
|
|
23
|
+
"worker": {
|
|
24
|
+
"name": "Jules",
|
|
25
|
+
"role": "Developer"
|
|
26
|
+
},
|
|
27
|
+
"craftbookParams": {
|
|
28
|
+
"workPath": "tasks/eval"
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
"mocks": [],
|
|
32
|
+
"success": {
|
|
33
|
+
"summary": "index.html is a source-grounded self-contained HTML page/tool.",
|
|
34
|
+
"deliverables": [
|
|
35
|
+
{
|
|
36
|
+
"path": "index.html",
|
|
37
|
+
"kind": "html-page",
|
|
38
|
+
"minBytes": 3000,
|
|
39
|
+
"checks": [
|
|
40
|
+
{
|
|
41
|
+
"kind": "cssMinBytes",
|
|
42
|
+
"bytes": 650,
|
|
43
|
+
"file": "index.html"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"kind": "jsParses",
|
|
47
|
+
"file": "index.html"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"kind": "contains",
|
|
51
|
+
"file": "index.html",
|
|
52
|
+
"pattern": "Boreal|Support Board|returns",
|
|
53
|
+
"flags": "i"
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"kind": "contains",
|
|
57
|
+
"file": "index.html",
|
|
58
|
+
"pattern": "18\\s*hours|6\\s*hours|14\\.2%|8\\.9%",
|
|
59
|
+
"flags": "i"
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"kind": "contains",
|
|
63
|
+
"file": "index.html",
|
|
64
|
+
"pattern": "button|input|filter|tab|card|section|nav",
|
|
65
|
+
"flags": "i"
|
|
66
|
+
}
|
|
67
|
+
]
|
|
68
|
+
}
|
|
69
|
+
]
|
|
70
|
+
},
|
|
71
|
+
"rubric": {
|
|
72
|
+
"artifact": {
|
|
73
|
+
"path": "index.html",
|
|
74
|
+
"kind": "html"
|
|
75
|
+
},
|
|
76
|
+
"axes": [
|
|
77
|
+
{
|
|
78
|
+
"name": "structure",
|
|
79
|
+
"description": "Layout and hierarchy fit the content; sections are scannable and coherent."
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"name": "grounding",
|
|
83
|
+
"description": "Seeded source content is used faithfully — no invented facts or dropped requirements."
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"name": "interactivity",
|
|
87
|
+
"description": "Controls and states the page claims to offer actually work."
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"name": "polish",
|
|
91
|
+
"description": "Styling is intentional and responsive rather than unstyled or broken."
|
|
92
|
+
}
|
|
93
|
+
]
|
|
94
|
+
},
|
|
95
|
+
"qualityFocus": [
|
|
96
|
+
"self-contained UI",
|
|
97
|
+
"source grounding",
|
|
98
|
+
"responsive structure"
|
|
99
|
+
]
|
|
100
|
+
}
|