{"record":{"id":"50512dba3e4a2c1b","repo":"santifer/career-ops","slug":"e-num-score-has-markdown-bold-e-score","errorCode":null,"errorMessage":"#${e.num}: Score has markdown bold: \"${e.score}\"","messagePattern":"#(.+?): Score has markdown bold: \"(.+?)\"","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"verify-pipeline.mjs","lineNumber":229,"sourceCode":"}\nif (badRows === 0) ok('All rows properly formatted');\n\n// --- Check 6: Pending TSVs ---\nlet pendingTsvs = 0;\nif (existsSync(ADDITIONS_DIR)) {\n  const files = readdirSync(ADDITIONS_DIR).filter(f => f.endsWith('.tsv'));\n  pendingTsvs = files.length;\n  if (pendingTsvs > 0) {\n    warn(`${pendingTsvs} pending TSVs in tracker-additions/ (not merged)`);\n  }\n}\nif (pendingTsvs === 0) ok('No pending TSVs');\n\n// --- Check 7: Bold in scores ---\nlet boldScores = 0;\nfor (const e of entries) {\n  if (e.score.includes('**')) {\n    warn(`#${e.num}: Score has markdown bold: \"${e.score}\"`);\n    boldScores++;\n  }\n}\nif (boldScores === 0) ok('No bold in scores');\n\n// --- Check 8: Stale report-number sentinels (GC) ---\n// reserve-report-num.mjs drops NNN-RESERVED.md files in reports/ when a\n// number is claimed.  If the process crashed before writing the real report\n// and deleting the sentinel it will linger.  Sentinels older than 4 h are\n// stale; remove them here so they don't skew the next slot allocation.\nconst SENTINEL_MAX_AGE_MS = 4 * 60 * 60 * 1000;\nlet staleSentinels = 0;\nif (existsSync(REPORTS_DIR)) {\n  const now = Date.now();\n  for (const name of readdirSync(REPORTS_DIR)) {\n    if (!name.endsWith('-RESERVED.md')) continue;\n    const full = join(REPORTS_DIR, name);\n    try {","sourceCodeStart":211,"sourceCodeEnd":247,"githubUrl":"https://github.com/santifer/career-ops/blob/e7abd431fce9348a95261acac9e0c14779c35df8/verify-pipeline.mjs#L211-L247","documentation":"A warning from verify-pipeline.mjs (Check 7) that a tracker row's Score cell contains markdown bold ('**'), violating the canonical-format rule that statuses/scores carry no markdown decoration. Bold breaks downstream parsers (merge-tracker.mjs's looksLikeScoreCell, stats roll-ups) that expect the literal `X.X/5` form.","triggerScenarios":"Running `node verify-pipeline.mjs` when applications.md has a row like `**4.5/5**` — typically from an AI or human writing the table with markdown emphasis, or from a template that bolded the score column.","commonSituations":"Hand-editing the tracker with a markdown editor that auto-bolds; LLM-generated tracker rows using emphasis; copy-pasting rendered markdown tables back into the file.","solutions":["Edit the row to strip the asterisks so the cell reads exactly `4.5/5` (or a sentinel `N/A`/`—`/`-`).","Run `node normalize-statuses.mjs`, which canonicalizes status/score cells, then re-verify.","If many rows are affected, a one-line sed over the Score column of data/applications.md is safe because `**` never belongs there.","Prompt-batch workers to emit plain score cells; never render tracker tables as emphasized markdown."],"exampleFix":"// before\n| 42 | 2026-09-16 | Acme | Sr Backend | **4.5/5** | Applied | ... |\n// after\n| 42 | 2026-09-16 | Acme | Sr Backend | 4.5/5 | Applied | ... |","handlingStrategy":"validation","validationCode":"const SCORE_RE = /^\\d\\.\\d\\/5$|^N\\/A$|^—$|-$/;\nif (!SCORE_RE.test(scoreCell.trim())) fixScoreCell(rowNum, scoreCell);","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Never apply markdown emphasis inside tracker table cells.","Run normalize-statuses.mjs after manual tracker edits.","Instruct LLM batch workers to emit bare `X.X/5` score cells."],"tags":["format-violation","markdown","tracker","data-integrity"],"backgroundTag":"invalid-argument-format","analyzedSha":"e7abd431fce9348a95261acac9e0c14779c35df8","analyzedAt":"2026-09-16T06:35:29.214Z","contentChangedAt":"2026-09-16T06:35:29.214Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}