@opendirectory.dev/skills 0.1.39 → 0.1.41

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.
@@ -0,0 +1,119 @@
1
+ [
2
+ {
3
+ "id": "eval_001",
4
+ "name": "Free text only -- happy path",
5
+ "description": "User provides 3 items as free text. Expects all categories populated, clean content output.",
6
+ "input": {
7
+ "items": "Added dark mode|Fixed CSV export bug|Improved API speed by 40%",
8
+ "since": 7,
9
+ "repo": ""
10
+ },
11
+ "expected": {
12
+ "changelog_entry_has_categories": ["new", "improved", "fixed"],
13
+ "tweet_thread_count_min": 3,
14
+ "tweet_thread_count_max": 5,
15
+ "all_tweets_under_280_chars": true,
16
+ "linkedin_no_hashtags": true,
17
+ "linkedin_no_markdown": true,
18
+ "no_em_dashes": true,
19
+ "no_banned_words": true,
20
+ "no_invented_metrics": true,
21
+ "one_liner_under_20_words": true
22
+ }
23
+ },
24
+ {
25
+ "id": "eval_002",
26
+ "name": "Git commits only -- noise filtered",
27
+ "description": "No free text. Git log has 4 commits: 2 real, 2 noise (merge + version bump). Expects noise filtered.",
28
+ "input": {
29
+ "items": "",
30
+ "since": 7,
31
+ "repo": ""
32
+ },
33
+ "git_log_mock": [
34
+ "abc1234|Add user avatar upload|Users can now upload a profile picture|2026-04-21",
35
+ "def4567|Merge pull request #45 from user/feature||2026-04-21",
36
+ "ghi7890|bump version to 1.3.2||2026-04-20",
37
+ "jkl0123|Fix timezone bug in scheduler|Events were firing 1 hour early in non-UTC timezones|2026-04-19"
38
+ ],
39
+ "expected": {
40
+ "noise_filtered_count": 2,
41
+ "items_remaining": 2,
42
+ "changelog_has_new": true,
43
+ "changelog_has_fixed": true,
44
+ "merge_commit_not_in_output": true,
45
+ "version_bump_not_in_output": true
46
+ }
47
+ },
48
+ {
49
+ "id": "eval_003",
50
+ "name": "GitHub PRs as source",
51
+ "description": "GITHUB_TOKEN set, repo provided. Expects PRs to be fetched and used as source. PR body used for context.",
52
+ "input": {
53
+ "items": "",
54
+ "since": 7,
55
+ "repo": "acme/dashboard"
56
+ },
57
+ "mock_prs": [
58
+ {
59
+ "number": 47,
60
+ "title": "Fix CSV export dropping last row",
61
+ "body": "Regression from v1.3.1. Off-by-one error in row iterator. Fixes #102.",
62
+ "merged_at": "2026-04-22T10:30:00Z",
63
+ "labels": ["bug"]
64
+ },
65
+ {
66
+ "number": 48,
67
+ "title": "Add bulk delete to contacts list",
68
+ "body": "Users can now select multiple contacts and delete them at once.",
69
+ "merged_at": "2026-04-21T09:00:00Z",
70
+ "labels": []
71
+ }
72
+ ],
73
+ "expected": {
74
+ "github_available": true,
75
+ "pr_titles_used_as_source": true,
76
+ "pr_body_used_for_context": true,
77
+ "changelog_has_new": true,
78
+ "changelog_has_fixed": true,
79
+ "regression_context_preserved": true
80
+ }
81
+ },
82
+ {
83
+ "id": "eval_004",
84
+ "name": "Single item -- minimal input",
85
+ "description": "User provides one item. Expects no invented features, concise thread, one-liner under 20 words.",
86
+ "input": {
87
+ "items": "Fixed the login page loading slowly on mobile",
88
+ "since": 7,
89
+ "repo": ""
90
+ },
91
+ "expected": {
92
+ "changelog_entry_has_fixed": true,
93
+ "changelog_entry_has_new": false,
94
+ "tweet_thread_count_min": 2,
95
+ "tweet_thread_count_max": 3,
96
+ "one_liner_under_20_words": true,
97
+ "no_invented_additional_features": true,
98
+ "linkedin_mentions_mobile": true
99
+ }
100
+ },
101
+ {
102
+ "id": "eval_005",
103
+ "name": "Existing changelog -- correct prepend",
104
+ "description": "docs/changelog.md already exists with a prior entry. New run should prepend, not append. Old entry preserved.",
105
+ "input": {
106
+ "items": "Launched API v2|Deprecated old auth endpoint",
107
+ "since": 7,
108
+ "repo": ""
109
+ },
110
+ "existing_changelog": "# Changelog\n\n## Week of April 14, 2026\n\n### New\n- **Dashboard** -- New analytics dashboard with weekly summaries.\n\n---\n",
111
+ "expected": {
112
+ "new_entry_is_prepended_not_appended": true,
113
+ "existing_entry_still_present": true,
114
+ "new_label_not_equal_to_april_14": true,
115
+ "changelog_heading_preserved": true,
116
+ "api_v2_in_new_section": true
117
+ }
118
+ }
119
+ ]
@@ -0,0 +1,96 @@
1
+ # Changelog Format Reference
2
+
3
+ ## Entry Structure
4
+
5
+ ```markdown
6
+ ## Week of April 23, 2026
7
+
8
+ ### New
9
+ - **Feature name** -- One sentence describing what users can now do.
10
+
11
+ ### Improved
12
+ - **Feature name** -- One sentence describing how the experience changed.
13
+
14
+ ### Fixed
15
+ - **Feature name** -- One sentence describing what was broken and now works.
16
+
17
+ ### Under the hood
18
+ - **Component** -- One sentence for developer-relevant changes only.
19
+
20
+ ---
21
+ ```
22
+
23
+ The `---` separator goes at the bottom of each entry. Entries are prepended, so the most recent is always at the top of the file.
24
+
25
+ ## Category Decision Rules
26
+
27
+ **New**: Use when the change adds net-new capability a user could not do before.
28
+ - New page, new API endpoint, new integration, new toggle, new export format
29
+ - If in doubt: can users do something they couldn't do yesterday? -> New
30
+
31
+ **Improved**: Use when an existing feature is made faster, easier, more reliable, or more capable.
32
+ - "Now 40% faster", "Works on mobile", "Added bulk actions to existing list view"
33
+ - Performance improvements that users will notice -> Improved
34
+ - Security patches the user doesn't see -> Under the hood
35
+
36
+ **Fixed**: Something was broken and now works. Bug reports, regression fixes, crash fixes.
37
+ - Prefer specificity: "Fixed: CSV exports no longer drop the last row"
38
+ - If the user never knew it was broken, it can be Improved or omitted
39
+
40
+ **Under the hood**: Infrastructure, dependency updates, refactoring, build changes.
41
+ - Include only if developer-relevant: API changes, breaking changes, new environment requirements
42
+ - Omit if the user wouldn't care
43
+ - Never pad this section -- empty is fine
44
+
45
+ ## Version Label Rules
46
+
47
+ **Default (date-based):**
48
+ - `Week of [Month Day, Year]` -- e.g., "Week of April 23, 2026"
49
+ - Use when no semver is detected in existing changelog and user didn't specify
50
+
51
+ **Semver (auto-detected):**
52
+ - If existing changelog headings match `v1.2.3` or `1.2.3` format -> use semver
53
+ - Patch bump (x.x.+1): only if all changes are Fixed
54
+ - Minor bump (x.+1.0): if any New feature is included
55
+ - Show the bumped version: `v1.4.0`
56
+
57
+ **Custom override:**
58
+ - If user says "call it 'The Speed Update'" or "v2.1.0" -> use exactly that
59
+ - Do not auto-format custom labels
60
+
61
+ ## Transformation Examples
62
+
63
+ | Raw (commit/PR) | User-facing (changelog) |
64
+ |---|---|
65
+ | `Fix memory leak in worker process` | **Worker stability** -- The app no longer slows down after extended use |
66
+ | `Add CSV export to reports page` | **Export reports** -- Download any report as a CSV from the Reports page |
67
+ | `Improve query performance with index` | **Faster search** -- Search results now load in under half a second |
68
+ | `Add dark mode toggle in Settings` | **Dark mode** -- Toggle it in Settings > Appearance. Works across all views |
69
+ | `Fix timezone bug in scheduler` | **Scheduler** -- Events no longer fire an hour early in non-UTC timezones |
70
+ | `Update dependencies to latest` | (omit -- not user-relevant) |
71
+ | `Refactor auth middleware` | (omit unless breaking change) |
72
+ | `Add rate limiting to API` | **API rate limits** -- Documented in the API reference. 1000 req/min per key |
73
+ | `Fix login page slow on mobile` | **Mobile login** -- The login page now loads instantly on mobile devices |
74
+ | `Migrate to Postgres 16` | **Database upgrade** -- Postgres 16 with improved connection pooling |
75
+
76
+ ## What to Omit
77
+
78
+ - Test file changes
79
+ - CI/CD pipeline changes
80
+ - Dependency bumps (unless security-relevant)
81
+ - Documentation-only commits
82
+ - Version bump commits
83
+ - Merge commits
84
+ - Commit messages under 8 characters
85
+
86
+ ## Item Format
87
+
88
+ ```
89
+ **[Feature name]** -- [one sentence benefit, no jargon]
90
+ ```
91
+
92
+ - Feature name: 1-3 words, title case, no verbs ("Dark mode" not "Added dark mode")
93
+ - Benefit: past tense ("Added", "Fixed", "Improved")
94
+ - No period at end
95
+ - No nested bullets
96
+ - No links (links belong in the full changelog page, not the entry)
@@ -0,0 +1,154 @@
1
+ # Content Rules Reference
2
+
3
+ ## One-liner
4
+
5
+ - Max 20 words
6
+ - Cover the 1-2 biggest items
7
+ - Plain language -- no jargon, no product name unless ambiguous
8
+ - No period required
9
+ - Not a tagline -- just a summary of what shipped
10
+
11
+ **Good:**
12
+ - "Dark mode, faster API, and a fix for the export bug."
13
+ - "CSV export is live and the login bug is gone."
14
+ - "Redesigned onboarding with two new integrations."
15
+
16
+ **Bad:**
17
+ - "Exciting new features have been released this week." (vague)
18
+ - "We are pleased to announce several improvements to our platform." (corporate)
19
+ - "Dark mode toggle in Settings > Appearance with full cross-view support plus 40% API response time improvement and off-by-one iterator fix." (too long)
20
+
21
+ ## Tweet Thread Rules
22
+
23
+ **Structure (3-5 tweets):**
24
+ - Tweet 1: Hook. "We shipped [N] things this week." OR lead with the biggest feature.
25
+ - Tweets 2-N: One item per tweet, 1-2 sentences max. Specific, concrete.
26
+ - Last tweet: Optional CTA -- "Changelog: [link]" or "More next week." Keep it light.
27
+
28
+ **Hard rules:**
29
+ - Each tweet strictly under 280 characters (count spaces and punctuation)
30
+ - No hashtags -- ever
31
+ - No em dashes (use hyphen or rewrite)
32
+ - Active voice: "Dark mode is live" not "Dark mode has been added"
33
+ - No promotional language ("game-changing", "revolutionize", "excited to share")
34
+ - No markdown formatting
35
+ - Thread numbering: 1/4, 2/4 style is optional -- skip if it feels forced
36
+
37
+ **Good tweet:**
38
+ "Dark mode is live. Toggle it in Settings > Appearance. Works everywhere."
39
+
40
+ **Bad tweet:**
41
+ "We're thrilled to announce that dark mode -- a highly requested feature -- has been added to the settings panel and is now available across all views! #darkmode #productupdate"
42
+
43
+ ## LinkedIn Post Rules
44
+
45
+ **Format:**
46
+ - No markdown. No asterisks (**bold** renders as **bold** on LinkedIn). No underscores.
47
+ - No hashtags -- ever
48
+ - Short paragraphs: 1-2 sentences, then blank line
49
+ - Total: 150-400 words
50
+
51
+ **Voice:**
52
+ - Founder voice: "We shipped", "We fixed", "We added"
53
+ - Not corporate: never "We are excited to announce", "We are pleased to share", "We are thrilled"
54
+ - Direct: state the fact, then the benefit
55
+ - Close with a question or observation, not a CTA ("What are you waiting for?" is a CTA -- avoid)
56
+
57
+ **Hook (first line):**
58
+ - Under 150 characters (LinkedIn truncates after ~210 chars before "see more")
59
+ - "We shipped [N] updates this week." or lead with the biggest item
60
+ - Formula options:
61
+ 1. "We shipped [N] things this week."
62
+ 2. "[Biggest feature] is live."
63
+ 3. "This week: [feature], [fix], and [improvement]."
64
+
65
+ **Body:**
66
+ - One paragraph per major item (2-3 sentences max per paragraph)
67
+ - Start with what it does, then why it matters
68
+ - Skip Under the hood items -- users don't care
69
+ - Blank line between paragraphs
70
+
71
+ **Close:**
72
+ - One line
73
+ - A question that invites response: "What have you been waiting for us to ship next?"
74
+ - Or an observation: "Smaller releases, shipped more often -- that's the goal."
75
+ - Not: "Check out the full changelog at [link]" (that's a CTA)
76
+
77
+ **Good opening:**
78
+ ```
79
+ We shipped 3 updates this week.
80
+
81
+ Dark mode is live. Toggle it in Settings under Appearance.
82
+
83
+ API response time is down 40%. The dashboard now loads in under a second.
84
+
85
+ We also fixed a bug where CSV exports were silently dropping the last row.
86
+
87
+ What feature have you been waiting for?
88
+ ```
89
+
90
+ ## Email Snippet Rules
91
+
92
+ **Subject line formula:**
93
+ "What shipped this week: [biggest item] + [1 more]"
94
+
95
+ Examples:
96
+ - "What shipped this week: dark mode + faster API"
97
+ - "What shipped this week: CSV export + 3 bug fixes"
98
+ - "What shipped this week: onboarding redesign"
99
+
100
+ **Body:**
101
+ - 50-100 words
102
+ - Casual, direct. Open with "Here's what we shipped this week:"
103
+ - Bullet list of top 3-4 items with one-line descriptions
104
+ - No marketing language
105
+ - Appropriate for a product newsletter or drip sequence
106
+
107
+ **Good:**
108
+ ```
109
+ Subject: What shipped this week: dark mode + faster API
110
+
111
+ Here's what we shipped this week:
112
+
113
+ - Dark mode: toggle in Settings > Appearance
114
+ - API response time: 40% faster, dashboard loads under 1 second
115
+ - Fixed: CSV exports no longer drop the last row
116
+
117
+ Full changelog below.
118
+ ```
119
+
120
+ ## Banned Words
121
+
122
+ Never use these in any content piece:
123
+
124
+ - powerful
125
+ - robust
126
+ - seamless
127
+ - innovative
128
+ - game-changing
129
+ - streamline / streamlined
130
+ - leverage
131
+ - transform / transformative
132
+ - revolutionize / revolutionary
133
+ - excited to announce
134
+ - pleased to announce
135
+ - we are thrilled
136
+ - cutting-edge
137
+ - best-in-class
138
+ - world-class
139
+ - next-level
140
+ - unlock
141
+ - delightful
142
+
143
+ ## Anti-Patterns
144
+
145
+ | Pattern | Why it's wrong |
146
+ |---|---|
147
+ | "We are excited to announce..." | Corporate speak. Say "We shipped." |
148
+ | Hashtags in LinkedIn | This skill never uses hashtags |
149
+ | **bold** in LinkedIn | Renders as literal asterisks |
150
+ | Em dashes (--) in tweets | Use hyphen or rewrite the sentence |
151
+ | Inventing numbers ("3x faster") | Only include metrics present in the source data |
152
+ | Vague superlatives ("major update") | Be specific about what shipped |
153
+ | Padding with filler items | If there's one real item, write about one item |
154
+ | Thread recap tweet ("That's a wrap!") | Wastes a tweet -- skip it |
@@ -0,0 +1,86 @@
1
+ # Noise Filter Reference
2
+
3
+ ## Commit Patterns to Skip
4
+
5
+ These regex patterns match commits that should be excluded from the changelog:
6
+
7
+ ```
8
+ ^Merge (pull request|branch)\b -- merge commits
9
+ ^(bump|update) version\b -- version bumps
10
+ ^chore[\s:(] -- chore commits (chore: ..., chore(...):)
11
+ ^ci[\s:(] -- CI/CD commits
12
+ ^build[\s:(] -- build system commits
13
+ ^test[\s:(] -- test-only commits
14
+ ^docs[\s:(] -- documentation-only commits
15
+ ^style[\s:(] -- formatting/style commits
16
+ ^fix typo\b -- typo fixes
17
+ ^\s*typo\b -- typo commits
18
+ ^wip\b -- work in progress
19
+ ^revert\b -- reverts (usually indicate something broken)
20
+ ^Initial commit$ -- first commit
21
+ ^init$ -- init commits
22
+ single-word subject under 8 chars -- too vague to be useful
23
+ ```
24
+
25
+ ## Examples: Skip
26
+
27
+ ```
28
+ Merge pull request #45 from user/feature-branch -> skip (merge commit)
29
+ Merge branch 'main' into feature -> skip (merge commit)
30
+ bump version to 1.3.2 -> skip (version bump)
31
+ Update version: 2.0.1 -> skip (version bump)
32
+ chore: update dependencies -> skip (chore)
33
+ chore(deps): bump lodash to 4.17.21 -> skip (chore)
34
+ ci: fix GitHub Actions workflow -> skip (CI)
35
+ build: update webpack config -> skip (build)
36
+ test: add unit tests for auth module -> skip (test-only)
37
+ docs: update README -> skip (docs-only)
38
+ style: fix linting errors -> skip (style)
39
+ fix typo in error message -> skip (typo)
40
+ wip: experimenting with new approach -> skip (WIP)
41
+ revert "Add experimental feature" -> skip (revert)
42
+ Initial commit -> skip
43
+ Update -> skip (single word, under 8 chars)
44
+ Fix -> skip (single word, under 8 chars)
45
+ ```
46
+
47
+ ## Examples: Keep
48
+
49
+ Even vague commits that don't match noise patterns should be kept and passed to the AI for judgment:
50
+
51
+ ```
52
+ Update dashboard layout -> keep (AI will decide if useful)
53
+ Improve error messages for API validation -> keep
54
+ Add dark mode toggle in Settings -> keep
55
+ Fix timezone bug in scheduler -> keep
56
+ Refactor authentication flow -> keep (even though technical)
57
+ Increase connection pool size -> keep (performance-relevant)
58
+ Add rate limiting to public API endpoints -> keep (developer-relevant)
59
+ Fix off-by-one error in CSV row iterator -> keep (specific bug)
60
+ ```
61
+
62
+ ## PR Labels to Skip
63
+
64
+ These GitHub PR labels indicate noise:
65
+
66
+ ```
67
+ documentation
68
+ chore
69
+ dependencies
70
+ ci
71
+ test
72
+ tests
73
+ ```
74
+
75
+ ## What the AI Does With Kept Items
76
+
77
+ The AI (in Step 4 of the skill) has final discretion over:
78
+ - Vague commits like "Update dashboard layout" -- may omit if unclear
79
+ - "Under the hood" items -- only includes if developer-relevant
80
+ - Categorization -- assigns each item to New, Improved, Fixed, or Under the hood
81
+
82
+ The noise filter's job is to remove obvious non-user-facing commits before they reach the AI. The AI handles the judgment calls.
83
+
84
+ ## The Rule of Thumb
85
+
86
+ If removing the commit from the list wouldn't confuse a user reading the changelog -- filter it out. If it might represent a real user-visible change (even if described technically) -- keep it and let the AI decide.