backlog-management — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited backlog-management (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
How tickets work in the Lorekeeper project. Every ticket has a lifecycle and a home.
~/Code/lorekeeper/backlogs/
├── proposal/ # Raw ideas, S:Proposal
├── ready/ # Validated + prioritized, S:Ready
├── done/ # Shipped + verified, S:Done
├── cancelled/ # Won't do, S:Cancelled
└── TEMPLATE.md # TemplateTickets are PROPOSAL → READY → DONE (or CANCELLED). File location must match status — when status changes, git mv the file to the corresponding subdirectory. Zero files should live at backlogs/ root level.
Currently deferred tickets (S:Deferred) remain in proposal/ with the deferred label; they aren't ready for promotion but aren't dead either. Cancelled tickets are never reborn.
S:proposal → S:ready → S:in-progress → S:review → S:done
↓
S:deferred / S:cancelled| Status | Meaning | Who moves it | File location |
|---|---|---|---|
S:proposal | Raw idea, not yet committed | Anyone | proposal/ |
S:ready | Validated & prioritised, ready to work | PM | ready/ |
S:in-progress | Being worked on | Dev | ready/ |
S:review | Code done, pending PM review | Dev | ready/ |
S:done | Shipped, verified | PM | done/ |
S:deferred | Valid but not now | PM | proposal/ |
S:cancelled | Won't do | PM | cancelled/ |
SEQUENTIAL only. Highest existing number + 1. Gaps are from done tickets moved to backlogs/done/. Never fill gaps.
Check all subdirectories (proposal/, ready/, done/, cancelled/) to find the highest number.
Each file has a YAML frontmatter with metadata. The github_issue field is mandatory and enforced by the pre-commit hook:
---
id: LKPR-N
title: Short descriptive title
type: bug | feature | enhancement | research | chore
status: S:Proposal
priority: P2:medium # P0:critical | P1:high | P2:medium | P3:low
sprint: ~
rice_score: ~
filed_by: Akane | Diana | Jason
filed_date: YYYY-MM-DD
github_issue: 123 # REQUIRED — pre-commit hook validates this
---Status and priority must stay in sync between file frontmatter and GitHub labels. Both are sources of truth. When promoting a ticket (e.g. proposal → ready), update BOTH:
status: S:Proposal → S:Ready, git mv to new subdirectorygh issue edit N --add-label "S:Ready" --remove-label "S:Proposal"The daily backlog triage cron job (lorekeeper-daily-backlog-triage) checks for drift between file status and GH labels and reports mismatches.
Sections: Problem, Solution, Acceptance Criteria, Affected Files (Backend + Dashboard), Dependencies, Open Questions, Notes.
For dashboard changes, list the UI component. If backend-only, write _none_ for Dashboard.
lorekeeper-backlog.sh — View ticketscd ~/Code/lorekeeper
./scripts/lorekeeper-backlog.sh
./scripts/lorekeeper-backlog.sh proposal
./scripts/lorekeeper-backlog.sh backlognext-ticket-number.sh — Get the next available number./scripts/next-ticket-number.sh
./scripts/next-ticket-number.sh -m # machine-parseableUses GitHub Issues API — authoritative regardless of which branch you're on.
cd ~/Code/lorekeeper
git mv backlogs/proposal/LKPR-N-<slug>.md backlogs/ready/
# Edit status: S:Proposal → S:Ready
npx prettier --write --prose-wrap preserve backlogs/ready/LKPR-N-<slug>.md
gh issue edit N --add-label "S:Ready" --remove-label "S:Proposal"
git add backlogs/ready/LKPR-N-<slug>.md
git commit -m "[LKPR-0] chore: promote LKPR-N to ready"cd ~/Code/lorekeeper
git mv backlogs/ready/LKPR-N-<slug>.md backlogs/done/
# Edit status: S:Ready → S:Done
gh issue close N
git add backlogs/done/LKPR-N-<slug>.md
git commit -m "[LKPR-0] chore: close LKPR-N (shipped)"When files and GitHub issues have drifted:
status: to match GH labelid:, fix the title# 1. Get next number
./scripts/next-ticket-number.sh
# 2. Copy template
cp backlogs/TEMPLATE.md backlogs/proposal/LKPR-NEXT-<slug>.md
# 3. Fill in, create GH issue, add github_issue to frontmatter
# 4. npx prettier --write --prose-wrap preserve
# 5. Commit on proposal branchstatus: in-progress across sessions without contextgithub_issue, prettier, ticket prefixgit push --no-verify to bypass pre-push hook only on proposal branches, never main~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.