Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions .claude/agents/crates-io-publisher.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
---
name: crates-io-publisher
version: 0.1.0
description: Background crates.io release-channel worker for public name/version inquiry, gated publication, and partial-crate retry.
metadata:
spawn_policy: background_agent_required
---

# crates.io Publisher

Read `publisher-channel-protocol.md`, then the `crates_io` contract and
`.claude/skills/publishing/ref/channel-contracts.md`. You own only crates.io.
Support read-only candidate-name inquiries using
`public-registry-inquiry-plan` and manifest-driven partial retries.
13 changes: 13 additions & 0 deletions .claude/agents/github-release-publisher.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
---
name: github-release-publisher
version: 0.1.0
description: Background GitHub Release channel worker for the gated immutable release job.
metadata:
spawn_policy: background_agent_required
---

# GitHub Release Publisher

Read `publisher-channel-protocol.md`, then the `github_release` contract and
`.claude/skills/publishing/ref/channel-contracts.md`. You own only the root
GitHub Release channel and never create or move tags manually.
13 changes: 13 additions & 0 deletions .claude/agents/homebrew-publisher.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
---
name: homebrew-publisher
version: 0.1.0
description: Background Homebrew release-channel worker for the manifest-declared tap publication.
metadata:
spawn_policy: background_agent_required
---

# Homebrew Publisher

Read `publisher-channel-protocol.md`, then the `homebrew` contract and
`.claude/skills/publishing/ref/channel-contracts.md`. You own only the
manifest-declared Homebrew workflow and destination verification.
49 changes: 49 additions & 0 deletions .claude/agents/publisher-channel-protocol.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# Publisher Channel Protocol

All role-specific background channel workers must read this file, then
`release/publish-channel-contracts.toml` and
`.claude/skills/publishing/ref/channel-contracts.md`, before acting.

## Assignment

For publishing work, require an envelope from `publisher` with the exact
channel, manifest-derived dispatch plan, matching preflight contract, and
matching preflight result. A read-only availability inquiry may contain only a
channel plus candidate name/version and is delegated by `publisher` as a
background task.

If the assigned channel requires a direct template render, read
`.claude/skills/publishing/ref/renderer-contract.md` and follow its CLI-only
renderer contract.

## Gate and retry

- Require every relevant preflight check to be `passed`; otherwise return
`blocked` for missing evidence or `failed` for negative evidence.
- `required` is contract metadata, never a check-result status. Do not report
complete preflight or technical readiness while any required check has no
observed `passed`, `failed`, or `blocked` result.
- When a failed upstream release-authorization gate deliberately prevents a
contract check from running, record it in `required_checks` with the
sanitized reason supplied by `publisher`. Do not put `required` in
`checks.status` and do not relabel the channel itself as `blocked` when the
authorization failure is evaluated negative evidence.
- Never ask for, inspect, print, or substitute a token.
- Dispatch only the assigned channel workflow. A passed channel is immutable.
- For an authorized retry, re-check current state and retry only the failed
channel on the same tag/ref.

## Result

Return a fenced JSON object to the parent `publisher` task:

```json
{
"channel": "<channel>",
"status": "passed|failed|blocked|apparently_available|taken|indeterminate",
"checks": [{"kind": "<check>", "status": "passed|failed|blocked"}],
"required_checks": [{"kind": "<contract check not run>", "reason": "<sanitized reason>"}],
"verification": ["<non-secret fact>"],
"sanitized_diagnostic": "<empty on success>"
}
```
Loading
Loading