|
210 | 210 | {"id":"bd-n9dr","title":"[websites epic] Unify nav config placement across features","description":"Nav config placement across features. Phase 3 (2026-04-24) refined the framing: rather than 'unify everything into one namespace,' the principle is now \"placement follows feature semantics.\"\n\nCurrent placement (post-Phase 3):\n- 'navbar:' — top level (feature-scoped; works in single-doc + project)\n- 'page-footer:' — top level (same; revealjs/etc. legitimately use it)\n- 'website.sidebar:' — under website. (sidebar is inherently a multi-page website feature)\n- 'site-sidebar:' (per-doc override selecting which sidebar applies) — top level\n- 'website.title:' / 'website.site-url:' / 'website.favicon:' — under website. (site-scoped)\n\nThe only remaining tension is 'site-sidebar' being a doc-level override for a website-scoped feature. Options:\n(a) rename to 'website.sidebar-id' (canonical; website.sidebar-id already accepted in Phase 2 as an alias)\n(b) keep 'site-sidebar' since it's a per-doc override like 'draft:' / 'date:' and those also live at the top level\n\nNot a blocker for MVP; land before docs-facing release. See claude-notes/plans/2026-04-24-websites-phase-3.md §Decision 1 for the framing shift.","status":"open","priority":2,"issue_type":"task","created_at":"2026-04-24T17:53:00.610122Z","created_by":"cscheid","updated_at":"2026-04-24T19:43:25.192319Z","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-n9dr","depends_on_id":"bd-9svl","type":"discovered-from","created_at":"2026-04-24T17:53:00.610122Z","created_by":"cscheid","metadata":"{}","thread_id":""}]} |
211 | 211 | {"id":"bd-nb32","title":"Body-link 'data-noresolveinput' escape hatch (Q1 parity)","description":"Q1 lets users opt out of body-link rewriting via data-noresolveinput attribute on individual <a> elements. Phase 6 (bd-v30t) skipped this; file once a real workflow surfaces (e.g. literal .qmd hrefs that must NOT be rewritten).","status":"open","priority":4,"issue_type":"feature","created_at":"2026-04-27T13:36:47.962663Z","created_by":"cscheid","updated_at":"2026-04-27T13:36:47.962663Z","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-nb32","depends_on_id":"bd-0tr6","type":"parent-child","created_at":"2026-04-27T13:36:47.962663Z","created_by":"cscheid","metadata":"{}","thread_id":""},{"issue_id":"bd-nb32","depends_on_id":"bd-v30t","type":"discovered-from","created_at":"2026-04-27T13:36:47.962663Z","created_by":"cscheid","metadata":"{}","thread_id":""}]} |
212 | 212 | {"id":"bd-nf50","title":"Page-navigation rules need user-facing docs","description":"User explicitly flagged (Phase 4 Decision 9) that the flatten + dedupe + separator-as-boundary + section-header-as-neighbor rules are non-obvious and need documentation in the Q2 docs site (bd-tr81). Tie to the docs epic.","status":"closed","priority":2,"issue_type":"task","created_at":"2026-04-24T22:48:12.837109Z","created_by":"cscheid","updated_at":"2026-04-30T13:54:10.438123Z","closed_at":"2026-04-30T13:54:10.437973Z","close_reason":"Documented as part of bd-bsut. The new \"Page navigation (prev/next)\" → \"How prev/next are chosen\" subsection in docs/navigation.qmd covers all four non-obvious rules: depth-first flatten, duplicate-href dedupe, separator-as-hard-boundary, and section-header-with-href as neighbor.","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-nf50","depends_on_id":"bd-nwun","type":"discovered-from","created_at":"2026-04-24T22:48:12.837109Z","created_by":"cscheid","metadata":"{}","thread_id":""},{"issue_id":"bd-nf50","depends_on_id":"bd-tr81","type":"related","created_at":"2026-04-24T22:48:12.837109Z","created_by":"cscheid","metadata":"{}","thread_id":""}]} |
213 | | -{"id":"bd-nkx4","title":"qmd reader drops whitespace between code_span and html_element (issue #182)","description":"Reader silently drops leading/trailing whitespace on bare html_element nodes when they're converted to RawInline, so AST loses the Space between adjacent Code and RawInline siblings. Writer then collides backticks and round-trip fails to re-parse.\n\nReproduction, root cause, and recommended fix scope are documented in claude-notes/issue-reports/182/triage.md on branch issue-182 (worktree .worktrees/issue-182). Short version: the html_element visitor's anchor-shorthand branch already handles leading_ws/trailing_ws correctly by emitting adjacent Space inlines; the sibling RawInline branch in the same match arm does not. The fix mirrors that pattern.\n\nLocalized in crates/pampa/src/pandoc/treesitter.rs (html_element arm). TDD-first per crates/pampa/CLAUDE.md: add a roundtrip fixture and an AST assertion before changing code.","status":"open","priority":1,"issue_type":"bug","created_at":"2026-05-12T13:42:55.415626Z","created_by":"cscheid","updated_at":"2026-05-12T13:42:55.415626Z","source_repo":".","compaction_level":0,"original_size":0} |
| 213 | +{"id":"bd-nkx4","title":"qmd reader drops whitespace between code_span and html_element (issue #182)","description":"Reader silently drops leading/trailing whitespace on bare html_element nodes when they're converted to RawInline, so AST loses the Space between adjacent Code and RawInline siblings. Writer then collides backticks and round-trip fails to re-parse.\n\nReproduction, root cause, and recommended fix scope are documented in claude-notes/issue-reports/182/triage.md on branch issue-182 (worktree .worktrees/issue-182). Short version: the html_element visitor's anchor-shorthand branch already handles leading_ws/trailing_ws correctly by emitting adjacent Space inlines; the sibling RawInline branch in the same match arm does not. The fix mirrors that pattern.\n\nLocalized in crates/pampa/src/pandoc/treesitter.rs (html_element arm). TDD-first per crates/pampa/CLAUDE.md: add a roundtrip fixture and an AST assertion before changing code.","status":"closed","priority":1,"issue_type":"bug","created_at":"2026-05-12T13:42:55.415626Z","created_by":"cscheid","updated_at":"2026-05-12T14:07:10.065411Z","closed_at":"2026-05-12T14:07:10.065243Z","close_reason":"Fixed in f2867bb1 on branch issue-182. Reader now emits leading/trailing Space inlines around RawInline when the html_element node carries surrounding whitespace, mirroring the anchor-shorthand branch in the same match arm.","source_repo":".","compaction_level":0,"original_size":0} |
214 | 214 | {"id":"bd-nl5q","title":"Cargo: upgrade deno_core v0.376.0 → v0.400.0","description":"Major upgrade surfaced by cargo-upgrade survey 2026-05-04. Current 0.376.0 is range-pinned in workspace; latest is 0.400.0. Type: pre-1.0 minor (semver-breaking); large jump. Review changelog and bump deliberately. See claude-notes/plans/2026-05-04-cargo-upgrade-survey.md and bd-hb8h.","status":"open","priority":3,"issue_type":"chore","created_at":"2026-05-04T18:15:54.767839Z","created_by":"cscheid","updated_at":"2026-05-04T18:16:04.780626Z","source_repo":".","compaction_level":0,"original_size":0,"labels":["cargo","deps"],"dependencies":[{"issue_id":"bd-nl5q","depends_on_id":"bd-hb8h","type":"discovered-from","created_at":"2026-05-04T18:16:04.780303Z","created_by":"cscheid","metadata":"{}","thread_id":""}]} |
215 | 215 | {"id":"bd-nqcv","title":"Glob support in project.nav-dependencies declarations","description":"Today `project.nav-dependencies` accepts a flat list of paths. Some users may want `project.nav-dependencies: [posts/*.qmd]` or `[chapters/**/*.qmd]`. v1 doesn't support globs (open question 5 in the Phase 8 plan). Wire glob expansion through DocumentProfileStage when populating the field. Defer until a real user need surfaces.","status":"open","priority":4,"issue_type":"feature","created_at":"2026-04-28T00:42:51.182984Z","created_by":"cscheid","updated_at":"2026-04-28T00:42:51.182984Z","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-nqcv","depends_on_id":"bd-0tr6","type":"parent-child","created_at":"2026-04-28T00:42:51.182984Z","created_by":"cscheid","metadata":"{}","thread_id":""},{"issue_id":"bd-nqcv","depends_on_id":"bd-fegm","type":"discovered-from","created_at":"2026-04-28T00:42:51.182984Z","created_by":"cscheid","metadata":"{}","thread_id":""}]} |
216 | 216 | {"id":"bd-ntnx","title":"Investigate tree-sitter grammar CRLF handling on Windows","description":"Cargo xtask verify step 4 (tree-sitter test) fails 5/451 pipe-table tests on Windows but passes on ubuntu-latest CI. Surfaced during PR 109 Windows verification on 2026-04-24. Root cause is ambiguous between a test-corpus CRLF issue (Scenario A, .gitattributes fix) and a grammar CRLF-handling bug (Scenario B, grammar.js fix). Must investigate before remediating — fixing the test would mask a real Windows-user bug if Scenario B applies. See design for reproducer and both scenarios. Related to bd-tjbr (sibling Windows dev-ergonomics work). Target branch feature/dev-setup-improvements or its own branch.","design":"Failure mode. cd crates/tree-sitter-qmd/tree-sitter-markdown && tree-sitter test reports 451 parses, 446 successful, 5 failed on Windows. All 5 failures are pipe-table tests: Example 201 (GFM), Pipe table can precede content (two variants), Pipe table can follow content, Pipe table with blank-line caption. file test/corpus/pipe_table.txt shows CRLF line terminators (426 CR paired with 426 LF). git ls-files --eol confirms i/lf w/crlf — stored as LF in the index, materialized as CRLF on Windows checkout via core.autocrlf=true. Same mechanism caused the quarto-doctemplate failures catalogued in q2-windows-verify-tests memory note.\n\nScenario A — test-corpus CRLF. Grammar is CRLF-agnostic. Parse trees for LF and CRLF inputs are identical. Tests fail only because the corpus .txt file embeds both the input text AND the expected S-expression AST, and the expected AST was written assuming LF parse output. Remediation is a scoped .gitattributes entry: crates/tree-sitter-qmd/tree-sitter-markdown/test/corpus/*.txt eol=lf. One line, followed by git rm --cached then git checkout to normalize existing files. Real Windows user qmd content continues to parse correctly regardless of line endings.\n\nScenario B — grammar CRLF bug. Grammar does not treat carriage-return-linefeed as a block boundary where it should. Real Windows user qmd content with CRLF endings parses incorrectly — pipe tables do not detect captions as separate blocks, block boundaries drift. This is a user-facing bug; only a Windows contributor running pampa against CRLF content catches it. Remediation is in crates/tree-sitter-qmd/tree-sitter-markdown/grammar.js — typically adding carriage-return to newline character classes or the external scanner logic. .gitattributes would mask this bug instead of fixing it.\n\nReproducer. Two layers, both diagnostic. Layer 1 tests grammar.js directly via tree-sitter parse. Layer 2 tests the full pampa pipeline that real users hit. Fixtures are written into the tree-sitter-markdown directory so tree-sitter parse picks up the configured grammar without an init-config step.\n\nLayer 1 (grammar.js):\n\nprintf 'before\\r\\n\\r\\n| a | b |\\r\\n|---|---|\\r\\n| 1 | 2 |\\r\\n\\r\\nafter\\r\\n' > crates/tree-sitter-qmd/tree-sitter-markdown/test-crlf.qmd\nprintf 'before\\n\\n| a | b |\\n|---|---|\\n| 1 | 2 |\\n\\nafter\\n' > crates/tree-sitter-qmd/tree-sitter-markdown/test-lf.qmd\ncd crates/tree-sitter-qmd/tree-sitter-markdown\ntree-sitter parse test-crlf.qmd > test-crlf.parse\ntree-sitter parse test-lf.qmd > test-lf.parse\ndiff test-crlf.parse test-lf.parse\n\nLayer 2 (pampa end-to-end):\n\ncargo run --quiet -p pampa --bin pampa -- crates/tree-sitter-qmd/tree-sitter-markdown/test-crlf.qmd > pampa-crlf.out\ncargo run --quiet -p pampa --bin pampa -- crates/tree-sitter-qmd/tree-sitter-markdown/test-lf.qmd > pampa-lf.out\ndiff pampa-crlf.out pampa-lf.out\n\nNotes on the prior reproducer in this design field. pampa has no parse subcommand — it is cargo run -p pampa --bin pampa -- input.qmd, with default -f markdown -t native. Git Bash /tmp resolves to %TEMP% but native Windows binaries resolve /tmp to C:\\tmp\\, so the previous version would have created files Git Bash could not find later. Use repo-local paths.\n\nIf both diffs are empty then Scenario A applies. If either diff is non-empty then Scenario B applies. Layer 2 also tells us whether the bug propagates past pampa's input handling into the Pandoc AST that real users render from.\n\nBroader git cross-platform context. The 2026 consensus is that most projects do not need .gitattributes. core.autocrlf=true plus LF-tolerant tooling handles 99 percent of cross-platform cases. quarto-cli is an example — no .gitattributes and no CRLF-related failures. .gitattributes is for files that must be a specific line ending (shell scripts, batch files), binary files misdetected as text, and whitespace-sensitive test corpora where the consuming tool is itself correct. Over-restrictive patterns like * text=auto eol=lf force LF everywhere and are worse for cross-platform dev than no config. The target for this project is minimal, scoped .gitattributes only where the test harness cannot be fixed — and only in Scenario A.\n\nOut of scope. Broader .gitattributes sweep for the whole repo. Fixing the 8 quarto-doctemplate CRLF failures already catalogued in q2-windows-verify-tests (separate work). Tree-sitter CLI changes (upstream, not ours).","acceptance_criteria":"Reproducer runs and classifies failure as Scenario A or Scenario B. If Scenario A then .gitattributes entry added for test/corpus/*.txt and cargo xtask verify step 4 passes on Windows. If Scenario B then follow-up beads issue filed for grammar.js fix at higher priority and this investigation issue closes with evidence. q2-windows-verify-tests memory note updated with resolution and link to fix PR or follow-up issue. No regression in CI — tree-sitter tests continue to pass on Linux.","status":"closed","priority":2,"issue_type":"task","created_at":"2026-04-24T16:38:18.426543400Z","created_by":"cderv","updated_at":"2026-04-27T14:29:38.899054500Z","closed_at":"2026-04-27T14:29:38.898439400Z","close_reason":"Scenario B classified. Follow-up bd-0gsj filed at P1 for the grammar.js fix; full evidence in that issue's design and in the closing comment here.","source_repo":".","compaction_level":0,"original_size":0,"labels":["tree-sitter","windows"],"dependencies":[{"issue_id":"bd-ntnx","depends_on_id":"bd-tjbr","type":"related","created_at":"2026-04-24T16:39:17.513779500Z","created_by":"cderv","metadata":"{}","thread_id":""}],"comments":[{"id":12,"issue_id":"bd-ntnx","author":"cderv","text":"Investigation complete. Result: Scenario B (real grammar CRLF bug). Layer 1 (tree-sitter parse on grammar.js) showed pipe_table extents diverge between CRLF and LF inputs — CRLF case absorbs the trailing paragraph as a malformed table row. Layer 2 (cargo run -p pampa) confirmed pampa does not normalize line endings before parsing, so the bug propagates to the Pandoc AST that drives every output format. Real Windows users with default core.autocrlf=true and the common pattern of a pipe table followed by content render structurally wrong documents. .gitattributes alone would have masked this.\n\nFollow-up filed at higher priority: bd-0gsj — Fix CRLF handling in tree-sitter-qmd grammar.js for pipe tables (P1, bug). Full evidence and reproducer carried over to bd-0gsj design field.","created_at":"2026-04-27T14:28:37Z"}]} |
|
0 commit comments