|
157 | 157 | {"id":"bd-eips","title":"L9 follow-up: format.metadata.description as channel description fallback","description":"Q1 cascades feed.description → format.metadata.description → website.description for the channel description. v1 cascades feed.description → website.description (skips the per-format layer). The simpler cascade matches Q2's configuration model. File this if a user needs the third level. Site: feed/binding.rs::website_description helper.","status":"open","priority":4,"issue_type":"feature","created_at":"2026-05-08T17:33:26.773014Z","created_by":"cscheid","updated_at":"2026-05-08T17:33:26.773014Z","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-eips","depends_on_id":"bd-o90m","type":"discovered-from","created_at":"2026-05-08T17:33:26.773014Z","created_by":"cscheid","metadata":"{}","thread_id":""}]} |
158 | 158 | {"id":"bd-eity","title":"Generic file uploader dialog for hub-client","description":"Hub-client currently only supports dropping images onto the editor or sidebar. Users need to be able to upload arbitrary binary files (PDFs, CSVs, fonts, tree-sitter grammar .wasm files, etc.) into their Automerge-backed projects. The ingestion pipeline is already generic (processFileForUpload → createBinaryFile → VFS); what's missing is the UI affordance — a non-image-specific uploader dialog + triggers.\n\nPlan: claude-notes/plans/2026-04-21-generic-file-uploader.md\n\nBlocks: real-browser end-to-end verification for syntax-highlighting Phase 4 (loading a user tree-sitter grammar from _quarto/grammars/). See claude-notes/plans/2026-04-21-syntax-highlighting-phase-4.md step 4.6.\n\nScope (see plan for full details):\n- Generalize NewFileDialog's file-input accept filter (currently image/*,.pdf,.svg)\n- Route non-image editor drops to the upload dialog instead of discarding them\n- Add a '+' / 'Add files' entry point in the FileSidebar\n- Destination-path picker\n- Preserve existing image-drop markdown-insertion UX\n\nMostly UI-layer work; the binary ingestion pipeline stays unchanged.","status":"closed","priority":1,"issue_type":"feature","created_at":"2026-04-21T13:38:41.407334Z","created_by":"cscheid","updated_at":"2026-04-21T14:55:28.078909Z","closed_at":"2026-04-21T14:55:28.078161Z","close_reason":"Implemented in b0177b8d (plan 2026-04-21-generic-file-uploader)","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-eity","depends_on_id":"bd-n7x2","type":"related","created_at":"2026-04-21T13:38:41.407334Z","created_by":"cscheid","metadata":"{}","thread_id":""}]} |
159 | 159 | {"id":"bd-emr4","title":"qmd writer/reader: explicit Figure shapes don't round-trip (caption ≠ alt, multi-block content, etc.)","description":"Discovered while implementing bd-f5qd. The implicit-figure round-trip is fixed (write_figure now detects the implicit shape and emits bare image syntax). Figures with shapes other than the implicit one have no syntax in qmd that round-trips back to a Figure: the writer's fallback emits a fenced `::: {}` div with the caption as a sibling block, and the reader has no rule that turns that back into a Figure.\n\nConcrete minimal repro (caption text differs from image alt):\n\n $ cat > /tmp/explicit_fig.json <<'EOF'\n {\n \"pandoc-api-version\": [1, 23, 1],\n \"meta\": {},\n \"blocks\": [{\"t\":\"Figure\",\"c\":[\n [\"\",[],[]],\n [null,[{\"t\":\"Plain\",\"c\":[{\"t\":\"Str\",\"c\":\"A different caption.\"}]}]],\n [{\"t\":\"Plain\",\"c\":[{\"t\":\"Image\",\"c\":[[\"\",[\"lightbox\"],[]],[{\"t\":\"Str\",\"c\":\"Image alt\"}],[\"image.png\",\"\"]]}]}]\n ]}]\n }\n EOF\n $ cat /tmp/explicit_fig.json | cargo run --bin pampa -- -f json -t qmd\n ::: {}\n\n {.lightbox}\n\n A different caption.\n\n :::\n\n $ cat /tmp/explicit_fig.json | cargo run --bin pampa -- -f json -t qmd | cargo run --bin pampa -- -t native\n [ Div ( \"\" , [] , [] ) [\n Figure ( \"\" , [] , [] ) (Caption Nothing [Plain[Str \"Image\",Space,Str \"alt\"]]) [...],\n Para [Str \"A\",Space,Str \"different\",Space,Str \"caption.\"]\n ] ]\n\nThe original caption is gone (replaced by the implicit-figure rule firing on\nthe inner image-only paragraph, which copies the alt text into the caption).\nThe original caption text becomes a free-standing sibling Para. The outer\nDiv wraps the whole thing.\n\nOther shapes that hit the same fallback:\n- Figure with caption.short set\n- Figure with multiple content blocks\n- Figure with classes or kvs on the figure itself (not just the image)\n- Figure whose content isn't a single Plain[Image]\n\nFix needs reader-side support: design a qmd syntax for explicit figures and\nadd a reader rule that converts it back to a Figure block. Likely shape:\nfenced div with a recognizable class/id marker plus a convention for which\nblock is the caption (TS Quarto uses crossref-style `#fig-id` divs).\n\nFor now the writer's fallback path stays as-is; users get a structurally\nincorrect div until this is fixed.","status":"open","priority":2,"issue_type":"bug","created_at":"2026-05-01T00:49:16.022173Z","created_by":"cscheid","updated_at":"2026-05-01T00:49:48.575674Z","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-emr4","depends_on_id":"bd-f5qd","type":"discovered-from","created_at":"2026-05-01T00:49:16.022173Z","created_by":"cscheid","metadata":"{}","thread_id":""}]} |
| 160 | +{"id":"bd-expy","title":"Pipe table parser commits to caption when ':::' follows a row (issue #206)","description":"Parse error when a fenced-div close `:::` directly follows a pipe table row without an intervening blank line. The first `:` of `:::` is shifted by the parser as the start of a `caption` rule (the caption first-token literal is `:`); once shifted, tree-sitter cannot back out, and the second `:` produces 'unexpected character or token here'.\n\nTriage doc: claude-notes/issue-reports/206/triage.md\nWorktree branch: issue-206\nGitHub issue: https://github.com/quarto-dev/q2/issues/206\nReporter: @rundel\nReal-world example: quarto-dev/quarto-web docs/websites/website-navigation.qmd L155-L159\n\nConfirmed not a fenced-div bug — bare pipe table + `:::` reproduces identically. The fenced div in the reporter's example is incidental.\n\nRecommended fix shape: introduce an external `_caption_start` scanner token that only matches a `:` not immediately followed by another `:` (and followed by inline whitespace). Re-key the `caption` rule on `_caption_start` instead of the literal `:`. Add tree-sitter corpus tests for `:::`-after-table, `: caption`-after-table, bare `:::` after table, and a pampa round-trip test for the repro fixture. Re-test on quarto-web after fix.\n\nOut of scope here, file separately if desired: pipe-table parser also silently absorbs trailing headings/paragraphs as one-cell rows when no blank line intervenes (see triage doc 'Adjacent finding').","status":"closed","priority":2,"issue_type":"bug","created_at":"2026-05-15T18:48:39.090203Z","created_by":"cscheid","updated_at":"2026-05-15T21:35:28.981270Z","closed_at":"2026-05-15T21:35:28.981068Z","close_reason":"Fixed by PR #208 (merged as f0a1fd53)","source_repo":".","compaction_level":0,"original_size":0} |
160 | 161 | {"id":"bd-f3jc","title":"[websites phase 0] Foundations: snapshot type, pipeline checkpoint, naming","description":"First phase of website epic. Plan: claude-notes/plans/2026-04-23-website-project-epic.md § Phase 0.\n\nDeliverables:\n- Final names for the static-document snapshot type (working name DocumentProfile), the ProjectType trait, and the checkpoint stage.\n- Typed snapshot struct, serde-serializable.\n- PipelineData checkpoint variant with Clone/serialization.\n- Round-trip serialization tests + a clone-and-resume test that produces byte-identical output to end-to-end.\n- Decide crate placement (quarto-core vs new quarto-project crate).\n- Decide checkpoint position: after merge, or after merge + pre-engine sugaring.\n- Documentation of the static contract: what is guaranteed, under what conditions.\n\nNo user-visible behavior change in this phase.","status":"closed","priority":1,"issue_type":"task","created_at":"2026-04-23T18:42:37.750604Z","created_by":"cscheid","updated_at":"2026-04-23T20:53:23.807873Z","closed_at":"2026-04-23T20:53:23.807149Z","close_reason":"DocumentProfile type + checkpoint stage + UnwrapProfile stage shipped. Resumability verified: clone-and-resume test produces byte-identical HTML to end-to-end; 3 real-fixture CLI renders byte-identical pre/post-change (MD5 match). 7654/7654 workspace tests + cargo xtask verify pass. Commit b8b72fc2 on feature/websites-phase-0. Contract doc at claude-notes/designs/document-profile-contract.md.","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-f3jc","depends_on_id":"bd-0tr6","type":"parent-child","created_at":"2026-04-23T18:42:37.750604Z","created_by":"cscheid","metadata":"{}","thread_id":""}]} |
161 | 162 | {"id":"bd-f3pl","title":"qmd writer drops table caption attributes (issue #152)","description":"GitHub: https://github.com/quarto-dev/q2/issues/152\nTriage: claude-notes/issue-reports/152/triage.md\nWorktree: .worktrees/issue-152 (branch issue-152, based on main @ 132c13c8)\n\nThe pipe-table branch of write_table (crates/pampa/src/writers/qmd.rs:1120-1239) ignores Table.attr entirely. A caption-attached attribute block like ': caption {tbl-colwidths=\"[30,70]\"}' is parsed correctly into Table.attr.2 (verified via 'cargo run --bin pampa --' on claude-notes/issue-reports/152/repro.qmd) but is dropped by 'pampa -t qmd', producing a lossy round-trip.\n\nThe list-table branch (write_list_table at lines 928-1118) already handles id/classes/keyvals correctly. The pipe-table branch needs analogous handling at the caption emission point (lines 1217-1235): after writing ': <caption-text>', emit ' {<attrs>}' via the existing write_attr helper (qmd.rs:396) when is_empty_attr(&table.attr) is false.\n\nOpen questions resolved during triage:\n 1. Empty-id auto-suppression NOT NEEDED. The reader (pipe_table.rs:148-200) only sets Table.attr.0 from explicit {#id} in the caption attr block; no implicit tbl-foo numbering exists.\n 2. Caption-suffix is the only valid placement for table attributes. Verified against pandoc 3.9.0.2: prefix form '{attrs}<newline>table<newline>: caption' is not parsed as a table by pandoc OR pampa (pampa raises Q-0-99 + Q-3-32). Suffix form ': caption {attrs}' produces byte-identical AST in both engines, including the mixed id+classes+keyvals shape.\n\nFix workflow per crates/pampa/CLAUDE.md:\n 1. Add failing fixtures under crates/pampa/tests/roundtrip_tests/qmd-json-qmd/ (table-caption-with-keyval.qmd, table-caption-with-id.qmd, table-caption-with-classes.qmd, table-caption-with-mixed-attrs.qmd).\n 2. Verify each fixture fails the round-trip equality check.\n 3. Implement: emit write_attr(&table.attr, buf, ctx) after the caption text (qmd.rs:1228-1234), guarded by !is_empty_attr(&table.attr). No id-suppression guard needed.\n 4. Verify new fixtures pass and existing table-caption.qmd snapshot is unchanged (its Table.attr is empty).\n 5. cargo xtask verify --skip-hub-build (Rust-only, no quarto-core/pandoc-types touched).\n\nExisting parser-side snapshot covering this fixture: crates/pampa/tests/snapshots/json/table-caption-attr.qmd. Read-side contract: docs/syntax/desugaring/table-captions.qmd.","status":"closed","priority":1,"issue_type":"bug","created_at":"2026-05-03T16:27:17.949705Z","created_by":"cscheid","updated_at":"2026-05-03T17:12:42.027337Z","closed_at":"2026-05-03T17:12:42.027211Z","close_reason":"Fixed in PR #154 / commit 688ac678. Pipe-table writer now appends Table.attr via write_attr() on the caption line; 4 round-trip fixtures cover id, classes, keyval, and mixed-attr shapes.","source_repo":".","compaction_level":0,"original_size":0} |
162 | 163 | {"id":"bd-f5qd","title":"qmd writer: Figure node emits empty div wrapper and duplicates caption","description":"From issue #150 (item 2): The qmd writer for Figure nodes produces an empty `::: {}` div wrapper and emits the caption text after the image as a separate paragraph, duplicating it. Round-tripping qmd -> ast -> qmd -> ast produces different ASTs.\n\nRepro:\n printf '{.lightbox}\\n' | cargo run --bin pampa -- -t qmd\n ::: {}\n\n {.lightbox}\n\n Webpage\n\n :::\n\nExpected: round-trip should be stable; for an Image with caption inside a Figure with no extra attrs, output should likely just be the bare image syntax (`{.lightbox}`) since pandoc auto-wraps it in a Figure. Plan in claude-notes/plans/ to follow.","notes":"Plan: claude-notes/plans/2026-04-30-figure-qmd-roundtrip.md\nDiscussion needed before implementing — see plan's 'Proposed fix — discussion needed' section.","status":"closed","priority":1,"issue_type":"bug","created_at":"2026-05-01T00:01:55.558223Z","created_by":"cscheid","updated_at":"2026-05-01T00:51:41.517422Z","closed_at":"2026-05-01T00:51:41.517262Z","close_reason":"Fixed implicit-figure round-trip via match_implicit_figure_shape in write_figure. When Figure shape matches what the reader's implicit-figure rule produces (single Plain[Image] content, caption=alt, attr split between figure id and image classes/kvs), the writer now emits bare image syntax. Non-implicit Figure shapes continue to fall through to the existing fenced-div form which does not round-trip — tracked in bd-emr4 with concrete repro. See claude-notes/plans/2026-04-30-figure-qmd-roundtrip.md.","source_repo":".","compaction_level":0,"original_size":0} |
|
0 commit comments