pm-status-report — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited pm-status-report (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.
Stakeholder-grade comprehensive status report for a Huly tracker project. ~10 sections including an exhaustive component-grouped task list. Read-only, no writes to Huly.
Requires the huly MCP server.
/pm-status-report <PROJECT> [--period 7d|30d|sprint]PROJECT — identifier or _id. Required.--period — reporting window:7d (default) — last 7 days30d — last 30 dayssprint — auto-detect the active milestone (status == 1); use its start (createdOn of milestone) → target_date as the windowRun in two waves. Wave 1 (parallel) gathers the dataset; wave 2 fans out for relations / supplementary sets.
Wave 1:
huly_get_project { project } — name, identifier, archived flag.huly_list_statuses { project } — _id → name + category map; defines the status column order for the breakdown.huly_list_components { project } — _id → label map.huly_list_issues { project, limit: 500 } — main dataset.huly_list_milestones { project } — full milestone state.huly_get_detailed_time_report { project, from: <period start> } — effort in period, grouped by issue + assignee.huly_list_time_spend_reports { project, from: now − 8 weeks } — velocity trend.huly_list_documents (only if a teamspace is known — typically skipped unless the user provided one) for doc coverage.huly_list_test_runs — only if a QMS test project shares the project's name; otherwise skip.Wave 2:
blocks counts in a single local pass (see "Bottleneck computation" below) over the wave-1 dataset to avoid 500× calls.statusMap: id → { name, category, rank } — preserve huly_list_statuses order for column rendering.componentMap: id → label plus a synthetic "__uncategorized__" → "Uncategorized" bucket.for issue in issues:
comp = componentMap[issue.component] or "Uncategorized"
status = statusMap[issue.status].name
buckets[comp][status].append(issue)Within each (comp, status) bucket, sort by:
modifiedOn descblocksByIssue = {} # issue._id → list of blocked issue identifiers
for issue in issues:
for rel in issue.relations or []:
if rel._class == "tracker:relation:Blocks":
blocksByIssue.setdefault(rel.relatedTo, []).append(issue.identifier)Top bottlenecks = those with len(blockers) >= 2, sorted by descending count.
huly_list_time_spend_reports entries into 7-day windows for the last 8 weeks based on date.modifiedOn falls in week AND statusMap[issue.status].category == "tracker:statusCategory:Completed".For each assignee (group by assignee):
modifiedOn + done category) in the period.report.createdBy == assignee and date >= period_start.(modifiedOn - createdOn)/86_400_000 over period-closed issues.dueDate == null OR modifiedOn <= dueDate.Reuse the rules from pm-risks (see that SKILL.md). Show only the counts and top 3 in this report; full detail belongs in /pm-risks.
Derive 3–5 lines from:
<Component> — N issues stale"<name> (on-time %)"<doc> (Nd stale)"═══════════════════════════════════════════════════════
PROJECT STATUS REPORT — [Name] ([IDENT])
Period: [YYYY-MM-DD] → [YYYY-MM-DD] ([period label])
Generated: [YYYY-MM-DD]
═══════════════════════════════════════════════════════
EXECUTIVE SUMMARY
─────────────────
[2–3 sentence narrative covering: this-period delivery vs prior, active
sprint state, top 1–2 risks.]
KEY METRICS
───────────
This period Prev period Δ
Issues created [n] [n] [±%]
Issues closed [n] [n] [±%]
Net backlog change [±n] [±n] —
Time logged (hours) [h] [h] [±%]
Active contributors [n] [n] [±%]
Avg cycle time (days) [d] [d] [±%]
SCOPE & PROGRESS
────────────────
Total issues: [N]
├─ Done: [n] ([%])
├─ In-progress: [n] ([%])
├─ In-review: [n] ([%])
├─ Backlog: [n] ([%])
└─ Cancelled: [n] ([%])
Scope by priority:
🔥 Urgent [n] ([n] unassigned ⚠ if >0)
⬆ High [n] ([n] in-progress)
→ Medium [n]
⬇ Low [n]
— None [n]
MILESTONES
──────────
✓ [label] completed [date] ([done]/[total] done, 100%)
◐ [label] target [date], [N]d left
[total] issues · [done] done · [open] open · [%]%
Required pace: [r]/day · Actual: [a]/day
[⚠ AT RISK — recommend re-scope] if applicable
○ [label] target [date], [N]d left, [done]/[total]
VELOCITY (last 8 weeks — issues closed)
───────────────────────────────────────
Week of [date]: [bar] [n]
...
Week of [date]: [bar] [n] ← current
Trend: [±n] issues/week ([direction])
TEAM PERFORMANCE
────────────────
Member Active Closed/wk Time/wk Avg cycle On-time
[name] [n] [n] [h]h [d]d [%]
...
unassigned [n] — — — —
[⚠ flags for: high unassigned count, low on-time per member, no time logged]
═══════════════════════════════════════════════════════
ALL TASKS BY COMPONENT (full breakdown)
═══════════════════════════════════════════════════════
COMPONENT: [label] ([N] issues)
──────────────────────────────────────────────────────
[Status name 1] ([n])
[PROJ-N] [priority icon] [priority label] [title] @[assignee] [age info]
...
[Status name 2] ([n])
...
COMPONENT: [next label] ([N] issues)
──────────────────────────────────────────────────────
...
UNCATEGORIZED ([N] issues)
──────────────────────────────────────────────────────
...
═══════════════════════════════════════════════════════
BOTTLENECKS
───────────
[PROJ-N] [title] blocks [n] · [stuck Nd|in-review|...] · @[assignee]
...
RISKS (see /pm-risks for full detail)
─────
🔴 [n] HIGH [top 1–2, comma-separated]
🟡 [n] MEDIUM [counts only]
🟢 [n] WATCH [counts only]
QUALITY (only if test data was found)
───────
Latest run: [name] · [n] cases · [n] passed · [n] failed · [n] blocked
Pass rate: [%] (target [%])
Open bugs by priority: urgent [n] · high [n] · medium [n]
COMPONENTS (activity snapshot)
──────────
[label] [n] open · last activity [Nd]
...
DOCUMENTATION (only if doc data available)
─────────────
[n] linked teamspaces · [n] documents · [n] updated this period
[⚠ flags for stale docs >30d]
RECOMMENDATIONS
───────────────
1. [derived line]
2. [derived line]
3. [derived line][IDENTIFIER] [icon] [priority] [title (truncate to 50 chars + … if longer)] @[assignee or —] [age]modifiedOn, e.g. 2d. If > 7d and in-progress, append ⚠.closed [MM-DD].cancelled [MM-DD].huly_workspace_info members lookup; fall back to email; — if null.huly_list_statuses).⚠ Showing first 500 issues by modifiedOn — N additional issues omitted. Filter by milestone or component to narrow.--period 7d and add a note: No active sprint detected; using 7d window.UNCATEGORIZED section. That's fine.— in Δ column rather than 100%.Done (0)).huly_list_issue_relations per-issue — compute the blocks map locally from the dataset.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.