WORK-084
ID:WORK-084Status:done

Inject $file.created and $file.modified Variables into Content Pipeline

Priority:highComplexity:moderateMilestone:v1.0.0
claude/align-sidenav-styling-4MuxV View source

Criteria completion

No incremental history — criteria tracking started on Apr 17.

Branches 3
History 4
  1. f0a845a
    Content editedby Claude
    chore(plan): check off acceptance criteria for 14 completed v1.0.0 work
  2. f87ae8d
    Content editedby Claude
    feat: implement file-derived timestamps for runes (SPEC-029)
  3. 2a05e00
    Content editedby Claude
    plan: assign WORK-083 through WORK-087 to milestone v1.0.0
  4. 43cadfe
    Created (done)by Claude
    plan: break down SPEC-029 into work items WORK-083 through WORK-087

Summary

Wire the shared git timestamp utility into packages/content/src/site.ts so that every page's Markdoc transform config includes $file.created and $file.modified variables. These join the existing $page and $frontmatter variables, making file timestamps available to any rune via standard Markdoc variable references.

Acceptance Criteria

  • loadContent() in packages/content/src/site.ts calls the git timestamp utility once before the page loop
  • Each page's contentVariables includes a file object with created and modified string properties
  • Three-tier resolution order: frontmatter override > git history > fs.stat fallback
  • When no timestamp is available, the variable is undefined (not an empty string or null)
  • Variables are accessible in Markdoc schemas as $file.created and $file.modified
  • Existing $page and $frontmatter variables are unaffected
  • Integration test: a page with no frontmatter dates gets git-derived $file.created and $file.modified
  • Integration test: a page with explicit frontmatter created/modified uses those values instead of git data

Approach

  1. Import the git timestamp utility in packages/content/src/site.ts
  2. Call it once at the start of loadContent() with the content root directory
  3. In the per-page loop, look up timestamps for each file path and merge into contentVariables
  4. Apply the three-tier fallback: check frontmatter first, then git map, then fs.stat

References

  • SPEC-029 (Phase 2 — Variable Injection)
  • WORK-083 (shared git timestamp utility — dependency)
  • packages/content/src/site.ts — existing variable injection point