skilldrop-cli 0.16.42 → 0.16.44

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/package.json +1 -1
  2. package/packs/ai-engineering/skills/agent-config-review/manifest.json +1 -1
  3. package/packs/ai-engineering/skills/agent-config-review/scripts/agent_config_scan.py +6 -1
  4. package/packs/ai-engineering/skills/ai-usage-report/manifest.json +1 -1
  5. package/packs/ai-engineering/skills/ai-usage-report/scripts/build_report.py +30 -13
  6. package/packs/career/skills/cover-letter/manifest.json +1 -1
  7. package/packs/career/skills/cover-letter/scripts/claim_check.py +25 -3
  8. package/packs/career/skills/resume-tailor/manifest.json +1 -1
  9. package/packs/career/skills/resume-tailor/scripts/claim_check.py +25 -3
  10. package/packs/converters/skills/file-to-markdown/manifest.json +1 -1
  11. package/packs/converters/skills/file-to-markdown/scripts/to_markdown.py +4 -2
  12. package/packs/converters/skills/md-to-confluence/manifest.json +1 -1
  13. package/packs/converters/skills/md-to-confluence/scripts/md_to_confluence.py +8 -5
  14. package/packs/converters/skills/md-to-html/manifest.json +1 -1
  15. package/packs/converters/skills/md-to-html/scripts/md_to_html.py +7 -0
  16. package/packs/converters/skills/md-to-pptx/manifest.json +1 -1
  17. package/packs/converters/skills/md-to-pptx/scripts/md_to_pptx.py +5 -4
  18. package/packs/converters/skills/mermaid-render/manifest.json +1 -1
  19. package/packs/converters/skills/mermaid-render/scripts/render_mermaid.py +2 -1
  20. package/packs/core/skills/output-hygiene/manifest.json +1 -1
  21. package/packs/core/skills/output-hygiene/scripts/scrub.py +3 -2
  22. package/packs/data-analytics/skills/sql-review/manifest.json +1 -1
  23. package/packs/data-analytics/skills/sql-review/scripts/sql_lint.py +10 -3
  24. package/packs/design/skills/brand-kit/manifest.json +1 -1
  25. package/packs/design/skills/brand-kit/scripts/check_brand.py +11 -5
  26. package/packs/design/skills/deck-builder/manifest.json +1 -1
  27. package/packs/design/skills/deck-builder/scripts/build_deck.py +19 -9
  28. package/packs/design/skills/marketing-flyer/manifest.json +1 -1
  29. package/packs/design/skills/marketing-flyer/scripts/build_flyer.py +10 -1
  30. package/packs/dev-team/skills/behaviour-equivalence/manifest.json +1 -1
  31. package/packs/dev-team/skills/behaviour-equivalence/scripts/golden_diff.py +3 -1
  32. package/packs/dev-team/skills/codebase-tour/manifest.json +1 -1
  33. package/packs/dev-team/skills/codebase-tour/scripts/repo_facts.py +6 -1
  34. package/packs/dev-team/skills/dependency-upgrade-review/manifest.json +1 -1
  35. package/packs/dev-team/skills/dependency-upgrade-review/scripts/upgrade_diff.py +2 -2
  36. package/packs/dev-team/skills/pre-merge-review/manifest.json +1 -1
  37. package/packs/dev-team/skills/pre-merge-review/scripts/gate.py +7 -1
  38. package/packs/dev-team/skills/rollout-plan/manifest.json +1 -1
  39. package/packs/dev-team/skills/rollout-plan/scripts/canary_math.py +2 -2
  40. package/packs/frontend/skills/bundle-size-review/manifest.json +1 -1
  41. package/packs/frontend/skills/bundle-size-review/scripts/bundle_stats.py +1 -1
  42. package/packs/frontend/skills/web-performance-review/manifest.json +1 -1
  43. package/packs/frontend/skills/web-performance-review/scripts/lh_summary.py +6 -1
  44. package/packs/grc/skills/risk-register/manifest.json +1 -1
  45. package/packs/grc/skills/risk-register/scripts/check_register.py +6 -1
  46. package/packs/infra-as-code/skills/terraform-plan-review/manifest.json +1 -1
  47. package/packs/infra-as-code/skills/terraform-plan-review/scripts/plan_summary.py +3 -1
  48. package/packs/product-manager/skills/lean-canvas/manifest.json +1 -1
  49. package/packs/product-manager/skills/lean-canvas/scripts/unit_economics.py +1 -1
  50. package/packs/research/skills/hypothesis-comparison/manifest.json +1 -1
  51. package/packs/research/skills/hypothesis-comparison/scripts/ach_matrix.py +3 -0
  52. package/packs/research/skills/source-synthesis/manifest.json +1 -1
  53. package/packs/research/skills/source-synthesis/scripts/citations.py +2 -1
  54. package/packs/skill-engineering/skills/skill-review/manifest.json +1 -1
  55. package/packs/skill-engineering/skills/skill-review/scripts/lint_skill.py +4 -1
  56. package/packs/solution-architect/skills/event-contract-draft/manifest.json +1 -1
  57. package/packs/solution-architect/skills/event-contract-draft/scripts/check_asyncapi.py +9 -2
  58. package/packs/solution-architect/skills/figma-diagrams/manifest.json +1 -1
  59. package/packs/solution-architect/skills/figma-diagrams/scripts/frame_to_mermaid.py +1 -1
  60. package/packs/solution-architect/skills/figma-diagrams/scripts/post_comment.py +1 -1
  61. package/packs/solution-architect/skills/interactive-diagram/manifest.json +1 -1
  62. package/packs/solution-architect/skills/interactive-diagram/scripts/build_diagram.py +17 -3
  63. package/packs/sre-oncall/skills/cloud-cost-review/manifest.json +1 -1
  64. package/packs/sre-oncall/skills/cloud-cost-review/scripts/cost_summary.py +5 -2
  65. package/packs/sre-oncall/skills/delivery-metrics-report/manifest.json +1 -1
  66. package/packs/sre-oncall/skills/delivery-metrics-report/scripts/delivery_metrics.py +4 -0
  67. package/packs/trackers/skills/backlog-triage/manifest.json +1 -1
  68. package/packs/trackers/skills/backlog-triage/scripts/triage_backlog.py +7 -2
  69. package/packs/trackers/skills/team-status-report/manifest.json +1 -1
  70. package/packs/trackers/skills/team-status-report/scripts/status_counts.py +5 -1
  71. package/packs/trackers/skills/tracker-brief-sync/manifest.json +1 -1
  72. package/packs/trackers/skills/tracker-brief-sync/scripts/brief_sync.py +10 -2
