App-karr
view release on metacpan or search on metacpan
.claude/agents/karr-board-worker.md view on Meta::CPAN
their existing specialists.
## Working loop
When a ticket id is supplied, inspect it with `karr show ID` (or
`perl -Ilib bin/karr show ID` when `karr` is not installed), reproduce before fixing, and
handoff with the exact test command and result. Use `karr create` only for genuinely separate
drift; do not expand the assigned ticket.
Tests must use temporary repositories and must never mutate the developer's real board.
Run the smallest relevant test first, then `prove -l t/`. Never run `dzil release` or upload
to CPAN.
.claude/agents/karr-foundation-worker.md view on Meta::CPAN
their existing specialists.
## Working loop
When a ticket id is supplied, inspect it with `karr show ID` (or
`perl -Ilib bin/karr show ID` when needed), reproduce with temporary repositories and an
obviously harmless fake agent command, then handoff with the exact test command and result.
Never run a real unattended agent drain merely to test scheduling, and clean up every process
you start.
Run the narrow foundation test first, then `prove -l t/`. Never run `dzil release`, upload to
CPAN, or push Docker images.
.claude/agents/karr-ref-worker.md view on Meta::CPAN
## Working loop
When a ticket id is supplied, inspect it with `karr show ID` (or
`perl -Ilib bin/karr show ID` when needed), reproduce before fixing, and handoff with the
exact test command and result. New storage failures discovered out of scope become separate
`karr create` tickets.
Every test must use an isolated temporary Git repository. Never point destructive commands,
ref deletion, restore, or remote sync at the developer's real board. Run the narrow test,
then `prove -l t/`. Never run `dzil release` or upload to CPAN.
.claude/agents/karr-worker.md view on Meta::CPAN
Workflow when fixing bugs:
1. `karr list` / `karr show <id>` to read the open ticket
2. Reproduce the bug locally before changing code
3. Fix root cause, not symptom
4. Write a regression test under `t/`
5. Run `prove -l t/` until clean
6. `karr handoff <id>` with note describing fix + commit refs
Use `karr` itself for ticket coordination â dogfood.
**Never** run `dzil release` or upload to CPAN â that needs the maintainer's explicit go-ahead. `dzil build` / `dzil test` are fine.
.claude/rules/karr-rules.md view on Meta::CPAN
- `karr move ID in-progress --claim NAME` â start · `karr handoff ID --claim NAME --note "â¦"` â to review
- `NAME=$(karr agentname)` â mint a claim name **once** and reuse that same `$NAME` for move,
handoff and `--claimed-by`; every call returns a different name, so a fresh one at handoff time
no longer matches the claim (`karr show ID` reads the held name back off the card)
Bugs found while dogfooding become tickets on this board. Full command surface (pick / context /
set-refs / multi-agent): skill `kanban-issues-karr-cli`.
## Release â never without permission
`dzil build` / `dzil test` / `prove -l t/` are fine anytime. `dzil release` and any CPAN upload
are STRICTLY forbidden without the maintainer's explicit go-ahead â even if a plan or roadmap
lists "release" as the next step. For anything heading toward release: stop and ask. After a
release the `$VERSION` bump is a separate, deliberate commit, and it touches every file
under `lib/` and `bin/` â each one carries its own `our $VERSION`, not just
`lib/App/karr.pm`.
## Perl specifics â reference, don't restate
Module loading, Moo/Moose patterns, cpanfile pinning for Getty-authored deps, and house style
live in skill `getty-perl-core` (force-loaded for `karr-*` agents). Do not duplicate that content here.
.claude/skills/getty-perl-release-author-getty/SKILL.md view on Meta::CPAN
- `adoptme` - Add x_adoptme metadata
- `no_github` - Skip GithubMeta and GitHub::CreateRelease, use Repository instead. Auto-set to 1 when `.git/config` has no github.com remote; set `no_github = 0` to force GitHub plugins on anyway
- `no_github_release` - Skip only GitHub::CreateRelease. Same auto-detection; when active, `dzil release` creates a GitHub Release and attaches the tarball, which needs `~/.github-identity` (login + token)
- `gitea` - Treat the remote host as Gitea/Forgejo (repository/bugtracker/homepage via GiteaMeta). Only needed for self-hosted instances â codeberg.org and the author's own are auto-detected. No effect when a GitHub remote exists
- `include_readme` - Ship README.md (excluded from the tarball by default)
- `no_install` - Resulting distribution can't be installed
- `generate_license` - Go back to a generated LICENSE: `@Basic` keeps its License plugin, no LicenseFile check is added. Default 0 â the bundle expects a committed LICENSE (see above)
### Identity & Metadata
- `author` - CPAN author name used for the authority
- `authority` - Override the authority, e.g. `authority = ETHER` when uploading modules owned by another author (default: the `author` value)
### XS with Alien
- `xs_alien = Alien::Foo` - Auto-configures MakeMaker::Awesome for XS+Alien
- `xs_object = Name` - Override XS object name (default: derived from Alien name)
### Versioning
- `task = 1` - TaskWeaver + AutoVersion
- `manual_version = x.x` - Manual version
- `major_version = 2` - Major version for AutoVersion
- `version_finder` - multi-value; forwarded as the `finder` option of RewriteVersion::Transitional + BumpVersionAfterRelease (default path) and PkgVersion (task/manual_version path). Defaults to `:MainModule` when `no_cpan` is set, otherwise unset.
.claude/skills/getty-perl-release-author-getty/SKILL.md view on Meta::CPAN
**Executables belong in `bin/`, never `script/`.** The bundle sets no `ExecDir`, so
Dist::Zilla's default of `bin` applies: files under `script/` are not installed as
executables and their `$VERSION` is never rewritten. A distribution with a `script/`
directory should have it renamed to `bin/` â otherwise none of the above takes
effect.
## Release Workflow
```bash
dzil release # Builds, tests, uploads to CPAN, bumps version, commits, tags
```
Read the `{{$NEXT}}` section of `Changes` once as a whole first. It was written bullet
by bullet over weeks, so this is where entries circling one topic get merged into one
and over-detailed ones get cut back (skill `getty-git-commit-style`). It is not only a
changelog: `GitHub::CreateRelease` runs with `notes_from = ChangeLog` and publishes the
section verbatim as the release notes.
Fix it in its own commit *before* `dzil release`. `Changes` sits in the release commit's
`allow_dirty` list, so an uncommitted edit stops nothing â it is folded into the release
( run in 2.964 seconds using v1.01-cache-2.11-cpan-b16cb0d3907 )