{"record":{"id":"97d4faebc7d0b981","repo":"glanceapp/glance","slug":"page-d-has-no-columns","errorCode":null,"errorMessage":"page %d has no columns","messagePattern":"page (.+?) has no columns","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/glance/config.go","lineNumber":504,"sourceCode":"\tfor i := range config.Pages {\n\t\tpage := &config.Pages[i]\n\n\t\tif page.Title == \"\" {\n\t\t\treturn fmt.Errorf(\"page %d has no name\", i+1)\n\t\t}\n\n\t\tif page.Width != \"\" && (page.Width != \"wide\" && page.Width != \"slim\" && page.Width != \"default\") {\n\t\t\treturn fmt.Errorf(\"page %d: width can only be either wide or slim\", i+1)\n\t\t}\n\n\t\tif page.DesktopNavigationWidth != \"\" {\n\t\t\tif page.DesktopNavigationWidth != \"wide\" && page.DesktopNavigationWidth != \"slim\" && page.DesktopNavigationWidth != \"default\" {\n\t\t\t\treturn fmt.Errorf(\"page %d: desktop-navigation-width can only be either wide or slim\", i+1)\n\t\t\t}\n\t\t}\n\n\t\tif len(page.Columns) == 0 {\n\t\t\treturn fmt.Errorf(\"page %d has no columns\", i+1)\n\t\t}\n\n\t\tif page.Width == \"slim\" {\n\t\t\tif len(page.Columns) > 2 {\n\t\t\t\treturn fmt.Errorf(\"page %d is slim and cannot have more than 2 columns\", i+1)\n\t\t\t}\n\t\t} else {\n\t\t\tif len(page.Columns) > 3 {\n\t\t\t\treturn fmt.Errorf(\"page %d has more than 3 columns\", i+1)\n\t\t\t}\n\t\t}\n\n\t\tcolumnSizesCount := make(map[string]int)\n\n\t\tfor j := range page.Columns {\n\t\t\tcolumn := &page.Columns[j]\n\n\t\t\tif column.Size != \"small\" && column.Size != \"full\" {","sourceCodeStart":486,"sourceCodeEnd":522,"githubUrl":"https://github.com/glanceapp/glance/blob/91324e8de762702e97b0ac5c8e36271d644d8642/internal/glance/config.go#L486-L522","documentation":"Each page must contain at least one column; a page with an empty or missing columns list fails validation. Columns are the top-level layout containers that hold widgets, so a column-less page cannot render anything.","triggerScenarios":"A page entry with columns: omitted, columns: [] (empty list), or indentation that places the columns key outside the page item. Includes that produce a page without columns also trigger it.","commonSituations":"New page scaffolded with only a name; commenting out all columns during layout experiments; YAML indentation errors merging includes.","solutions":["Add a columns list with at least one column (size: full or small) to the page named by its number","Fix indentation so columns belongs to the page item","If building pages via includes, ensure the included fragment contains the columns structure"],"exampleFix":"# before\n- name: Home\n# after\n- name: Home\n  columns:\n    - size: full\n      widgets: []","handlingStrategy":"validation","validationCode":"for i, p := range cfg.Pages {\n    if len(p.Columns) == 0 {\n        return fmt.Errorf(\"page %d has no columns\", i+1)\n    }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Scaffold pages from a snippet that already contains one full column","After commenting out columns while debugging, grep for 'columns:' before deploying"],"tags":["glance","configuration","validation","yaml"],"backgroundTag":null,"analyzedSha":"91324e8de762702e97b0ac5c8e36271d644d8642","analyzedAt":"2026-08-15T14:12:54.279Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}