| title | Footer Remediation Guide |
|---|---|
| description | How to identify, fix, and prevent duplicate footers in Markdown files |
| version | v1.0.2 |
| created_date | 2026-05-28 |
| type | guide |
| category | governance |
The root README.md (and likely other files) contains multiple duplicate footer blocks. Example from README.md tail:
*Built by 🧱 LightSpeedWP with ☕, 🚀, and open-source spirit!*
[Contributors](...)
*Have questions? Ping us on GitHub! 🐙 Made with 💚 by LightSpeedWP*
[Contact](...)
*Built by 🧱 LightSpeedWP with ☕, 🚀, and open-source spirit!*
[Contributors](...)
*Have questions? Ping us on GitHub! 🐙 Made with 💚 by LightSpeedWP*
[Contact](...)
[... repeated 10+ more times ...]- Clutter & Readability: Document footers become massive, pushing actual content up
- Inconsistency: Different files end up with different footers (manual copy-paste errors)
- Maintenance Burden: Updating footers requires editing multiple files
- Unmaintainable: No single source of truth for footer templates
- Validation Failure: Hard to validate that footers are correct without manual inspection
Currently, footers are:
- Manually added to each document
- Copy-pasted between files (risk of duplicates)
- Not validated — no schema enforcement
- Not centralized — no predefined library
schema/footer-config.schema.json— JSON Schema defining valid footer structureconfig/footers.config.yaml— Predefined footer library with 13 category-specific templates.github/scripts/validate-footers.js— Validation script to detect, fix, and backfill violations
✅ One footer per document — Validation enforces this ✅ Predefined templates — Choose from validated, category-specific footers ✅ Schema validation — Prevent duplicates, missing footers, and invalid footers ✅ Automation-ready — Footer insertion can be automated via agent
The configuration defines 15 document categories with appropriate footers:
| Category | Default Footer | Use For |
|---|---|---|
readme |
lightspeed-standard |
Project overviews, getting started |
docs |
lightspeed-standard |
User guides, tutorials, API docs |
ai-ops |
ai-ops-standard |
Agent specs, automation governance |
agents |
ai-ops-standard |
Agent specifications and examples |
instructions |
standards-footer |
Coding standards, guidelines |
prompts |
ai-ops-standard |
Prompts and prompt engineering |
schema |
schema-footer |
Data schemas and validation |
audit |
audit-footer |
Audit reports and findings |
research |
research-footer |
Research and analysis docs |
workflow |
ai-ops-standard |
GitHub Actions and CI/CD |
issue |
issue-footer |
Issue bodies and templates |
pull-request |
pr-footer |
PR descriptions and templates |
awesome-copilot |
copilot-footer |
Copilot tips and collections |
governance |
governance-footer |
Policies and decision records |
test |
lightspeed-standard |
Test documentation |
---
*Built by 🧱 LightSpeedWP with ☕, 🚀, and open-source spirit!*
[🔗 Website](https://lightspeedwp.agency) · [📧 Contact](https://lightspeedwp.agency/contact) · [👥 Contributors](https://github.com/lightspeedwp/.github/graphs/contributors)Use for: README files, general documentation Lines: 3 lines (title + blank + content)
---
*Maintained by the 🤖 LightSpeedWP Automation Team*
[📋 AI Governance](https://github.com/lightspeedwp/.github/blob/HEAD/docs/AUTOMATION.md) · [🧠 Agents](https://github.com/lightspeedwp/.github/blob/HEAD/AGENTS.md) · [📞 Contact](https://lightspeedwp.agency/contact)Use for: AI ops, agent specs, automation docs Lines: 3 lines
---
📐 *Schema validated by LightSpeedWP — always compliant.*
[📋 Coding Standards](https://github.com/lightspeedwp/.github/blob/develop/instructions/coding-standards.instructions.md) · [🔗 Related Files](https://github.com/lightspeedwp/.github/tree/develop/instructions)Use for: Instructions, coding standards, guidelines Lines: 3 lines
See config/footers.config.yaml for complete list with 13 templates.
Check the end of README.md:
tail -30 README.mdYou'll see the duplicate footers. Note how many are there.
Based on the document category, choose the appropriate footer:
- Root README is a project overview → category:
readme - Default footer for
readme:lightspeed-standard
Keep only one footer at the end of the document. Remove all others:
- Delete all duplicate footer blocks except the first one
- Keep the separator
---and the first footer block - Delete lines after the first footer
Example (before):
# Content...
*Built by 🧱...*
[Contributors]...
*Have questions?...*
[Contact]...
*Built by 🧱...* ← DELETE THIS
[Contributors]... ← DELETE THIS
*Have questions?...* ← DELETE THIS
[Contact]... ← DELETE THIS
[... repeated multiple times ...]Example (after):
# Content...
---
*Built by 🧱 LightSpeedWP with ☕, 🚀, and open-source spirit!*
[🔗 Website](https://lightspeedwp.agency) · [📧 Contact](https://lightspeedwp.agency/contact) · [👥 Contributors](https://github.com/lightspeedwp/.github/graphs/contributors)Add category metadata to the document's frontmatter (if not already present):
---
title: "LightSpeed .github Repository"
category: "readme"
---Run the validation script:
node .github/scripts/validate-footers.js --verboseExpected output:
✅ All files validated successfully!
git add README.md
git commit -m "fix: remove duplicate footers from root README.md
- Remove 10+ duplicate footer blocks
- Keep single 'lightspeed-standard' footer per schema
- Add 'category: readme' to frontmatter
- Validate against footer-config.schema.json
References: branding meta agent initiative #33"node .github/scripts/validate-footers.jsnode .github/scripts/validate-footers.js --verbosenode .github/scripts/validate-footers.js --report=violations.jsonnode .github/scripts/validate-footers.js --fixThis will:
- Detect all duplicate/invalid footers
- Create
.backupfiles for each file modified - Remove duplicate footers
- Keep one footer per document
Then review, test, and commit changes:
# Review changes
git diff
# Commit if satisfied
git add -A
git commit -m "fix: remediate duplicate footers across repository"
# Clean up backups (after confirming changes are good)
find . -name "*.backup" -delete
git add -A
git commit -m "chore: remove backup files"Every Markdown file should declare its category:
---
title: "Document Title"
category: "docs" # Required for footer validation
---Never manually write footers. Instead:
- Identify the document category
- Look up the default footer for that category in
config/footers.config.yaml - Copy the template and paste it at the end of your document
Example:
For a "docs" document, use the default lightspeed-standard footer:
# Documentation Title
...content...
---
*Built by 🧱 LightSpeedWP with ☕, 🚀, and open-source spirit!*
[🔗 Website](https://lightspeedwp.agency) · [📧 Contact](https://lightspeedwp.agency/contact) · [👥 Contributors](https://github.com/lightspeedwp/.github/graphs/contributors)Add validation to your CI/CD pipeline:
# .github/workflows/footer-validation.yml
name: "Footer Validation"
on:
pull_request:
paths:
- "**.md"
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: npm run validate:footers -- --changed-onlyThis ensures every PR is validated before merge.
The branding meta agent (issue #33) will eventually automate footer insertion:
- Read document frontmatter (category, tags)
- Look up appropriate footer in
config/footers.config.yaml - Insert footer automatically
- Validate against schema
- Report any errors
Until then, manually add footers from the predefined library.
The schema enforces:
- Max 5 lines per footer — Keep footers concise
- Zero duplicates allowed — One footer per document only
- Category required — All docs must declare a category
- Valid footer IDs — Footer must exist in predefined library
See schema/footer-config.schema.json for full validation rules.
A: No. All footers must be predefined in config/footers.config.yaml. If you need a new footer:
- Open an issue requesting the new footer
- Propose the template and category
- Get approval
- Add to
footers.config.yaml - Update schema
- Re-run validation
This prevents footer proliferation and ensures consistency.
A: No. The validation rule allow_multiple_footers_per_document: false enforces one footer per document. This prevents the duplicate footer problem entirely.
A: All documents should have a footer for branding consistency. Use the minimal footer if needed:
---
Made with 💚 by [LightSpeedWP](https://lightspeedwp.agency)A: Some footers support variables. Define them in the footer template:
audit-footer:
template: |
🔍 *Audit report generated {audit_date} by the LightSpeedWP team.*
variables:
audit_date: "Date the audit was performed (YYYY-MM-DD)"Automation should populate variables before inserting the footer.
A: During remediation:
- Identify the closest matching predefined footer
- Replace custom footer with predefined version
- Document in commit message if exact match wasn't available
Example:
Custom footer: "Maintained by the team"
Closest match: "lightspeed-standard"
Action: Replace and note in commit
- Schema definition:
schema/footer-config.schema.json - Footer library:
config/footers.config.yaml - Validation script:
.github/scripts/validate-footers.js - Branding meta agent: Issue #33 (automation to follow)
- Execution plan:
.github/projects/active/next-issues-execution-plan.md
- ✅ Review this guide — Understand the problem and solution
- ⬜ Run validation script — Audit all files:
node .github/scripts/validate-footers.js - ⬜ Fix root README.md — Remove duplicate footers (manually or with
--fix) - ⬜ Validate changes — Confirm no violations remain
- ⬜ Commit & push — Create PR with fixes
- ⬜ Set up CI validation — Add footer-validation.yml workflow
- ⬜ Plan automation — Implement branding meta agent and footer validation hardening (issue #33)
⚖️ Governance policy maintained by LightSpeedWP