misty-step/Landmark

Focused release pipeline using semantic-release with optional LLM-powered synthesis.

View on GitHub

Trust Signals

Scorecard Score
not yet scored
Maintenance Recency
Activelast commit Jul 9, 2026
License
MIT

Pinned Snippet

workflow.ymlSHA-pinned
uses: misty-step/landmark@35d002b7a2bc80efc6d0f412b5adbc3f6a96eeab # v0.28.1

tags can be moved; commit SHAs can't. why a SHA?

namedescriptionrequireddefault
modePipeline mode: 'full' (semantic-release + synthesis), 'synthesis-only' (synthesize for existing tag).nofull
release-tagRelease tag to synthesize notes for (required when mode is synthesis-only).no""
github-tokenPersonal access token with repository write access.yes
llm-api-keyAPI key for LLM synthesis (OpenRouter, OpenAI, or any compatible provider).no
llm-modelPrimary model ID for synthesis (e.g., 'anthropic/claude-sonnet-5', 'anthropic/claude-haiku-4.5').no""
llm-fallback-modelsComma-separated fallback model IDs tried in order if primary fails.no""
llm-api-urlChat completions endpoint URL (OpenAI-compatible).nohttps://openrouter.ai/api/v1/chat/completions
node-versionNode.js version for semantic-release.no24
stabilityVersioning stability policy: 'auto' (detect from latest tag; below 1.0.0 or untagged is pre-stable), 'pre-stable' (Cargo-style 0.x: breaking bumps minor, feat/fix bump patch, never auto-crosses 1.0.0), or 'stable' (standard SemVer). Ignored when the repo ships its own semantic-release config.noauto
synthesisWhether to synthesize user-facing release notes.notrue
synthesis-requiredWhether synthesis failures should fail the action. When true, a failed LLM key validation (healthcheck) also blocks the run before the release is published.nofalse
synthesis-strictDeprecated alias for synthesis-required.nofalse
synthesis-failure-issueWhether to create a GitHub issue in the consuming repository when synthesis fails.nofalse
notes-output-fileWrite synthesized notes to this file path. Use {version} placeholder for the release tag (e.g., 'docs/releases/{version}.md').no""
notes-output-text-fileWrite synthesized notes as plaintext to this file path. Use {version} placeholder (e.g., 'docs/releases/{version}.txt').no""
notes-output-html-fileWrite synthesized notes as an HTML fragment to this file path. Use {version} placeholder (e.g., 'docs/releases/{version}.html').no""
notes-output-jsonAppend a structured release entry to this JSON array file. Creates the file if it does not exist.no""
prompt-template-pathPath to a custom synthesis prompt template (relative to repo root). Overrides audience and convention-based detection (.landmark/synthesis-prompt.md).no""
audienceBuilt-in synthesis prompt variant used when no custom prompt template is found. One of general, developer, end-user, enterprise.no""
product-descriptionOne-line product description injected into the synthesis prompt as {{PRODUCT_CONTEXT}}.no""
voice-guideTone/style guidance injected into the synthesis prompt as {{VOICE_GUIDE}}.no""
changelog-sourceTechnical source for synthesis. One of auto (CHANGELOG.md > release body > PRs), changelog, release-body, prs.no""
healthcheckValidate LLM API key with a minimal probe request before synthesis. Catches stale or revoked keys early.nofalse
floating-tagsUpdate floating major version tags (e.g., v1) after release. Recommended for GitHub Actions repos.nofalse
webhook-urlWebhook endpoint URL. On synthesis success, POST a JSON payload with version, notes (markdown/HTML/plaintext), and release URL.no""
webhook-secretHMAC-SHA256 secret for signing webhook payloads (X-Signature-256 header). Optional.no""
slack-webhook-urlSlack Incoming Webhook URL. On synthesis success, POST a Block Kit message with version, categorized notes, and release link.no""
rss-feed-filePath to an RSS 2.0 feed file to update on release (e.g., 'docs/releases.xml'). The file is committed back to the repo.no""
rss-max-entriesMaximum number of RSS entries to retain in the feed file.no50
namedescription
releasedWhether a release was created (full mode) or targeted (synthesis-only mode).
release-tagRelease tag (created by semantic-release in full mode, or from input in synthesis-only mode).
synthesis-succeededWhether synthesis and release body update completed successfully.
release-notesSynthesized user-facing release notes markdown. Empty if synthesis was skipped or failed.
synthesis-qualityQuality of synthesized output: valid (passed validation), degraded (validation failed, using unvalidated output), skipped (policy skip), or failed.
synthesis-statusMachine-readable JSON status for synthesis, model attempts, context sources, cost metadata, classification, and publication destinations.
webhook-sentWhether the webhook notification was sent successfully.
slack-sentWhether the Slack notification was sent successfully.
synthesis-failure-issue-actionCompanion issue lifecycle result: closed, reported, failed, or skipped.