# TinyChangelog: prepare release notes for human publication

Requires Node.js 20 or later.

    npx -y tinyscale@0.10.0 workspace create --name "Release notes" --cohort external --products tinychangelog
    npx -y tinyscale@0.10.0 changelog feed --name "Product updates" --description "Release notes from our team"
    npx -y tinyscale@0.10.0 changelog create --feed FEED_ID --content-json '{"title":"A verified update","body":"Describe the change and its customer benefit using verified facts.","category":"release","product":"Your product","productVersion":"1.0","links":[]}'
    npx -y tinyscale@0.10.0 changelog status --feed FEED_ID --entry ENTRY_ID
    npx -y tinyscale@0.10.0 workspace claim

Keep the credential and claim capability in the CLI's private project state.
Existing workspace keys never gain product access implicitly. Agents prepare
intended public text only: never copy secrets, raw diffs, prompts, customer
records or private source material into release notes. No automatic repository
scraping or publication. Status and MCP responses contain metadata, not bodies.

The human claims the workspace, opens Release notes in the project dashboard,
reviews the exact text and links, and explicitly publishes the revision. The
owner page supplies hosted HTML, RSS, JSON, and an iframe widget loader. Claim
and publication preserve feed and entry IDs. Changing a draft leaves the last
published revision available; publishing the change needs a new human approval.

    npx -y tinyscale@0.10.0 changelog revise --feed FEED_ID --entry ENTRY_ID --revision CURRENT_REVISION --content-json JSON
    npx -y tinyscale@0.10.0 changelog entries --feed FEED_ID

Use list for feed IDs, entries for up to 20 draft summaries (continue with its
--cursor), and status for one entry. Repeating the same create/revise inputs is
idempotent. Check returned revision and digest before asking for owner review.

Body: 5,000 characters; title: 120; three canonical HTTPS links maximum, without
credentials, ports or query strings. Text stays literal; no rich HTML or remote
media. Category is release, improvement, fix or announcement. Product and version
are explicit strings. Publication time is assigned by the server.

Preview: 72 hours, one feed, five lifetime entries, no public publication.
Claimed Free: three lifetime feeds, 500 lifetime entries, 20 publications per UTC
month, 1,000 lifetime publication snapshots, 5,000 stored idempotency requests.
Each entry supports up to 1,000 revisions. Draft edits replace private text;
private drafts expire after seven days. Published snapshots remain until owner
erasure; previous snapshots are private after replacement or unpublish. Erasure
scrubs text but retains bounded metadata tombstones and never refunds lifetime
allowances. Owners can unpublish and erase even after request history fills or
agent access is disconnected. No paid overage or email delivery is included.

The JSON endpoint returns {configuration,page}; page has entries and nextCursor.
Append ?cursor=NEXT_CURSOR to continue, up to 20 published entries per response.
Only active publications in the same feed are valid cursors. If an entry at the
cursor is withdrawn, restart pagination. RSS is the latest 20 published entries.
Public delivery reads the approved snapshots independently of the control API.
All responses use no-store; ETags are honored only after rechecking publication.
Unpublish/erase withdraw access, but cannot retract copies readers already saved.
The widget uses a sandboxed iframe and is optional to the customer's runtime.