@@ -96,6 +96,8 @@ def load_rows(path: Path) -> list:
96
96
  text = path.read_text(encoding="utf-8-sig")
97
97
  except OSError as e:
98
98
  die("cannot read {}: {}".format(path, e))
99
+ except UnicodeDecodeError:
100
+ die("{} is not UTF-8 text; save it as UTF-8 and retry".format(path))
99
101
  if suffix in (".csv", ".tsv"):
100
102
  delim = "\t" if suffix == ".tsv" else ","
101
103
  reader = csv.reader(io.StringIO(text, newline=""), delimiter=delim)
@@ -309,7 +311,9 @@ def main(argv=None) -> int:
309
311
  planned = [by_key[k] for k in keys if k in by_key]
310
312
  plan_source = "plan file {} ({} keys)".format(args.plan_file.name, len(keys))
311
313
  elif args.sprint:
312
- planned = [it for it in items if args.sprint.lower() in it["sprint"].lower()]
314
+ # Whole-name match; repeated Sprint columns are joined with ", " (carried-over items).
315
+ want = args.sprint.strip().lower()
316
+ planned = [it for it in items if want in [x.strip().lower() for x in it["sprint"].split(",")]]
313
317
  plan_source = "items in sprint '{}'".format(args.sprint)
314
318
  elif "due" in mp:
315
319
  planned = [it for it in items if it["due"] and start <= it["due"] <= end]
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tracker-brief-sync",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "Turn a brief or PRD (such as prd-draft output) into tracker-ready epics and issues — title, description, acceptance criteria, labels and a link back to the doc section — as a CSV for Jira, a mapped CSV for other importers, or gh commands for GitHub; and in reverse, report drift between the doc and the tracker (issues with no section, sections with no issue, issues for Won't-have requirements). Use when the user wants to load a PRD into Jira, Linear or GitHub, says \"create tickets from this brief\", or asks \"does the tracker still match the PRD?\".",
5
5
  "entrypoint": "SKILL.md",
6
6
  "deps": {
@@ -194,7 +194,7 @@ def parse_doc(path: Path, id_pattern: str, headings: bool) -> dict:
194
194
  continue
195
195
  if s.startswith("|"):
196
196
  cells = [c.strip().strip("*").strip() for c in s.strip("|").split("|")]
197
- if cells and broad.match(cells[0]):
197
+ if cells and broad.match(cells[0]) and not headings:
198
198
  moscow = ""
199
199
  for c in cells[2:]:
200
200
  if c.lower() in MOSCOW:
@@ -334,11 +334,19 @@ def cmd_export(args) -> int:
334
334
  it.get("parent") or "", by_id[it["parent"]]["title"] if it.get("parent") else "",
335
335
  source_line(spec, it, doc_info)])
336
336
  text = out.getvalue()
337
+ # Written as built, with no newline translation: the CSV's rows end in \r\n, as CSV
338
+ # requires, and on Windows a text-mode write would turn each into \r\r\n, which an
339
+ # importer reads as a blank row between every issue.
337
340
  if args.output:
338
- args.output.write_text(text, encoding="utf-8")
341
+ with open(args.output, "w", encoding="utf-8", newline="") as fh:
342
+ fh.write(text)
339
343
  n_epics = sum(1 for it in items if it["type"].lower() == "epic")
340
344
  sys.stderr.write("wrote {}: {} items ({} epics, {} others)\n".format(
341
345
  args.output, len(items), n_epics, len(items) - n_epics))
346
+ elif hasattr(sys.stdout, "buffer"):
347
+ sys.stdout.flush()
348
+ sys.stdout.buffer.write(text.encode("utf-8"))
349
+ sys.stdout.buffer.flush()
342
350
  else:
343
351
  sys.stdout.write(text)
344
352
  return 0