@buildinternet/releases-skills 0.51.0 → 0.52.0

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@buildinternet/releases-skills",
3
- "version": "0.51.0",
3
+ "version": "0.52.0",
4
4
  "description": "Agent skills bundled with the Releases CLI. Markdown playbooks for changelog ingest, discovery, and analysis.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -49,6 +49,17 @@ releases admin source create "Claude Code" --url https://docs.anthropic.com/en/c
49
49
  --feed-url https://docs.anthropic.com/en/changelog/rss.xml
50
50
  ```
51
51
 
52
+ Set source metadata **at create time** with `--keyword-allow` (feed keyword filter → `metadata.feedKeywordAllow`) or the general `--metadata-set key=value` (repeatable; same coercion as `source update --metadata-set`):
53
+
54
+ ```bash
55
+ releases admin source create "Discord" --url https://discord.com/blog --type feed \
56
+ --feed-url https://discord.com/blog/rss.xml --keyword-allow changelog,patch-notes
57
+ releases admin source create "Acme" --url https://acme.dev/changelog \
58
+ --metadata-set marketingFilter=true --metadata-set feedContentDepth=summary-only
59
+ ```
60
+
61
+ Do this rather than a follow-up `source update --metadata-set`: `create` triggers the onboard workflow's auto-fetch, which reads the source's metadata **before** any post-create edit lands. Setting a feed filter on create keeps that first ingest filtered; setting it afterward races the auto-fetch and ingests the whole unfiltered feed.
62
+
52
63
  Evaluate without adding:
53
64
 
54
65
  ```bash
@@ -117,6 +128,47 @@ Notes:
117
128
  - Remote concurrency defaults to 3, capped at 5. Duplicate source fetches are detected and blocked.
118
129
  - Smart fetch backoff: sources returning no changes back off exponentially (1h → 48h); error backoff caps at 72h.
119
130
 
131
+ ### Backfill (full history)
132
+
133
+ Walk every scrape window of a windowed `scrape` source and upsert the whole history at once — the turnkey replacement for bespoke per-source backfill scripts. Idempotent (dedups by synthesized URL), and **dry-run by default**:
134
+
135
+ ```bash
136
+ releases admin source backfill my-source # preview: counts + date range, nothing written
137
+ releases admin source backfill my-source --no-dry-run # write (or --commit)
138
+ releases admin source backfill my-source --max-windows 100 # walk further back (endpoint clamps 1–200, default 50)
139
+ releases admin source backfill my-source --wait # deep Firecrawl backfill: block until the async workflow finishes
140
+ releases admin source backfill my-source --markdown-file page.md --commit
141
+ cat page.md | releases admin source backfill my-source --markdown-file - --commit
142
+ ```
143
+
144
+ Notes:
145
+
146
+ - Accepts a slug or `src_…` ID; the CLI resolves to the typed ID before calling (the endpoint rejects bare slugs as ambiguous across orgs).
147
+ - `--markdown-file` supplies the full-page markdown for JS-heavy / bot-blocked sources the worker can't fetch itself. Without it the endpoint falls back to Firecrawl (if enabled on the source) then a plain fetch.
148
+ - Scrape sources only. Non-scrape sources, an unfetchable body, or a missing `ANTHROPIC_API_KEY`/`FIRECRAWL_API_KEY` come back as a clear error.
149
+ - A dry run reports `windows`, `extracted → unique`, and the date range; it warns if it hit the window cap (raise `--max-windows`).
150
+ - Deep Firecrawl backfills run as a durable workflow (minutes). Like `admin overview batch`, the CLI **dispatches and returns the workflow instance ID by default** (non-blocking — the agent-friendly default), then either:
151
+ - poll it yourself: `releases admin source backfill-status <instanceId> [--json]` (single-shot; loop on the `--json` `status` field), or
152
+ - pass `--wait` to block and render the report inline.
153
+ - Non-Firecrawl / `--markdown-file` sources stay **synchronous** — the report comes back in one call regardless of `--wait`.
154
+
155
+ ### Re-extract (from a stored snapshot)
156
+
157
+ Re-run extraction over a source's captured raw body in R2 (`released-raw`) — **no live scrape, no Firecrawl credits, deterministic input**. Use it after extraction/parse logic improves to reprocess a source's history. Sibling of `backfill`, **dry-run by default**:
158
+
159
+ ```bash
160
+ releases admin source reextract my-source # preview from the latest snapshot
161
+ releases admin source reextract my-source --commit # write (or --no-dry-run)
162
+ releases admin source reextract my-source --snapshot-id raw_abc123 --commit # pin a specific capture
163
+ releases admin source reextract my-source --max-windows 100 --json
164
+ ```
165
+
166
+ Notes:
167
+
168
+ - Slug or `src_…` ID, resolved to the typed ID before calling (bare slugs rejected). Scrape sources only.
169
+ - Omitting `--snapshot-id` uses the most recent capture; the report's `snapshot` block names which one was used.
170
+ - Actionable errors surface as-is: `no_snapshot`/`snapshot_not_found` (404, none stored / wrong id), `snapshot_expired` (410, body past the 90-day R2 lifecycle — re-scrape to capture fresh), missing `RAW_SNAPSHOTS`/`ANTHROPIC_API_KEY` (503).
171
+
120
172
  ### Poll (cheap change detection)
121
173
 
122
174
  ```bash
@@ -154,10 +206,14 @@ releases admin org link vercel --platform github --handle vercel
154
206
  releases admin org tag add vercel react serverless
155
207
  releases admin org alias add anthropic claude.ai claude.com
156
208
  releases admin org refresh vercel # fetch all sources + regenerate overview
209
+ releases admin org delete vercel # reversible tombstone soft-delete
210
+ releases admin org delete vercel --hard --yes # permanent purge + FK cascade
157
211
  ```
158
212
 
159
213
  `org refresh` flags: `--max <n>` (per-source cap, default 20), `--concurrency <n>`, `--window <days>`, `--dry-run`, `--skip-overview`, `--json`.
160
214
 
215
+ `org delete` soft-deletes by default (a reversible tombstone). `--hard` purges the row and cascade-deletes every dependent source, release, fetch-log, changelog file/chunk, summary, media asset, and webhook subscription; it prompts for a slug typeback unless `--yes` is passed (required in non-TTY/scripted contexts). You can pass a slug or an `org_…` ID either way — the CLI resolves to the typed ID the destructive path requires.
216
+
161
217
  ## Products
162
218
 
163
219
  Products group sources under multi-product orgs (e.g. Vercel → Next.js, Turborepo, v0):