Skip to content

MBR KB (D:\FSS\KB\MBR\) — part of the unified vault at D:\FSS\KB\. Cross-business content lives in Core\. Architecture: Core\CONSTITUTION.md. SMTM guide: D:\FSS\KB\Core\Processes\Simple Markdown Task Management\SMTM_System.md.

KB Task & Note Management — Claude Code Instructions

Section titled “KB Task & Note Management — Claude Code Instructions”

Full guide: D:\FSS\KB\Core\Processes\Simple Markdown Task Management\SMTM_System.md

WSL Path: /mnt/d/FSS/KB/MBR/_WorkingOn/ Windows Path: D:\FSS\KB\MBR\_WorkingOn\

_WorkingOn/
├── Tasks/
│ ├── _tmp.md # Scratch file for quick/temporary tasks
│ ├── Tasks-Template.md # SSoT template for task files
│ └── Name.md # Named task files — no date prefix (active until complete)
├── Projects/[name]/
│ ├── STATUS.md # Phase tracking + feedback (AI reads first)
│ ├── SPEC.md # Requirements (no date prefix, stays current)
│ ├── PLAN.md # Approach + phases (stays current)
│ ├── TASKS.md # Active task checklist (stays current)
│ ├── LESSONS.md # Insights captured during project
│ └── logs/ # YYYY-MM-DD_Description.md (session logs)
└── Research/[topic]/
  1. Read Tasks/_tmp.md
  2. If working on a project: read Projects/[name]/STATUS.md
  3. Check ## Feedback in STATUS.md — act on it before proceeding

Quick task (no log needed): Add checkbox to Tasks/_tmp.md — tick when done, fill in Claude Response section, never delete history.

Substantive task (needs context across sessions):

  • Create Tasks/Task-Name.md from Tasks-Template.md (no date prefix)
  • Single file for entire lifecycle — append Claude Response / Talbot Response to END, never delete history
  • AI always appends ## Talbot Response + --- after its section
  • Use /task-continue [filename] to continue; /task-complete [filename] to close

Session end:

  1. Tick completed checkboxes in STATUS.md, update Last Updated date
  2. Write log: Projects/[name]/logs/YYYY-MM-DD_Description.md
  3. Add blank ## Feedback section to log
  4. Update Tasks/_tmp.md

YYYY-MM-DD_Description.md — no TYPE prefix on completed logs.

After any session that adds or modifies KB content, suggest a git commit. Do not wait for the user to ask. Automatically propose the commit with a meaningful message covering what changed. The KB repo is /mnt/d/FSS/KB/MBR/.


Favicon generation: adding a new brand to generate-favicon.mjs

Section titled “Favicon generation: adding a new brand to generate-favicon.mjs”

Three places need updating when adding a brand to scripts/generate-favicon.mjs:

  1. Logo filename branch (logoFileName conditional)
  2. Glyph-hiding block — SD hides char-dollar, MBR hides char-bar; match the element ID to the brand’s SVG structure
  3. brandNames map for the site.webmanifest
  4. The brand allowlist in main() (if (!['sd', 'ts', 'mbr'].includes(brand)))

The neutral-color mapping (black→primary, gray→secondary) is a no-op for brands with actual colors already in the SVG — the script still works correctly without any special-casing.

SVG favicon verification: inline SVGs only in Playwright

Section titled “SVG favicon verification: inline SVGs only in Playwright”

img src="file:///..." does not work in Playwright’s headless browser (page.setContent). To verify SVG rendering at multiple sizes, read the SVG files with fs.readFileSync and embed them directly as inline SVG in the HTML string. Use a sized() helper that replaces width="N" height="N" in the SVG tag to render at different display sizes.

SMTM task files use Name.md format — never YYYY-MM-DD_Name.md. Dates belong in log files and project logs, not task files. Task files are active work; their creation date is captured in frontmatter or git history.

CSS keyframe animation: set explicit initial state in CSS

Section titled “CSS keyframe animation: set explicit initial state in CSS”

