q2 create: blog scaffold (website:blog) + listing Q1-parity fixes - #434
Merged
Conversation
…d-9arwdicv, bd-qv2lsab0) Three listing fixes discovered while scoping the blog scaffold (bd-r1by4u2a), each TDD'd: - parse_sort: route string-shaped values through as_plain_text so front-matter strings arriving as PandocInlines (e.g. sort: "date desc") parse instead of emitting Q-12-3 with an empty sort (bd-2qjnd). Drop the now-unneeded workaround in docs/errors. - contents: a bare directory entry (contents: posts — Q1's canonical blog shape) now matches everything under the directory via the new dir-aware glob_match_path_or_dir, used by both the render-time matcher and the dep-graph edge builder (bd-9arwdicv). - front-matter image: rebased document-relative → project-relative at hydration, host-relativized at emission, and registered as a ResourceCopyIntent so the file reaches the output tree; also makes the value the shape the RSS feed builder expects (bd-qv2lsab0). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Port Quarto 1's blog template to quarto-project-create and flip the 'blog' choice to implemented — the CLI (positional, JSON directive, interactive) and the hub-client WASM path pick it up automatically. Scaffold: Q1-familiar 9-file set — _quarto.yml (website.title, description, RSS site-url placeholder, navbar with github/bluesky icon items, cosmo), listing index.qmd with Q1's canonical config (contents: posts, sort: "date desc", feed: true), posts/_metadata.yml (banner title blocks; Q1's freeze: dropped — no Q2 freeze, bd-mx5x609r), two starter posts, about.qmd (Q1's about: jolla block dropped — no Q2 about pages, bd-5xmy5lle), styles.css. The two post JPEGs are the first users of the ScaffoldContent::Binary path and are one-time copies from Q1's resources. Post dates stamp today / today-minus-3-days via a new time dep (wasm-bindgen clock on wasm32); CreateFromChoiceOptions::with_today pins the date in tests. The scaffold sweep test's per-template invariant is now 'interpolates at least one variable' since the post templates carry $first/second-post-date$ rather than $title$. Tests: quarto-project-create 31/31 (new blog file-set + date tests, Windows-safe path comparisons), quarto CLI create suite 30/30 (blog e2e incl. byte-identical binary round-trip; unimplemented-choice tests repointed at manuscript), interactive prompt tests updated for the three-choice registry, hub-client projectCreate.wasm.test.ts 7/7 against freshly built WASM. Full workspace: 10790/10790. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…-r1by4u2a) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
✅ Snyk checks have passed. No issues have been found so far.
💻 Catch issues earlier using the plugins for VS Code, JetBrains IDEs, Visual Studio, and Eclipse. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Implements bd-r1by4u2a: the
blogproject choice (website:blog) inquarto-project-create, flipped to implemented — picked up by the CLI (positional,--jsondirective, interactive) and the hub-client WASM path automatically. First real user of theScaffoldContent::Binarypath (the two post JPEGs, one-time copies from Q1's resources).Plan + full e2e transcript:
claude-notes/plans/2026-07-29-blog-scaffold.md.Listing fixes (bd-2qjnd, bd-9arwdicv, bd-qv2lsab0)
Rendering a Q1-shaped blog before writing scaffold code surfaced three gaps in the listing machinery, each fixed TDD-first:
sort: "date desc"— front-matter strings arriving as PandocInlines fell throughparse_sortto Q-12-3 with an empty sort; now routed viaas_plain_textlikeparse_contents(bd-2qjnd).contents: posts— a bare directory entry (Q1's canonical blog shape) matched zero files; new dir-awareglob_match_path_or_dirused by both the render-time matcher and the dep-graph edge builder (bd-9arwdicv).image:— emitted verbatim into the host page (404) and never copied to_site/; now rebased document→project-relative at hydration, host-relativized at emission, and copied viaResourceCopyIntent. Also the shape the RSS feed builder expects (bd-qv2lsab0).Scaffold
Q1-familiar 9-file set; post dates stamped today / today−3d via a new
timedep (wasm-bindgen clock on wasm32;with_todaypins tests). Deliberate deviations, documented in the plan: nobrandtheme marker (Q-14-1), noeditor:, nofreeze:(no Q2 freeze, bd-mx5x609r), noabout: jollablock /profile.jpg(no Q2 about pages, bd-5xmy5lle).Known caveat (deliberate): listing cards render unstyled until quarto-listing.scss is vendored (bd-57y4, follow-up in progress).
Verification
cargo nextest run --workspace: 10790/10790cargo xtask verify: all steps passedq2 create project blog→q2 renderwarning-free; listing date-desc with working images, RSS feed, category chips, banner title blocks; JSON directive + dry-run paths exercised🤖 Generated with Claude Code