[{"data":1,"prerenderedAt":544},["ShallowReactive",2],{"repo-tree":3,"repo-\u002Fapps\u002Flearning-api\u002Fevals-playground\u002Fknown-issues\u002Fdocling-empty-section-headers\u002Freadme":283},[4,7,10,13,16,19,22,25,28,31,34,37,40,43,46,49,52,55,58,61,64,67,69,72,75,78,81,84,86,88,90,93,96,99,102,105,108,111,114,117,120,123,125,127,129,131,133,135,138,141,143,146,149,152,155,158,161,164,167,169,172,175,178,180,183,186,189,192,195,198,201,203,206,209,212,215,218,221,224,227,230,233,236,239,242,245,248,251,254,257,260,263,266,269,272,275,278,281],{"path":5,"title":6},"\u002Fagents\u002Fbackend-code-style","Backend Conventions",{"path":8,"title":9},"\u002Fagents\u002Fdatabase","Database",{"path":11,"title":12},"\u002Fagents\u002Fportal-code-style","Portal Conventions",{"path":14,"title":15},"\u002Fagents\u002Ftranslation","Translation",{"path":17,"title":18},"\u002Fconventions\u002Fbackend-coding","Backend coding conventions",{"path":20,"title":21},"\u002Fconventions\u002Ffrontend-coding","Frontend coding conventions",{"path":23,"title":24},"\u002Fdevelopment-process","Development process",{"path":26,"title":27},"\u002Flearning-api-preview-hetzner-setup","Learning API Preview on Hetzner + Cloudflare",{"path":29,"title":30},"\u002Flearning-api-preview-vm-plan","Learning API Preview VM Plan",{"path":32,"title":33},"\u002Fmonorepo-structure","Monorepo structure",{"path":35,"title":36},"\u002Foperations","Operations — bugs and support",{"path":38,"title":39},"\u002Fpostmortems\u002F2026-03-16_onboarding-currency-regression","Onboarding Zod transform silently broken — web signups assigned wrong checkout currency",{"path":41,"title":42},"\u002Fpostmortems\u002Freadme","Postmortems",{"path":44,"title":45},"\u002Fpostmortems\u002F_template","TEMPLATE",{"path":47,"title":48},"\u002Fpostmortems\u002Fposthog-comparison","Postmortem practice — comparison with PostHog",{"path":50,"title":51},"\u002Fpreview-environment-plan","Preview Environment Plan",{"path":53,"title":54},"\u002Fprinciples","Engineering principles",{"path":56,"title":57},"\u002Fworking-with-ai","Working with AI",{"path":59,"title":60},"\u002F.claude\u002Fskills\u002Feval-playground\u002Fskill","Eval Playground — Co-development Skill",{"path":62,"title":63},"\u002F.claude\u002Fskills\u002Ffigma-diff-section\u002Fskill","Figma Diff Section Pipeline",{"path":65,"title":66},"\u002Fagents","AGENTS.md",{"path":68,"title":66},"\u002Fclaude",{"path":70,"title":71},"\u002Freadme","Studyflash",{"path":73,"title":74},"\u002Fapps\u002Fcore-api\u002Fagents","Core API (apps\u002Fcore-api)",{"path":76,"title":77},"\u002Fapps\u002Fcore-api\u002Freadme","README",{"path":79,"title":80},"\u002Fapps\u002Femail-previews\u002Fagents","Email Previews (apps\u002Femail-previews)",{"path":82,"title":83},"\u002Fapps\u002Flanding-page\u002Fagents","Landing Page (apps\u002Flanding-page)",{"path":85,"title":83},"\u002Fapps\u002Flanding-page\u002Fclaude",{"path":87,"title":66},"\u002Fapps\u002Flearning-api\u002Fagents",{"path":89,"title":77},"\u002Fapps\u002Flearning-api\u002Freadme",{"path":91,"title":92},"\u002Fapps\u002Flearning-api\u002Fevals-playground\u002Feval_metrics_design","Surface-Specific Eval Metrics Design",{"path":94,"title":95},"\u002Fapps\u002Flearning-api\u002Fevals-playground\u002Ftest_set","Quiz Eval Test Set",{"path":97,"title":98},"\u002Fapps\u002Flearning-api\u002Fevals-playground\u002Ffrontend\u002Freadme","React + TypeScript + Vite",{"path":100,"title":101},"\u002Fapps\u002Flearning-api\u002Fevals-playground\u002Fknown-issues\u002Fcontent-pillar-shallow-coverage\u002Freadme","Content pillar misses subtopics in dense documents",{"path":103,"title":104},"\u002Fapps\u002Flearning-api\u002Fevals-playground\u002Fknown-issues\u002Fdocling-empty-section-headers\u002Freadme","Empty section headers dropped by docling chunker",{"path":106,"title":107},"\u002Fapps\u002Flearning-api\u002Fevals-playground\u002Fknown-issues\u002Fdocling-table-reading-order\u002Freadme","Table\u002Fbox layout causes wrong reading order",{"path":109,"title":110},"\u002Fapps\u002Flearning-api\u002Fevals-playground\u002Fmetrics\u002Freadme","Quiz eval metrics — canonical rubrics",{"path":112,"title":113},"\u002Fapps\u002Flearning-api\u002Fevals-playground\u002Freports\u002F2026-04-12-quiz-summary-feedback-current-state","Quiz and Summary Feedback Current State",{"path":115,"title":116},"\u002Fapps\u002Flearning-api\u002Fevals-playground\u002Freports\u002F2026-04-24-quiz-eval-metrics","Quiz Evaluation Metrics",{"path":118,"title":119},"\u002Fapps\u002Flearning-api\u002Fevals-playground\u002Freports\u002F2026-05-01-quiz-eval-current-state","Quiz Eval Current State",{"path":121,"title":122},"\u002Fapps\u002Flearning-api\u002Fmonitoring\u002Freadme","Monitoring Stack",{"path":124,"title":77},"\u002Fapps\u002Flearning-api\u002Fshared\u002Freadme",{"path":126,"title":77},"\u002Fapps\u002Flearning-api\u002Fworkers\u002Flearning_agents\u002Fflashcard_agent\u002Freadme",{"path":128,"title":77},"\u002Fapps\u002Flearning-api\u002Fworkers\u002Flearning_agents\u002Fingestion_agent\u002Freadme",{"path":130,"title":77},"\u002Fapps\u002Flearning-api\u002Fworkers\u002Flearning_agents\u002Fquiz_agent\u002Freadme",{"path":132,"title":77},"\u002Fapps\u002Flearning-api\u002Fworkers\u002Flearning_agents\u002Fsummary_agent\u002Freadme",{"path":134,"title":77},"\u002Fapps\u002Flearning-api\u002Fworkers\u002Fparser\u002Freadme",{"path":136,"title":137},"\u002Fapps\u002Fmarketing-emails-preview\u002Fagents","Marketing Emails Preview (apps\u002Fmarketing-emails-preview)",{"path":139,"title":140},"\u002Fapps\u002Fmobile-app\u002Fagents","StudyFlash Mobile App - Claude Code Configuration",{"path":142,"title":140},"\u002Fapps\u002Fmobile-app\u002Fclaude",{"path":144,"title":145},"\u002Fapps\u002Fmountain-max\u002Fagents","Mountain Max (apps\u002Fmountain-max)",{"path":147,"title":148},"\u002Fapps\u002Fmountain-max\u002Fgame\u002Freadme","Mountain Max Game",{"path":150,"title":151},"\u002Fapps\u002Fportal\u002Fagents","Portal (apps\u002Fportal)",{"path":153,"title":154},"\u002Fapps\u002Fportal\u002Freadme","Nuxt Minimal Starter",{"path":156,"title":157},"\u002Fapps\u002Fportal\u002Fapp\u002Fcomposables\u002Ffiles\u002Freadme","File Upload Composables",{"path":159,"title":160},"\u002Fapps\u002Fportal\u002Fdocs\u002Flibrary-routing","Library Routing Documentation",{"path":162,"title":163},"\u002Fapps\u002Fsupabase\u002Fagents","Supabase (apps\u002Fsupabase)",{"path":165,"title":166},"\u002Fapps\u002Fwrapped\u002Fagents","Wrapped (apps\u002Fwrapped)",{"path":168,"title":98},"\u002Fapps\u002Fwrapped\u002Freadme",{"path":170,"title":171},"\u002Finfra\u002Freadme","infra\u002F",{"path":173,"title":174},"\u002Finfra\u002Fdns\u002Freadme","DNS Infrastructure",{"path":176,"title":177},"\u002Finfra\u002Fdokploy\u002Freadme","studyflash-dokploy",{"path":179,"title":77},"\u002Finfra\u002Fdokploy\u002Fsdk\u002Fnodejs\u002Freadme",{"path":181,"title":182},"\u002Finfra\u002Finfisical\u002Freadme","Infisical Infrastructure",{"path":184,"title":185},"\u002Finfra\u002Flearning-api\u002Freadme","Pulumi GCP TypeScript Template",{"path":187,"title":188},"\u002Finfra\u002Fopenreplay\u002Freadme","OpenReplay on Hetzner",{"path":190,"title":191},"\u002Finfra\u002Fscripts\u002Freadme","infra\u002Fscripts\u002F",{"path":193,"title":194},"\u002Finfra\u002Fturborepo-cache\u002Freadme","Turborepo Remote Cache Infrastructure",{"path":196,"title":197},"\u002Finternal\u002Fchatwoot\u002Freadme","Chatwoot Infrastructure",{"path":199,"title":200},"\u002Finternal\u002Fchatwoot\u002Fprovider\u002Freadme","studyflash-chatwoot-provider",{"path":202,"title":77},"\u002Finternal\u002Fchatwoot\u002Fprovider\u002Fsdk\u002Fnodejs\u002Freadme",{"path":204,"title":205},"\u002Finternal\u002Fdocs\u002Freadme","internal\u002Fdocs",{"path":207,"title":208},"\u002Finternal\u002Fsupport-bot\u002Fclaude","Support Bot (Maximilian)",{"path":210,"title":211},"\u002Finternal\u002Fsupport-bot\u002Freadme","Studyflash Customer Support Bot (Maximilian)",{"path":213,"title":214},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Faccount_issues","Account Issues",{"path":216,"title":217},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Fbilling_invoice","Billing Invoice",{"path":219,"title":220},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Fcontent_upload","Content Upload",{"path":222,"title":223},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Fdata_loss","Data Loss",{"path":225,"title":226},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Fflashcard_issues","Flashcard Issues",{"path":228,"title":229},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Fgarbage","Garbage",{"path":231,"title":232},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Fgeneral_how_to","General How To",{"path":234,"title":235},"\u002Finternal\u002Fsupport-bot\u002Fkb","Knowledge Base Index",{"path":237,"title":238},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Flanguage_issues","Language Issues",{"path":240,"title":241},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Fmindmap_issues","Mindmap Issues",{"path":243,"title":244},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Fmisunderstanding","Misunderstanding",{"path":246,"title":247},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Fmock_exam_issues","Mock Exam Issues",{"path":249,"title":250},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Fpodcast_issues","Podcast Issues",{"path":252,"title":253},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Fquiz_issues","Quiz Issues",{"path":255,"title":256},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Frefund_request","Refund Request",{"path":258,"title":259},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Fsubscription_cancellation","Subscription Cancellation",{"path":261,"title":262},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Fsubscription_info","Subscription Info",{"path":264,"title":265},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Fsummary_issues","Summary Issues",{"path":267,"title":268},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Ftechnical_errors","Technical Errors",{"path":270,"title":271},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Fvideo_issues","Video Issues",{"path":273,"title":274},"\u002Fpackages\u002Fcommon\u002Fdocs\u002Fearly-access-features","Declarative Early Access Features",{"path":276,"title":277},"\u002Fpackages\u002Fcommon\u002Fscripts\u002Freadme","Common Package Scripts",{"path":279,"title":280},"\u002Fpackages\u002Fdevtools\u002Ffigma-plugins\u002Freadme","Figma plugins",{"path":282,"title":77},"\u002Fpackages\u002Fpulumi-infisical\u002Freadme",{"id":284,"title":104,"body":285,"description":537,"extension":538,"lastReviewed":539,"meta":540,"navigation":405,"owner":539,"path":103,"seo":541,"status":539,"stem":542,"tags":539,"__hash__":543},"repo\u002Fapps\u002Flearning-api\u002Fevals-playground\u002Fknown-issues\u002Fdocling-empty-section-headers\u002FREADME.md",{"type":286,"value":287,"toc":524},"minimark",[288,292,327,332,344,348,353,356,369,377,447,450,457,464,467,481,485,488,492,499,503,520],[289,290,104],"h1",{"id":291},"empty-section-headers-dropped-by-docling-chunker",[293,294,295,299,300,303,304,311,314,315,318,319,322,323,326],"p",{},[296,297,298],"strong",{},"GitHub issue",": #1861\n",[296,301,302],{},"PDF",": ",[305,306,310],"a",{"href":307,"rel":308},"https:\u002F\u002Fhxueibngmyemxbjvqmph.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Feval-known-issues\u002Fdocling-empty-section-headers\u002Fvirtue-ethics.pdf",[309],"nofollow","virtue-ethics.pdf",[296,312,313],{},"Status",": Open\n",[296,316,317],{},"Categories",": parsing, chunking, content-pillars, mindmaps, flashcards\n",[296,320,321],{},"Deck name",": 2.virtueethics&feministethics\n",[296,324,325],{},"Document type",": University lecture slides (ethics\u002Fpsychology)",[328,329,331],"h2",{"id":330},"problem","Problem",[293,333,334,335,339,340,343],{},"When a section header has no body text before the next header, docling's chunker drops it entirely. It doesn't appear in any chunk's ",[336,337,338],"code",{},"text"," or ",[336,341,342],{},"headings"," array. The heading is silently lost from all downstream features.",[328,345,347],{"id":346},"evidence","Evidence",[349,350,352],"h3",{"id":351},"pdf-visual","PDF visual",[293,354,355],{},"Page 2 of the PDF shows a slide with this structure:",[357,358,359,363,366],"ul",{},[360,361,362],"li",{},"\"Determining moral standards\" (heading with body text below)",[360,364,365],{},"\"Theories of right conduct\" (heading with NO body text — next item is another heading)",[360,367,368],{},"\"Central questions of normative ethics:\" (heading with bullet points)",[349,370,372,373,376],{"id":371},"extracted-markdown-from-md_url","Extracted markdown (from ",[336,374,375],{},"md_url",")",[378,379,384],"pre",{"className":380,"code":381,"language":382,"meta":383,"style":383},"language-markdown shiki shiki-themes github-light github-dark","- Standards can help in applying principles - they are based on principles\n- One principle may underlie different norms (interpretations)\n\n## Theories of right conduct\n\n## Central questions of normative ethics:\n\n- What moral principles should we accept?\n- What makes right actions right?\n- Is there a single fundamental principle of morality?\n","markdown","",[336,385,386,394,400,407,413,418,424,429,435,441],{"__ignoreMap":383},[387,388,391],"span",{"class":389,"line":390},"line",1,[387,392,393],{},"- Standards can help in applying principles - they are based on principles\n",[387,395,397],{"class":389,"line":396},2,[387,398,399],{},"- One principle may underlie different norms (interpretations)\n",[387,401,403],{"class":389,"line":402},3,[387,404,406],{"emptyLinePlaceholder":405},true,"\n",[387,408,410],{"class":389,"line":409},4,[387,411,412],{},"## Theories of right conduct\n",[387,414,416],{"class":389,"line":415},5,[387,417,406],{"emptyLinePlaceholder":405},[387,419,421],{"class":389,"line":420},6,[387,422,423],{},"## Central questions of normative ethics:\n",[387,425,427],{"class":389,"line":426},7,[387,428,406],{"emptyLinePlaceholder":405},[387,430,432],{"class":389,"line":431},8,[387,433,434],{},"- What moral principles should we accept?\n",[387,436,438],{"class":389,"line":437},9,[387,439,440],{},"- What makes right actions right?\n",[387,442,444],{"class":389,"line":443},10,[387,445,446],{},"- Is there a single fundamental principle of morality?\n",[293,448,449],{},"The heading exists in markdown — docling's document parser extracted it correctly.",[349,451,453,454,376],{"id":452},"docling-chunks-output-from-docling_chunks_url","Docling chunks output (from ",[336,455,456],{},"docling_chunks_url",[378,458,462],{"className":459,"code":461,"language":338},[460],"language-text","chunk 2:\n  chunk_index: 2\n  headings: ['Determining moral standards']\n  page_start: 1, page_end: 2\n  text: 'The approach we take to the question of ethics already fashions and delimits\n        the very question of what we consider to be ethical or potentially ethical\n        in the first place...'\n\nchunk 3:\n  chunk_index: 3\n  headings: ['Central questions of normative ethics:']\n  page_start: 2, page_end: 2\n  text: '- What moral principles should we accept?\n        - What makes right actions right?\n        - Is there a single fundamental principle of morality?'\n\nchunk 4:\n  chunk_index: 4\n  headings: ['Normative applied ethics']\n  page_start: 2, page_end: 2\n  text: '- The top-down approach to applied ethics:\n        - Work out the correct normative theory in general terms...'\n",[336,463,461],{"__ignoreMap":383},[293,465,466],{},"\"Theories of right conduct\" is completely absent:",[357,468,469,475,478],{},[360,470,471,472,474],{},"Not in chunk 3's ",[336,473,342],{}," breadcrumb (should be a parent heading)",[360,476,477],{},"Not as its own chunk",[360,479,480],{},"Not in any chunk's text",[349,482,484],{"id":483},"content-pillar-impact","Content pillar impact",[293,486,487],{},"The content pillar for this deck has no topic or subtopic referencing \"Theories of right conduct.\" The structural grouping that this heading provides (it's a parent category for multiple ethical frameworks) is lost.",[328,489,491],{"id":490},"root-cause","Root cause",[293,493,494,495,498],{},"Docling's hierarchical chunker (",[336,496,497],{},"docling_core.transforms.chunker",") skips headings that have no body text before the next heading. The heading is in the document tree but gets no chunk assignment because there's no text content to attach to it.",[328,500,502],{"id":501},"impact","Impact",[357,504,505,508,511,514,517],{},[360,506,507],{},"Content pillars miss a structural grouping heading",[360,509,510],{},"Flashcards\u002Fquizzes can't reference this concept",[360,512,513],{},"Mindmaps miss a branch that would organize sub-topics",[360,515,516],{},"Affects any document where headings act as category groupers (common in textbooks, lecture slides)",[360,518,519],{},"Particularly common in slide-based documents where headings introduce sections without prose",[521,522,523],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":383,"searchDepth":396,"depth":396,"links":525},[526,527,535,536],{"id":330,"depth":396,"text":331},{"id":346,"depth":396,"text":347,"children":528},[529,530,532,534],{"id":351,"depth":402,"text":352},{"id":371,"depth":402,"text":531},"Extracted markdown (from md_url)",{"id":452,"depth":402,"text":533},"Docling chunks output (from docling_chunks_url)",{"id":483,"depth":402,"text":484},{"id":490,"depth":396,"text":491},{"id":501,"depth":396,"text":502},"GitHub issue: #1861\nPDF: virtue-ethics.pdfStatus: Open\nCategories: parsing, chunking, content-pillars, mindmaps, flashcards\nDeck name: 2.virtueethics&feministethics\nDocument type: University lecture slides (ethics\u002Fpsychology)","md",null,{},{"title":104,"description":537},"apps\u002Flearning-api\u002Fevals-playground\u002Fknown-issues\u002Fdocling-empty-section-headers\u002FREADME","vaVyQ1MqWEZzHYAK7Xh1sgOZA6pMBBTMnX4NFHtzfHQ",1779007962949]