When using @keyframes for logo/UI animations, the element’s state before the animation fires depends on the browser. Always set explicit CSS properties (e.g. opacity: 1 or opacity: 0) on the element itself — don’t rely solely on the 0% keyframe value. This prevents a flash-of-wrong-state on page load before the animation initialises. This is especially relevant for stacked elements (e.g. grid-area: 1/1) where the initial visibility must be correct before the first keyframe fires.

Multi-session design tasks (logo iterations, UX explorations) should produce:

  1. Lean decision log in 09_Logs/Decisions/YYYY-MM-DD_Description.md — what was decided and why
  2. Full task file moved to _WorkingOn/Brainstorming/archive/YYYY-MM-DD_TaskName.md — full iteration history as design audit trail

The relevant spec doc (e.g., Brand.md) canonizes the final outcome. Never delete the iteration history — a single session’s reasoning can resolve future ambiguity about why a decision was made.

CSS overlay positioning on text glyphs: use transform, not bottom

Section titled “CSS overlay positioning on text glyphs: use transform, not bottom”

When positioning a CSS element (e.g., a ::after bar) relative to a font glyph, bottom/top/height CSS properties snap to integer pixels. This snapping is non-monotonic — at different font sizes the snap error changes direction (e.g., bottom: 0.06em at 1.25rem = 1.2px snaps DOWN 17%, but at 2rem = 1.92px snaps UP 4%). No single bottom value is correct at all sizes; tuning against one size breaks another. Fix: anchor the overlay with transform: translate() — GPU-rendered in floating-point, no pixel snap.

Derivation pattern: original bottom: Xem; height: Hem → equivalent transform: top: 0; height: Hem; transform: translateY(1em - X - H).

CSS positioning diagnostic: build a multi-size grid before tuning values

Section titled “CSS positioning diagnostic: build a multi-size grid before tuning values”

When a CSS positioning value works at one font-size/zoom but fails at others, stop tuning and diagnose. Build a diagnostic HTML page showing: all relevant font-sizes × weights × zoom levels, with hairline rulers marking the ground-truth metric positions (x-height top/middle, baseline). Take one screenshot per zoom level. The misalignment pattern across the grid identifies the root cause:

  • Non-monotonic drift (too low here, too high there) → pixel snap on layout properties → use transform
  • Zoom-dependent shift (fine at 100%, wrong at 125%) → font hinting → use geometricPrecision
  • Context-only failure (fine in isolation, wrong in card heading) → inherited styles from parent (line-height, font-weight) → inspect the specific context’s CSS

Without the grid, value-tuning loops can run indefinitely because you’re calibrating against a moving target at a single test point.

Font hinting causes glyph position drift across zoom levels

Section titled “Font hinting causes glyph position drift across zoom levels”

When overlaying a CSS element on a font glyph (e.g., a bar through an s), font hinting re-positions the glyph within the em-box at different browser zoom levels (100% vs 125% vs 150%). The CSS overlay is math-stable; the glyph moves. Result: bar appears in different relative positions at each zoom — no CSS positioning value can track this. Fix: add text-rendering: geometricPrecision; font-optical-sizing: none to the target character only (not the whole component). This disables hinting for that glyph so it renders at its math x-height regardless of zoom, aligning with the math-positioned CSS overlay.

Trade-off: the un-hinted character may look slightly fuzzier at very small sizes (12–14px), but Inter renders cleanly enough that this is imperceptible in practice.


After any task that produces a log or task file, the final message must include both paths:

📄 Task/log file:
WSL: /mnt/d/FSS/KB/MBR/_WorkingOn/...
Windows: D:\FSS\KB\MBR\_WorkingOn\...
SkillWhat it does
/task-start [file]First session on a task: read, execute, append first Claude Response
/task-continue [file]Process latest Talbot Response in task file, append Claude Response
/task-complete [file]Close task: LESSONS.md candidates, purge, log/delete, commit offer
/session-closeProject session end: write log, update STATUS.md, update _tmp.md
/project-start [name]Create project folder with STATUS.md and initial structure