@bendyline/gilde 0.1.55 → 0.1.56
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/glm-5.3-flash-320b-q2.json +129 -0
- package/authoring/gstack/wave.json +2 -2
- package/data/chat-models/gl/glm-5.3-flash-320b-q2/manifest.json +137 -0
- package/data/chat-models/gl/glm-5.3-flash-320b-q2/versions/1.0.0/manifest.json +23 -0
- package/data/chat-models/index.json +1 -1
- package/data/craftbook-templates/a1/a11y-audit/versions/1.1.3/test.json +16 -8
- package/data/craftbook-templates/ac/accessibility-retrofit/versions/2.0.2/craftbook.json +618 -0
- package/data/craftbook-templates/ac/accessibility-retrofit/versions/2.0.2/test.json +228 -0
- package/data/craftbook-templates/al/album-curate/versions/1.0.3/test.json +6 -3
- package/data/craftbook-templates/al/alert-rules/versions/1.0.3/test.json +8 -8
- package/data/craftbook-templates/an/anniversary-cut/versions/1.0.5/test.json +10 -5
- package/data/craftbook-templates/an/annual-document-review/versions/1.0.3/test.json +16 -8
- package/data/craftbook-templates/an/anomaly-scan/versions/1.0.3/test.json +12 -6
- package/data/craftbook-templates/ap/apply-review-findings/versions/1.0.2/craftbook.json +602 -0
- package/data/craftbook-templates/ap/apply-review-findings/versions/1.0.2/test.json +290 -0
- package/data/craftbook-templates/ar/artifact-integrity-review/versions/1.0.3/test.json +18 -9
- package/data/craftbook-templates/au/audiobook-master-pack/versions/1.0.5/test.json +10 -5
- package/data/craftbook-templates/au/auth-flow/versions/1.0.3/test.json +12 -6
- package/data/craftbook-templates/au/auth-flow/versions/1.0.4/craftbook.json +282 -0
- package/data/craftbook-templates/au/auth-flow/versions/1.0.4/test.json +143 -0
- package/data/craftbook-templates/au/automation-recipe/versions/1.0.3/test.json +12 -6
- package/data/craftbook-templates/ba/backup-routine/versions/1.0.4/craftbook.json +282 -0
- package/data/craftbook-templates/ba/backup-routine/versions/1.0.4/test.json +108 -0
- package/data/craftbook-templates/bl/blog-post/versions/1.0.3/test.json +8 -8
- package/data/craftbook-templates/br/branding-website/versions/1.1.3/craftbook.json +335 -0
- package/data/craftbook-templates/br/branding-website/versions/1.1.3/test.json +164 -0
- package/data/craftbook-templates/br/broadcast-announcement/versions/1.0.3/test.json +8 -8
- package/data/craftbook-templates/br/browser-qa-audit/versions/2.0.8/craftbook.json +621 -0
- package/data/craftbook-templates/br/browser-qa-audit/versions/2.0.8/test.json +376 -0
- package/data/craftbook-templates/bu/bug-fix-tdd/versions/2.0.2/craftbook.json +730 -0
- package/data/craftbook-templates/bu/bug-fix-tdd/versions/2.0.2/test.json +221 -0
- package/data/craftbook-templates/bu/build-loop/versions/1.1.1/test.json +8 -8
- package/data/craftbook-templates/ca/case-study/versions/1.0.3/test.json +8 -8
- package/data/craftbook-templates/ch/chapter-narration-run/versions/1.0.4/test.json +10 -5
- package/data/craftbook-templates/ch/character-turnaround/versions/1.0.3/test.json +25 -11
- package/data/craftbook-templates/ci/ci-pipeline/versions/2.0.2/craftbook.json +587 -0
- package/data/craftbook-templates/ci/ci-pipeline/versions/2.0.2/test.json +225 -0
- package/data/craftbook-templates/ci/citation-audit/versions/1.0.3/test.json +28 -14
- package/data/craftbook-templates/cl/cli-tool/versions/1.1.3/test.json +8 -8
- package/data/craftbook-templates/co/codebase-refactoring-review/versions/1.0.3/test.json +16 -8
- package/data/craftbook-templates/co/codebase-ux-review/versions/1.0.3/test.json +18 -9
- package/data/craftbook-templates/co/codemod-sweep/versions/1.0.2/craftbook.json +605 -0
- package/data/craftbook-templates/co/codemod-sweep/versions/1.0.2/test.json +252 -0
- package/data/craftbook-templates/co/cohort-analysis/versions/1.0.3/test.json +18 -9
- package/data/craftbook-templates/co/competitive-analysis/versions/1.0.3/test.json +23 -15
- package/data/craftbook-templates/co/content-accuracy-review/versions/1.0.3/test.json +28 -14
- package/data/craftbook-templates/co/content-deck/versions/1.2.3/craftbook.json +4 -4
- package/data/craftbook-templates/co/content-deck/versions/1.2.3/test.json +3 -0
- package/data/craftbook-templates/co/content-deck/versions/1.2.4/craftbook.json +341 -0
- package/data/craftbook-templates/co/content-deck/versions/1.2.4/test.json +169 -0
- package/data/craftbook-templates/co/copy-review/versions/1.0.3/test.json +14 -7
- package/data/craftbook-templates/co/corpus-email-digest/versions/1.2.3/craftbook.json +4 -4
- package/data/craftbook-templates/co/corpus-email-digest/versions/1.2.3/test.json +3 -0
- package/data/craftbook-templates/co/corpus-email-digest/versions/1.2.4/craftbook.json +345 -0
- package/data/craftbook-templates/co/corpus-email-digest/versions/1.2.4/test.json +187 -0
- package/data/craftbook-templates/co/corpus-synthesis/versions/1.0.3/test.json +26 -13
- package/data/craftbook-templates/co/cover-letter/versions/1.0.3/test.json +8 -8
- package/data/craftbook-templates/cs/csv-transformer/versions/1.2.4/test.json +7 -7
- package/data/craftbook-templates/da/dashboard-spec/versions/1.0.3/test.json +7 -7
- package/data/craftbook-templates/da/data-export-migrate/versions/1.0.4/craftbook.json +285 -0
- package/data/craftbook-templates/da/data-export-migrate/versions/1.0.4/test.json +104 -0
- package/data/craftbook-templates/da/data-pipeline-etl/versions/1.0.5/craftbook.json +284 -0
- package/data/craftbook-templates/da/data-pipeline-etl/versions/1.0.5/test.json +162 -0
- package/data/craftbook-templates/da/data-quality-audit/versions/1.0.3/test.json +38 -19
- package/data/craftbook-templates/da/data-to-report/versions/1.0.3/test.json +12 -6
- package/data/craftbook-templates/db/db-index-tuning/versions/1.0.4/craftbook.json +286 -0
- package/data/craftbook-templates/db/db-index-tuning/versions/1.0.4/test.json +104 -0
- package/data/craftbook-templates/de/dependency-audit/versions/1.1.3/test.json +14 -7
- package/data/craftbook-templates/de/dependency-upgrade/versions/1.0.2/craftbook.json +621 -0
- package/data/craftbook-templates/de/dependency-upgrade/versions/1.0.2/test.json +235 -0
- package/data/craftbook-templates/de/design-review/versions/1.0.3/test.json +16 -8
- package/data/craftbook-templates/de/design-system-consultation/versions/2.0.8/craftbook.json +616 -0
- package/data/craftbook-templates/de/design-system-consultation/versions/2.0.8/test.json +201 -0
- package/data/craftbook-templates/do/doc-intake-pipeline/versions/1.0.4/craftbook.json +285 -0
- package/data/craftbook-templates/do/doc-intake-pipeline/versions/1.0.4/test.json +104 -0
- package/data/craftbook-templates/do/doc-rewrite/versions/1.0.3/test.json +119 -55
- package/data/craftbook-templates/do/dockerize-app/versions/1.0.4/craftbook.json +285 -0
- package/data/craftbook-templates/do/dockerize-app/versions/1.0.4/test.json +92 -0
- package/data/craftbook-templates/do/documentation-drift-review/versions/1.0.3/test.json +18 -9
- package/data/craftbook-templates/dr/draft-social-post/versions/1.0.2/craftbook.json +324 -0
- package/data/craftbook-templates/dr/draft-social-post/versions/1.0.2/test.json +161 -0
- package/data/craftbook-templates/ed/edit-notes/versions/1.0.3/test.json +11 -4
- package/data/craftbook-templates/en/engineering-retrospective/versions/2.0.8/craftbook.json +566 -0
- package/data/craftbook-templates/en/engineering-retrospective/versions/2.0.8/test.json +191 -0
- package/data/craftbook-templates/ep/episode-plan/versions/1.0.3/test.json +10 -5
- package/data/craftbook-templates/ex/executive-level-review/versions/2.0.7/test.json +7 -10
- package/data/craftbook-templates/ex/executive-level-review/versions/2.0.8/craftbook.json +595 -0
- package/data/craftbook-templates/ex/executive-level-review/versions/2.0.8/test.json +139 -0
- package/data/craftbook-templates/ex/expense-categorize/versions/1.0.4/craftbook.json +277 -0
- package/data/craftbook-templates/ex/expense-categorize/versions/1.0.4/test.json +104 -0
- package/data/craftbook-templates/fe/feature-flag-rollout/versions/1.1.2/craftbook.json +327 -0
- package/data/craftbook-templates/fe/feature-flag-rollout/versions/1.1.2/test.json +162 -0
- package/data/craftbook-templates/fl/flaky-test-fix/versions/1.0.2/craftbook.json +718 -0
- package/data/craftbook-templates/fl/flaky-test-fix/versions/1.0.2/test.json +239 -0
- package/data/craftbook-templates/fo/form-fill-batch/versions/1.0.4/craftbook.json +285 -0
- package/data/craftbook-templates/fo/form-fill-batch/versions/1.0.4/test.json +162 -0
- package/data/craftbook-templates/fo/form-wizard/versions/1.0.3/test.json +8 -8
- package/data/craftbook-templates/ho/holiday-card-run/versions/1.0.3/test.json +11 -4
- package/data/craftbook-templates/ho/hotfix-flow/versions/2.0.2/craftbook.json +610 -0
- package/data/craftbook-templates/ho/hotfix-flow/versions/2.0.2/test.json +220 -0
- package/data/craftbook-templates/ht/html-arcade-game/versions/1.2.3/craftbook.json +343 -0
- package/data/craftbook-templates/ht/html-arcade-game/versions/1.2.3/test.json +176 -0
- package/data/craftbook-templates/id/idea-office-hours/versions/2.0.8/craftbook.json +566 -0
- package/data/craftbook-templates/id/idea-office-hours/versions/2.0.8/test.json +141 -0
- package/data/craftbook-templates/im/image-set-index/versions/1.2.3/craftbook.json +298 -0
- package/data/craftbook-templates/im/image-set-index/versions/1.2.3/test.json +180 -0
- package/data/craftbook-templates/in/insurance-inventory/versions/1.0.3/test.json +11 -4
- package/data/craftbook-templates/in/interactive-quiz/versions/1.0.3/test.json +48 -23
- package/data/craftbook-templates/in/invitation-design/versions/1.0.3/test.json +1 -1
- package/data/craftbook-templates/index.json +1 -1
- package/data/craftbook-templates/it/item-intake/versions/1.0.3/test.json +11 -4
- package/data/craftbook-templates/le/lead-enrichment/versions/1.0.4/craftbook.json +277 -0
- package/data/craftbook-templates/le/lead-enrichment/versions/1.0.4/test.json +104 -0
- package/data/craftbook-templates/me/meeting-prep-brief/versions/1.0.3/test.json +16 -8
- package/data/craftbook-templates/me/memory-prompt-session/versions/1.0.3/test.json +3 -0
- package/data/craftbook-templates/mo/morning-report/versions/1.0.3/test.json +21 -9
- package/data/craftbook-templates/of/office-hours/versions/1.1.1/test.json +8 -8
- package/data/craftbook-templates/pe/perf-optimization/versions/2.0.2/craftbook.json +697 -0
- package/data/craftbook-templates/pe/perf-optimization/versions/2.0.2/test.json +235 -0
- package/data/craftbook-templates/pe/pest-diagnosis/versions/1.0.3/test.json +19 -8
- package/data/craftbook-templates/pl/plan/versions/1.0.2/test.json +8 -8
- package/data/craftbook-templates/pl/playtest-report/versions/1.0.3/test.json +17 -7
- package/data/craftbook-templates/pr/practice-exam/versions/1.0.3/test.json +7 -2
- package/data/craftbook-templates/pr/practice-session/versions/1.0.3/test.json +11 -4
- package/data/craftbook-templates/pu/pull-request-review/versions/1.9.2/craftbook.json +435 -0
- package/data/craftbook-templates/pu/pull-request-review/versions/1.9.2/test.json +141 -0
- package/data/craftbook-templates/qu/quarterly-summary/versions/1.0.3/test.json +16 -8
- package/data/craftbook-templates/re/receipt-intake/versions/1.0.3/test.json +11 -4
- package/data/craftbook-templates/re/receipt-ocr-ledger/versions/1.0.4/craftbook.json +277 -0
- package/data/craftbook-templates/re/receipt-ocr-ledger/versions/1.0.4/test.json +104 -0
- package/data/craftbook-templates/re/recipe-capture/versions/1.0.3/test.json +13 -5
- package/data/craftbook-templates/re/record-a-relative/versions/1.0.3/test.json +3 -0
- package/data/craftbook-templates/re/recurring-invoice-run/versions/1.0.4/craftbook.json +285 -0
- package/data/craftbook-templates/re/recurring-invoice-run/versions/1.0.4/test.json +104 -0
- package/data/craftbook-templates/re/refactor-module/versions/2.0.2/craftbook.json +695 -0
- package/data/craftbook-templates/re/refactor-module/versions/2.0.2/test.json +241 -0
- package/data/craftbook-templates/re/release-artifact-sanity-check/versions/1.0.4/craftbook.json +361 -0
- package/data/craftbook-templates/re/release-artifact-sanity-check/versions/1.0.4/test.json +138 -0
- package/data/craftbook-templates/re/release-notes/versions/1.0.4/test.json +8 -8
- package/data/craftbook-templates/re/release-notes/versions/1.0.5/craftbook.json +339 -0
- package/data/craftbook-templates/re/release-notes/versions/1.0.5/test.json +111 -0
- package/data/craftbook-templates/re/reliability-review/versions/1.0.3/test.json +16 -8
- package/data/craftbook-templates/re/research-report/versions/1.0.3/test.json +16 -8
- package/data/craftbook-templates/ro/root-cause-investigation/versions/2.0.8/craftbook.json +596 -0
- package/data/craftbook-templates/ro/root-cause-investigation/versions/2.0.8/test.json +157 -0
- package/data/craftbook-templates/ro/rough-cut-assembly/versions/1.0.4/test.json +13 -5
- package/data/craftbook-templates/sc/schema-migration/versions/2.0.2/craftbook.json +624 -0
- package/data/craftbook-templates/sc/schema-migration/versions/2.0.2/test.json +225 -0
- package/data/craftbook-templates/sc/script-automation/versions/1.0.4/craftbook.json +284 -0
- package/data/craftbook-templates/sc/script-automation/versions/1.0.4/test.json +162 -0
- package/data/craftbook-templates/se/security-architecture-review/versions/2.0.7/test.json +10 -13
- package/data/craftbook-templates/se/security-architecture-review/versions/2.0.8/craftbook.json +597 -0
- package/data/craftbook-templates/se/security-architecture-review/versions/2.0.8/test.json +157 -0
- package/data/craftbook-templates/so/social-digest/versions/1.0.3/craftbook.json +239 -0
- package/data/craftbook-templates/so/social-digest/versions/1.0.3/test.json +168 -0
- package/data/craftbook-templates/so/source-quality-audit/versions/1.0.3/test.json +25 -11
- package/data/craftbook-templates/sp/spec-authoring/versions/2.0.8/craftbook.json +599 -0
- package/data/craftbook-templates/sp/spec-authoring/versions/2.0.8/test.json +162 -0
- package/data/craftbook-templates/te/technical-documentation/versions/2.0.8/craftbook.json +577 -0
- package/data/craftbook-templates/te/technical-documentation/versions/2.0.8/test.json +174 -0
- package/data/craftbook-templates/te/test-coverage-review/versions/1.2.1/test.json +16 -8
- package/data/craftbook-templates/te/test-suite-backfill/versions/2.0.2/craftbook.json +592 -0
- package/data/craftbook-templates/te/test-suite-backfill/versions/2.0.2/test.json +195 -0
- package/data/craftbook-templates/th/thank-you-batch/versions/1.0.3/test.json +6 -3
- package/data/craftbook-templates/th/thank-you-sweep/versions/1.0.3/test.json +11 -4
- package/data/craftbook-templates/ti/tileset-batch/versions/1.0.3/test.json +9 -3
- package/data/craftbook-templates/tr/transcribe-and-shownotes/versions/1.0.3/test.json +10 -5
- package/data/craftbook-templates/tr/transcribe-index/versions/1.0.3/test.json +6 -3
- package/data/craftbook-templates/tr/translate-content/versions/1.1.3/craftbook.json +140 -0
- package/data/craftbook-templates/tr/translate-content/versions/1.1.3/test.json +141 -0
- package/data/craftbook-templates/ty/type-safety-pass/versions/2.0.2/craftbook.json +594 -0
- package/data/craftbook-templates/ty/type-safety-pass/versions/2.0.2/test.json +221 -0
- package/data/craftbook-templates/ux/ux-update/versions/1.0.2/craftbook.json +606 -0
- package/data/craftbook-templates/ux/ux-update/versions/1.0.2/test.json +206 -0
- package/data/craftbook-templates/we/weak-spot-drill/versions/1.0.3/test.json +11 -4
- package/data/craftbook-templates/we/weekly-walkthrough/versions/1.0.3/test.json +21 -9
- package/data/craftbook-templates/wh/whitepaper/versions/1.0.3/test.json +16 -8
- package/data/craftbook-templates/ye/year-in-review/versions/1.0.3/test.json +8 -4
- package/data/project-types/index.json +1 -1
- package/data/project-types/ju/just-chat/manifest.json +1 -1
- package/data/project-types/ju/just-chat/versions/1.0.1/about.md +5 -0
- package/data/project-types/ju/just-chat/versions/1.0.1/manifest.json +19 -0
- package/package.json +1 -1
- package/schemas/chat-model-identity.schema.json +27 -0
- package/schemas/chat-model-version.schema.json +22 -0
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"title": "UX change with before/after proof",
|
|
4
|
+
"objective": "The craftbook drives a described UX change on a small orders page: move the bottom-of-page search into the header next to the title with an exact requested placeholder, while the / keyboard shortcut and the list-filter handler keep working. Placement, placeholder, and surviving wiring are verified mechanically against the fixed markup.",
|
|
5
|
+
"tags": [
|
|
6
|
+
"code",
|
|
7
|
+
"ux",
|
|
8
|
+
"frontend",
|
|
9
|
+
"tactical-fleet"
|
|
10
|
+
],
|
|
11
|
+
"prompt": "Use the Implement a UX Change craftbook: nobody finds the search on the Orderboard page because it sits at the very bottom. Move the search into the header next to the title, set its placeholder to 'Search orders…', and keep the / keyboard shortcut working. The full request is in source/change-request.md.",
|
|
12
|
+
"setup": {
|
|
13
|
+
"projectName": "Orderboard",
|
|
14
|
+
"about": "A single-page order list for a small furniture shop: index.html with an inline script, plus styles.css. No build step and no test suite.",
|
|
15
|
+
"files": [
|
|
16
|
+
{
|
|
17
|
+
"path": "package.json",
|
|
18
|
+
"content": "{\n \"name\": \"orderboard\",\n \"private\": true,\n \"version\": \"1.0.0\",\n \"type\": \"module\"\n}\n"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"path": "index.html",
|
|
22
|
+
"content": "<!doctype html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<title>Orderboard</title>\n<link rel=\"stylesheet\" href=\"styles.css\">\n</head>\n<body>\n<header class=\"topbar\">\n <h1>Orderboard</h1>\n</header>\n<main>\n <ul id=\"orders\">\n <li>#1042 Walnut writing desk</li>\n <li>#1043 Oak bookshelf</li>\n <li>#1044 Cherry side table</li>\n <li>#1045 Maple bench</li>\n <li>#1046 Walnut picture frame</li>\n </ul>\n</main>\n<section class=\"search-row\">\n <input id=\"search\" type=\"search\" placeholder=\"Filter orders\">\n</section>\n<script>\nconst search = document.getElementById('search');\nsearch.addEventListener('input', () => {\n const q = search.value.toLowerCase();\n for (const item of document.querySelectorAll('#orders li')) {\n item.hidden = q !== '' && !item.textContent.toLowerCase().includes(q);\n }\n});\ndocument.addEventListener('keydown', (event) => {\n if (event.key === '/' && document.activeElement !== search) {\n event.preventDefault();\n search.focus();\n }\n});\n</script>\n</body>\n</html>\n"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"path": "styles.css",
|
|
26
|
+
"content": "body { margin: 0; font-family: system-ui, sans-serif; color: #1c2430; background: #f5f6f8; }\n.topbar { display: flex; align-items: center; gap: 1rem; padding: 0.75rem 1.25rem; background: #223047; color: #fff; }\n.topbar h1 { margin: 0; font-size: 1.2rem; }\nmain { max-width: 40rem; padding: 1rem 1.25rem; }\n#orders { list-style: none; padding: 0; }\n#orders li { padding: 0.5rem 0.25rem; border-bottom: 1px solid #dde1e8; }\n.search-row { padding: 1rem 1.25rem; }\n#search { padding: 0.4rem 0.6rem; width: 16rem; }\n"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"path": "source/change-request.md",
|
|
30
|
+
"content": "# Change request\n\nFrom the product owner: \"Nobody finds the search — it sits at the very bottom of the page. Move the search into the header, next to the Orderboard title. Set its placeholder to 'Search orders…'. The / keyboard shortcut people already use must keep working, and typing in the box must still filter the list.\"\n"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"path": "tests/verify-ux-update.mjs",
|
|
34
|
+
"content": "import assert from 'node:assert/strict';\nimport { readFileSync } from 'node:fs';\n\nconst html = readFileSync('index.html', 'utf8');\nlet code = html;\nfor (const m of html.matchAll(/<script\\b[^>]*\\bsrc\\s*=\\s*[\"']([^\"']+)[\"']/gi)) {\n try { code += readFileSync(m[1], 'utf8'); } catch {}\n}\n\n// 1) Exactly one search input, and it lives inside the header, next to the title.\nconst inputs = [...html.matchAll(/<input\\b[^>]*>/gi)].map((m) => m[0]).filter((t) => /\\bid\\s*=\\s*[\"']search[\"']/i.test(t));\nassert.equal(inputs.length, 1, 'exactly one #search input exists');\nconst header = html.match(/<header\\b[^>]*>([\\s\\S]*?)<\\/header>/i);\nassert.ok(header, 'the header still exists');\nassert.ok(/\\bid\\s*=\\s*[\"']search[\"']/i.test(header[1]), 'the search input lives inside the header');\nassert.ok(/<h1\\b[^>]*>[^<]*Orderboard/i.test(header[1]), 'the Orderboard title is still in the header');\nconsole.log('UXUPDATE_ORACLE placement ok');\n\n// 2) The placeholder is exactly as requested.\nconst ph = inputs[0].match(/\\bplaceholder\\s*=\\s*[\"']([^\"']*)[\"']/i);\nassert.ok(ph, 'the search input has a placeholder');\nassert.equal(ph[1], 'Search orders…', 'placeholder is exactly \"Search orders…\"');\nconsole.log('UXUPDATE_ORACLE placeholder ok');\n\n// 3) The / shortcut still targets and focuses the search input.\nassert.ok(/['\"]\\/['\"]/.test(code), 'the / key hook survives');\nassert.ok(/getElementById\\(\\s*['\"]search['\"]\\s*\\)|querySelector\\(\\s*['\"]#search['\"]\\s*\\)/.test(code), 'the script still targets #search');\nassert.ok(/\\.focus\\s*\\(\\s*\\)/.test(code), 'the shortcut still focuses the search input');\nconsole.log('UXUPDATE_ORACLE shortcut ok');\n\n// 4) The list-filter behavior is still wired.\nassert.ok(/addEventListener\\s*\\(\\s*['\"]input['\"]/.test(code) || /\\boninput\\s*=/i.test(html), 'the input filter handler is still wired');\nassert.ok(/#orders/.test(code), 'the filter still targets the order list');\nconsole.log('UXUPDATE_ORACLE filter ok');\nconsole.log('UXUPDATE_ORACLE done');\n",
|
|
35
|
+
"surface": "harness"
|
|
36
|
+
}
|
|
37
|
+
],
|
|
38
|
+
"craftbookParams": {
|
|
39
|
+
"scope": "Move the search into the header next to the Orderboard title, set its placeholder to 'Search orders…', and keep the / keyboard shortcut and the list filtering working; see source/change-request.md."
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"mocks": [],
|
|
43
|
+
"success": {
|
|
44
|
+
"summary": "The search input sits inside the header next to the title with the exact requested placeholder, the old bottom-of-page placement is gone, and the / shortcut plus the filter handler still work — with every fleet artifact present and honestly cited.",
|
|
45
|
+
"deliverables": [
|
|
46
|
+
{
|
|
47
|
+
"path": "{{task.dir}}/before.md",
|
|
48
|
+
"kind": "markdown-notes",
|
|
49
|
+
"artifact": true,
|
|
50
|
+
"minBytes": 500,
|
|
51
|
+
"checks": [
|
|
52
|
+
{
|
|
53
|
+
"kind": "contains",
|
|
54
|
+
"file": "{{task.dir}}/before.md",
|
|
55
|
+
"pattern": "^##\\s+Request[\\s\\S]*^##\\s+Current behavior[\\s\\S]*^##\\s+Surfaces involved",
|
|
56
|
+
"flags": "im",
|
|
57
|
+
"label": "before sections in order"
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"kind": "citationsResolve",
|
|
61
|
+
"file": "{{task.dir}}/before.md",
|
|
62
|
+
"minCitations": 2,
|
|
63
|
+
"artifact": true
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"kind": "contains",
|
|
67
|
+
"file": "{{task.dir}}/before.md",
|
|
68
|
+
"pattern": "index\\.html",
|
|
69
|
+
"label": "names the real page"
|
|
70
|
+
}
|
|
71
|
+
]
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"path": "{{task.dir}}/fix-notes.md",
|
|
75
|
+
"kind": "markdown-notes",
|
|
76
|
+
"artifact": true,
|
|
77
|
+
"minBytes": 700,
|
|
78
|
+
"checks": [
|
|
79
|
+
{
|
|
80
|
+
"kind": "contains",
|
|
81
|
+
"file": "{{task.dir}}/fix-notes.md",
|
|
82
|
+
"pattern": "^##\\s+Problem[\\s\\S]*^##\\s+Change[\\s\\S]*^##\\s+Files touched[\\s\\S]*^##\\s+Consistency notes[\\s\\S]*^##\\s+Risk[\\s\\S]*^##\\s+How to verify",
|
|
83
|
+
"flags": "im",
|
|
84
|
+
"label": "fix-notes sections in order"
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"kind": "citationsResolve",
|
|
88
|
+
"file": "{{task.dir}}/fix-notes.md",
|
|
89
|
+
"minCitations": 2,
|
|
90
|
+
"artifact": true
|
|
91
|
+
}
|
|
92
|
+
]
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"path": "{{task.dir}}/validation.md",
|
|
96
|
+
"kind": "markdown-notes",
|
|
97
|
+
"artifact": true,
|
|
98
|
+
"minBytes": 500,
|
|
99
|
+
"checks": [
|
|
100
|
+
{
|
|
101
|
+
"kind": "contains",
|
|
102
|
+
"file": "{{task.dir}}/validation.md",
|
|
103
|
+
"pattern": "^##\\s+Before\\s*/\\s*after[\\s\\S]*^##\\s+What was exercised[\\s\\S]*^##\\s+Result",
|
|
104
|
+
"flags": "im",
|
|
105
|
+
"label": "validation sections in order"
|
|
106
|
+
}
|
|
107
|
+
]
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"path": "{{task.dir}}/review.md",
|
|
111
|
+
"kind": "markdown-report",
|
|
112
|
+
"artifact": true,
|
|
113
|
+
"minBytes": 400,
|
|
114
|
+
"checks": [
|
|
115
|
+
{
|
|
116
|
+
"kind": "contains",
|
|
117
|
+
"file": "{{task.dir}}/review.md",
|
|
118
|
+
"pattern": "Verdict:\\s*(?:PASS|REVISE)",
|
|
119
|
+
"flags": "i",
|
|
120
|
+
"label": "explicit reviewer verdict"
|
|
121
|
+
}
|
|
122
|
+
]
|
|
123
|
+
}
|
|
124
|
+
],
|
|
125
|
+
"checks": [
|
|
126
|
+
{
|
|
127
|
+
"kind": "notContains",
|
|
128
|
+
"file": "index.html",
|
|
129
|
+
"pattern": "placeholder=[\"']Filter orders[\"']",
|
|
130
|
+
"label": "the old bottom-of-page search placeholder is gone"
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
"kind": "htmlLint",
|
|
134
|
+
"file": "index.html"
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
"kind": "nodeScriptPasses",
|
|
138
|
+
"script": "tests/verify-ux-update.mjs",
|
|
139
|
+
"timeoutMs": 60000,
|
|
140
|
+
"requiredOutput": [
|
|
141
|
+
{
|
|
142
|
+
"pattern": "UXUPDATE_ORACLE placement ok",
|
|
143
|
+
"label": "search moved into the header next to the title"
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
"pattern": "UXUPDATE_ORACLE placeholder ok",
|
|
147
|
+
"label": "placeholder is exactly as requested"
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
"pattern": "UXUPDATE_ORACLE shortcut ok",
|
|
151
|
+
"label": "the / shortcut still focuses the search"
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
"pattern": "UXUPDATE_ORACLE filter ok",
|
|
155
|
+
"label": "the list filter is still wired"
|
|
156
|
+
}
|
|
157
|
+
]
|
|
158
|
+
}
|
|
159
|
+
],
|
|
160
|
+
"taskNotes": {
|
|
161
|
+
"minBytes": 120,
|
|
162
|
+
"checks": [
|
|
163
|
+
{
|
|
164
|
+
"kind": "contains",
|
|
165
|
+
"file": "task-notes.md",
|
|
166
|
+
"pattern": "\\bDONE\\b[\\s\\S]*(validation\\.md|fix-notes\\.md|before\\.md)",
|
|
167
|
+
"flags": "i",
|
|
168
|
+
"label": "DONE note names the deliverables"
|
|
169
|
+
}
|
|
170
|
+
]
|
|
171
|
+
},
|
|
172
|
+
"taskGraph": {
|
|
173
|
+
"requireCraftbookTask": true,
|
|
174
|
+
"requireTerminalStep": true
|
|
175
|
+
},
|
|
176
|
+
"unchangedFixtures": [
|
|
177
|
+
"package.json",
|
|
178
|
+
"source/change-request.md"
|
|
179
|
+
]
|
|
180
|
+
},
|
|
181
|
+
"rubric": {
|
|
182
|
+
"artifact": {
|
|
183
|
+
"path": "{{task.dir}}/fix-notes.md",
|
|
184
|
+
"kind": "markdown"
|
|
185
|
+
},
|
|
186
|
+
"axes": [
|
|
187
|
+
{
|
|
188
|
+
"name": "Request fidelity",
|
|
189
|
+
"description": "The delivered change is what was asked, judged as a user would: search in the header next to the title, the exact placeholder, nothing extra smuggled in."
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
"name": "Convention respect",
|
|
193
|
+
"description": "The edit reuses the page's existing structure, naming, and style patterns — the topbar's own layout — rather than inventing a new one-off style."
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
"name": "Behavior preservation with honest verification",
|
|
197
|
+
"description": "The / shortcut and the input filter still work after the move, and validation separates what was inspected in the code from what was actually exercised."
|
|
198
|
+
}
|
|
199
|
+
]
|
|
200
|
+
},
|
|
201
|
+
"qualityFocus": [
|
|
202
|
+
"before/after grounded in real markup",
|
|
203
|
+
"existing behaviors preserved",
|
|
204
|
+
"enforced review loop"
|
|
205
|
+
]
|
|
206
|
+
}
|
|
@@ -19,6 +19,9 @@
|
|
|
19
19
|
"worker": {
|
|
20
20
|
"name": "Fenna",
|
|
21
21
|
"role": "Study coach"
|
|
22
|
+
},
|
|
23
|
+
"craftbookParams": {
|
|
24
|
+
"workPath": "tasks/eval"
|
|
22
25
|
}
|
|
23
26
|
},
|
|
24
27
|
"mocks": [],
|
|
@@ -73,22 +76,26 @@
|
|
|
73
76
|
"kind": "contains",
|
|
74
77
|
"file": "tasks/eval/report.md",
|
|
75
78
|
"pattern": "(?:^|\\n)#{1,3}\\s+\\S",
|
|
76
|
-
"flags": "i"
|
|
79
|
+
"flags": "i",
|
|
80
|
+
"artifact": true
|
|
77
81
|
},
|
|
78
82
|
{
|
|
79
83
|
"kind": "contains",
|
|
80
84
|
"file": "tasks/eval/report.md",
|
|
81
85
|
"pattern": "review|schedule|next",
|
|
82
86
|
"flags": "i",
|
|
83
|
-
"label": "follow-up scheduled"
|
|
87
|
+
"label": "follow-up scheduled",
|
|
88
|
+
"artifact": true
|
|
84
89
|
},
|
|
85
90
|
{
|
|
86
91
|
"kind": "contains",
|
|
87
92
|
"file": "tasks/eval/report.md",
|
|
88
93
|
"pattern": "\\d",
|
|
89
|
-
"label": "the evidence has numbers"
|
|
94
|
+
"label": "the evidence has numbers",
|
|
95
|
+
"artifact": true
|
|
90
96
|
}
|
|
91
|
-
]
|
|
97
|
+
],
|
|
98
|
+
"artifact": true
|
|
92
99
|
}
|
|
93
100
|
]
|
|
94
101
|
},
|
|
@@ -23,6 +23,9 @@
|
|
|
23
23
|
"worker": {
|
|
24
24
|
"name": "Wim",
|
|
25
25
|
"role": "Gardener"
|
|
26
|
+
},
|
|
27
|
+
"craftbookParams": {
|
|
28
|
+
"workPath": "tasks/eval"
|
|
26
29
|
}
|
|
27
30
|
},
|
|
28
31
|
"mocks": [],
|
|
@@ -38,54 +41,63 @@
|
|
|
38
41
|
"kind": "contains",
|
|
39
42
|
"file": "tasks/eval/report.md",
|
|
40
43
|
"pattern": "(?:^|\\n)#{1,3}\\s+\\S",
|
|
41
|
-
"flags": "i"
|
|
44
|
+
"flags": "i",
|
|
45
|
+
"artifact": true
|
|
42
46
|
},
|
|
43
47
|
{
|
|
44
48
|
"kind": "contains",
|
|
45
49
|
"file": "tasks/eval/report.md",
|
|
46
50
|
"pattern": "North Bed",
|
|
47
|
-
"label": "North Bed covered"
|
|
51
|
+
"label": "North Bed covered",
|
|
52
|
+
"artifact": true
|
|
48
53
|
},
|
|
49
54
|
{
|
|
50
55
|
"kind": "contains",
|
|
51
56
|
"file": "tasks/eval/report.md",
|
|
52
57
|
"pattern": "Back Fence",
|
|
53
|
-
"label": "Back Fence Bed covered"
|
|
58
|
+
"label": "Back Fence Bed covered",
|
|
59
|
+
"artifact": true
|
|
54
60
|
},
|
|
55
61
|
{
|
|
56
62
|
"kind": "contains",
|
|
57
63
|
"file": "tasks/eval/report.md",
|
|
58
64
|
"pattern": "Herb Spiral",
|
|
59
|
-
"label": "Herb Spiral covered"
|
|
65
|
+
"label": "Herb Spiral covered",
|
|
66
|
+
"artifact": true
|
|
60
67
|
},
|
|
61
68
|
{
|
|
62
69
|
"kind": "contains",
|
|
63
70
|
"file": "tasks/eval/report.md",
|
|
64
71
|
"pattern": "Berry Corner",
|
|
65
|
-
"label": "Berry Corner covered"
|
|
72
|
+
"label": "Berry Corner covered",
|
|
73
|
+
"artifact": true
|
|
66
74
|
},
|
|
67
75
|
{
|
|
68
76
|
"kind": "contains",
|
|
69
77
|
"file": "tasks/eval/report.md",
|
|
70
78
|
"pattern": "yellow",
|
|
71
79
|
"flags": "i",
|
|
72
|
-
"label": "the reported yellow leaves are captured"
|
|
80
|
+
"label": "the reported yellow leaves are captured",
|
|
81
|
+
"artifact": true
|
|
73
82
|
},
|
|
74
83
|
{
|
|
75
84
|
"kind": "contains",
|
|
76
85
|
"file": "tasks/eval/report.md",
|
|
77
86
|
"pattern": "zucchini",
|
|
78
87
|
"flags": "i",
|
|
79
|
-
"label": "the zucchini harvest is captured"
|
|
88
|
+
"label": "the zucchini harvest is captured",
|
|
89
|
+
"artifact": true
|
|
80
90
|
},
|
|
81
91
|
{
|
|
82
92
|
"kind": "contains",
|
|
83
93
|
"file": "tasks/eval/report.md",
|
|
84
94
|
"pattern": "next week",
|
|
85
95
|
"flags": "i",
|
|
86
|
-
"label": "next week seeded"
|
|
96
|
+
"label": "next week seeded",
|
|
97
|
+
"artifact": true
|
|
87
98
|
}
|
|
88
|
-
]
|
|
99
|
+
],
|
|
100
|
+
"artifact": true
|
|
89
101
|
}
|
|
90
102
|
],
|
|
91
103
|
"checks": [
|
|
@@ -37,47 +37,55 @@
|
|
|
37
37
|
"kind": "contains",
|
|
38
38
|
"file": "tasks/eval/report.md",
|
|
39
39
|
"pattern": "(?:^|\\n)#{1,3}\\s+\\S",
|
|
40
|
-
"flags": "i"
|
|
40
|
+
"flags": "i",
|
|
41
|
+
"artifact": true
|
|
41
42
|
},
|
|
42
43
|
{
|
|
43
44
|
"kind": "contains",
|
|
44
45
|
"file": "tasks/eval/report.md",
|
|
45
46
|
"pattern": "source/brief\\.md|Brief",
|
|
46
47
|
"flags": "i",
|
|
47
|
-
"label": "cite or name the seeded source"
|
|
48
|
+
"label": "cite or name the seeded source",
|
|
49
|
+
"artifact": true
|
|
48
50
|
},
|
|
49
51
|
{
|
|
50
52
|
"kind": "contains",
|
|
51
53
|
"file": "tasks/eval/report.md",
|
|
52
54
|
"pattern": "18\\b[\\s\\S]{0,30}\\bSKUs",
|
|
53
55
|
"flags": "i",
|
|
54
|
-
"label": "include the 18-SKU pilot scope"
|
|
56
|
+
"label": "include the 18-SKU pilot scope",
|
|
57
|
+
"artifact": true
|
|
55
58
|
},
|
|
56
59
|
{
|
|
57
60
|
"kind": "contains",
|
|
58
61
|
"file": "tasks/eval/report.md",
|
|
59
62
|
"pattern": "18\\s*hours|6\\s*hours",
|
|
60
|
-
"flags": "i"
|
|
63
|
+
"flags": "i",
|
|
64
|
+
"artifact": true
|
|
61
65
|
},
|
|
62
66
|
{
|
|
63
67
|
"kind": "contains",
|
|
64
68
|
"file": "tasks/eval/report.md",
|
|
65
69
|
"pattern": "14\\.2%|8\\.9%",
|
|
66
|
-
"flags": "i"
|
|
70
|
+
"flags": "i",
|
|
71
|
+
"artifact": true
|
|
67
72
|
},
|
|
68
73
|
{
|
|
69
74
|
"kind": "contains",
|
|
70
75
|
"file": "tasks/eval/report.md",
|
|
71
76
|
"pattern": "status silence|photo submission",
|
|
72
|
-
"flags": "i"
|
|
77
|
+
"flags": "i",
|
|
78
|
+
"artifact": true
|
|
73
79
|
},
|
|
74
80
|
{
|
|
75
81
|
"kind": "contains",
|
|
76
82
|
"file": "tasks/eval/report.md",
|
|
77
83
|
"pattern": "automated status emails|barcode|Finance",
|
|
78
|
-
"flags": "i"
|
|
84
|
+
"flags": "i",
|
|
85
|
+
"artifact": true
|
|
79
86
|
}
|
|
80
|
-
]
|
|
87
|
+
],
|
|
88
|
+
"artifact": true
|
|
81
89
|
}
|
|
82
90
|
]
|
|
83
91
|
},
|
|
@@ -94,22 +94,26 @@
|
|
|
94
94
|
"kind": "contains",
|
|
95
95
|
"file": "tasks/eval/report.md",
|
|
96
96
|
"pattern": "(?:^|\\n)#{1,3}\\s+\\S",
|
|
97
|
-
"flags": "i"
|
|
97
|
+
"flags": "i",
|
|
98
|
+
"artifact": true
|
|
98
99
|
},
|
|
99
100
|
{
|
|
100
101
|
"kind": "contains",
|
|
101
102
|
"file": "tasks/eval/report.md",
|
|
102
103
|
"pattern": "March",
|
|
103
104
|
"flags": "i",
|
|
104
|
-
"label": "the empty March is acknowledged, not papered over"
|
|
105
|
+
"label": "the empty March is acknowledged, not papered over",
|
|
106
|
+
"artifact": true
|
|
105
107
|
},
|
|
106
108
|
{
|
|
107
109
|
"kind": "judge",
|
|
108
110
|
"file": "tasks/eval/report.md",
|
|
109
111
|
"rubric": "The review has an emotional arc: a year's thread stated up front, carried through month sections that lean on the picks' captions, ending on a deliberately chosen closing image — and the photo-less March is named honestly and kindly.",
|
|
110
|
-
"label": "the arc earns December"
|
|
112
|
+
"label": "the arc earns December",
|
|
113
|
+
"artifact": true
|
|
111
114
|
}
|
|
112
|
-
]
|
|
115
|
+
],
|
|
116
|
+
"artifact": true
|
|
113
117
|
}
|
|
114
118
|
]
|
|
115
119
|
},
|