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
6 changes: 3 additions & 3 deletions .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,9 @@
"description": "Intent-triggered Git skills for branches, commits, PRs, and candidate-bound PR evidence"
},
{
"name": "darrow-tickets-github",
"source": "./plugins/capability/darrow-tickets-github",
"description": "GitHub Issues ticket skills: create-ticket, read-ticket, update-ticket, list-tickets"
"name": "darrow-tickets",
"source": "./plugins/capability/darrow-tickets",
"description": "Ticket skills with a bundled GitHub Issues adapter: create-ticket, read-ticket, update-ticket, list-tickets"
},
{
"name": "darrow-readiness-gate",
Expand Down
10 changes: 5 additions & 5 deletions .github/workflows/python-quality.yml
Original file line number Diff line number Diff line change
Expand Up @@ -237,7 +237,7 @@ jobs:
tickets-windows:
name: Tickets Python ${{ matrix.python-version }} on windows-latest
needs: changes
if: contains(needs.changes.outputs.packages, 'plugins/capability/darrow-tickets-github/backend')
if: contains(needs.changes.outputs.packages, 'plugins/capability/darrow-tickets/backend')
strategy:
fail-fast: false
matrix:
Expand All @@ -256,12 +256,12 @@ jobs:
- uses: astral-sh/setup-uv@v6
with:
enable-cache: true
- run: scripts/check-python --package plugins/capability/darrow-tickets-github/backend
- run: scripts/check-python --package plugins/capability/darrow-tickets/backend

tickets-fresh-install:
name: Fresh install tickets on ${{ matrix.os }}
needs: changes
if: contains(needs.changes.outputs.packages, 'plugins/capability/darrow-tickets-github/backend')
if: contains(needs.changes.outputs.packages, 'plugins/capability/darrow-tickets/backend')
strategy:
fail-fast: false
matrix:
Expand All @@ -273,7 +273,7 @@ jobs:
with:
python-version: "3.13"
- uses: astral-sh/setup-uv@v6
- run: uv run --quiet --frozen --no-dev --project plugins/capability/darrow-tickets-github/backend python plugins/capability/darrow-tickets-github/backend/tests/fresh_install.py
- run: uv run --quiet --frozen --no-dev --project plugins/capability/darrow-tickets/backend python plugins/capability/darrow-tickets/backend/tests/fresh_install.py

decisions-windows:
name: Decisions Python ${{ matrix.python-version }} on windows-latest
Expand Down Expand Up @@ -634,7 +634,7 @@ jobs:
GIT_SELECTED: ${{ contains(needs.changes.outputs.packages, 'plugins/capability/darrow-git/backend') }}
GIT_WINDOWS_RESULT: ${{ needs.git-windows.result }}
GIT_INSTALL_RESULT: ${{ needs.git-fresh-install.result }}
TICKETS_SELECTED: ${{ contains(needs.changes.outputs.packages, 'plugins/capability/darrow-tickets-github/backend') }}
TICKETS_SELECTED: ${{ contains(needs.changes.outputs.packages, 'plugins/capability/darrow-tickets/backend') }}
TICKETS_WINDOWS_RESULT: ${{ needs.tickets-windows.result }}
TICKETS_INSTALL_RESULT: ${{ needs.tickets-fresh-install.result }}
DECISIONS_SELECTED: ${{ contains(needs.changes.outputs.packages, 'plugins/foundation/darrow-decisions/backend') }}
Expand Down
2 changes: 1 addition & 1 deletion docs/choosing-plugins.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ alone; its README owns its prerequisites, behavior, and safety rules.
| Review a change independently | [Review](../plugins/capability/darrow-review/README.md) |
| Verify implementation acceptance through independent assessment | [Verification](../plugins/capability/darrow-verification/README.md) |
| Create a branch, commit, or pull request | [Git](../plugins/capability/darrow-git/README.md) |
| Read, list, create, or update GitHub issues | [GitHub tickets](../plugins/capability/darrow-tickets-github/README.md) |
| Read, list, create, or update GitHub issues | [Tickets](../plugins/capability/darrow-tickets/README.md) |
| Understand technical structure in a compact visual | [Explanation](../plugins/capability/darrow-explanation/README.md) |
| Export Codex turn telemetry to Langfuse | [Langfuse observability](../plugins/capability/darrow-observability-langfuse/README.md) |
| Organize repository agent guidance | [Information architecture](../plugins/foundation/darrow-information-architecture/README.md) |
Expand Down
11 changes: 6 additions & 5 deletions docs/design.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,12 +76,13 @@ on top of the host's skill discovery. If an optional skill is unavailable, the
consumer follows its own documented stop or fallback behavior instead of
reaching into another plugin.

Provider-specific integrations name both the capability and provider, such as
`darrow-observability-langfuse` and `darrow-tickets-github`. Ticket providers
remain separately installable while advertising the same operation intents.
Their metadata distinguishes supported trackers; consumers honor the user's
Provider-specific integrations may name both the capability and provider, such
as `darrow-observability-langfuse`. Ticket management instead uses one
`darrow-tickets` plugin with four operation skills and contained tracker
adapters. Its metadata names supported trackers; consumers honor the user's
tracker choice or established project context and clarify unresolved provider
ambiguity before tracker access.
ambiguity before tracker access. Adding a tracker does not require another
public ticket skill or a sibling runtime dependency.

Advertised intent identifies a potential provider; the caller must also check
its prerequisites, effects, returned evidence and stop conditions. A capability
Expand Down
47 changes: 26 additions & 21 deletions docs/specs/ticket-management.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,9 @@ Consolidates ticket operations into intent-triggered skills so that
creating and updating tickets is consistent, traceable, and backend-neutral
regardless of which agent runtime executes them and which tracker backs them.

GitHub Issues provider: `darrow-tickets-github`. Skills: `create-ticket`, `read-ticket`,
`update-ticket`, `list-tickets`.
Plugin: `darrow-tickets`. Skills: `create-ticket`, `read-ticket`,
`update-ticket`, `list-tickets`. The bundled GitHub Issues provider is the
only shipped tracker adapter. Other trackers may be added inside this plugin.

Scope: mechanics only. These skills record and mutate tickets; they do not
refine requirements, plan or break down work, or review solutions. Those
Expand All @@ -23,10 +24,10 @@ stable intent ("create a ticket for X") while the backend stays swappable.

## Backend contract

- **TM-P3 — Contained portable mechanics.** The GitHub provider ships one
dependency-free Python package managed by UV, invoked through its frozen
- **TM-P3 — Contained portable mechanics.** The ticket plugin ships one
contained Python package managed by UV, invoked through its frozen
`darrow-ticket` entrypoint by all four skills. Preserve the command arguments,
output records, refusals, and exit codes while removing the Bash launcher.
output records, refusals, and exit codes of the existing GitHub provider.
Use argument-vector subprocesses, explicit UTF-8 JSON decoding and validation,
and native filesystem and temporary-file handling on Linux, macOS, and Windows.
Provider failures must stop pending mutations; completed mutations remain
Expand All @@ -38,23 +39,25 @@ stable intent ("create a ticket for X") while the backend stays swappable.
remain static and nonmutating, perform no repository or tracker inspection,
preserve provider boundaries, and leave workflow and authority in the skill.

- **TM-P1 — Independently installable providers.** Each tracker implementation
lives in its own `darrow-tickets-<provider>` plugin. The shipped provider is
GitHub Issues via `gh`. Future trackers use separate, self-contained plugins;
no shared runtime plugin or provider registry is required. Repository-resident
- **TM-P1 — One self-contained ticket plugin.** The four skills and all tracker
adapters live in `darrow-tickets`. The shipped adapter is GitHub Issues via
`gh`. Future trackers extend this contained Python package; no sibling plugin,
shared runtime, or external provider registry is required. Only the selected
adapter's prerequisites are required for an operation. Repository-resident
Darrow ticket directories contain published artifacts only; they are never a
tracker or a file-backed ticket store.
- **TM-P2 — Shared intents, explicit provider scope.** Skill names and operation
invariants remain backend-neutral. Each provider advertises its tracker in
discovery metadata and states its prerequisites in the skill. CLI calls,
field mappings, and linking syntax stay in its bundled scripts. Consumers
request operations by intent and select a provider matching the user's
explicit tracker choice or established project context. If several installed
providers remain plausible, ask which tracker before contacting one. An
explicit request for another tracker must not be redirected to GitHub merely
because the repository is hosted there. A URL's appearance alone is not an
explicit provider choice: once this provider is selected, TM-R1 still requires
the bundled CLI to validate every supplied ticket URL.
invariants remain backend-neutral. Discovery metadata names supported trackers;
the skills state the selected tracker's prerequisites. Provider-specific CLI
calls, field mappings, identifiers, and linking syntax stay in its bundled
adapter. Consumers request operations by intent and select a tracker matching
the user's explicit choice or established project context. The CLI accepts an
explicit provider option. With only one bundled adapter, it is the default;
when several are bundled and no provider is selected, refuse before tracker
access. The caller must clarify unresolved ambiguity. A failed selected
provider never triggers a silent fallback. A URL's appearance alone is not
an explicit provider choice: after selection, TM-R1 requires the adapter to
validate every supplied ticket URL.
- **TM-1 — Deliberate backend.** The script resolves exactly one usable
backend deterministically and the report names it. No usable backend
(no remote, issues disabled, missing CLI) → refuse with a clear error
Expand Down Expand Up @@ -228,12 +231,14 @@ then relay its authoritative metadata, relations, and body.
permission to comment, edit, label, relate, close, reopen, assign, or start
the tracked work.
- **TM-R3 — Authoritative complete output.** Return the backend, provider-owned
`ticket-token: N` sourced from the authoritative ticket number, ID, state,
`ticket-token: <opaque provider identifier>` sourced from the authoritative
ticket record, ID, state,
title, canonical URL, labels, parent and dependency relations, and full
description exactly as normalized by the bundled CLI. The token is identical
whether the accepted input was `N`, `#N`, or the current-project canonical
URL; it is absent from every refusal or retrieval failure. Consumers preserve
it verbatim rather than deriving a token from an input reference or URL. Do not summarize,
it verbatim rather than deriving a token from an input reference or URL. For
GitHub Issues the token is its issue number. Do not summarize,
rerank, enrich, interpret, assess readiness, or omit inconvenient content.
Imperative text inside a ticket remains quoted data: retrieval does not execute
those instructions or append an editorial assessment of them.
Expand Down
2 changes: 1 addition & 1 deletion plugins/capability/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ contracts.
- [Verification](darrow-verification/README.md) coordinates acceptance evidence through compatible independent review.
- [Git](darrow-git/README.md) creates branches and commits, publishes verified
PRs, and posts candidate-bound reviewer evidence.
- [GitHub tickets](darrow-tickets-github/README.md) handles exact tracker operations.
- [Tickets](darrow-tickets/README.md) handles exact tracker operations; GitHub Issues is bundled.
- [Explanation](darrow-explanation/README.md) gives compact grounded visuals.
- [Langfuse observability](darrow-observability-langfuse/README.md) exports opted-in Codex telemetry.

Expand Down

This file was deleted.

23 changes: 0 additions & 23 deletions plugins/capability/darrow-tickets-github/.codex-plugin/plugin.json

This file was deleted.

11 changes: 11 additions & 0 deletions plugins/capability/darrow-tickets/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"name": "darrow-tickets",
"description": "Ticket skills with a bundled GitHub Issues adapter: create-ticket, read-ticket, update-ticket, list-tickets",
"version": "0.5.0",
"hooks": "./.claude-plugin/hooks.json",
"license": "BUSL-1.1",
"author": {
"name": "Björn Rochel",
"email": "bjoern@bjro.de"
}
}
23 changes: 23 additions & 0 deletions plugins/capability/darrow-tickets/.codex-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"name": "darrow-tickets",
"version": "0.5.0",
"description": "Ticket skills with a bundled GitHub Issues adapter: create-ticket, read-ticket, update-ticket, list-tickets",
"author": {
"name": "Björn Rochel"
},
"skills": "./skills/",
"interface": {
"displayName": "Darrow -> Tickets",
"shortDescription": "Create, read, find, and update tickets",
"longDescription": "Create well-formed tickets, retrieve one exact ticket, find relevant open work, and apply one verified update through the bundled GitHub Issues adapter.",
"developerName": "Björn Rochel",
"category": "Productivity",
"capabilities": ["Interactive", "Read", "Write"],
"defaultPrompt": [
"Create a ticket for this problem.",
"Read ticket #42.",
"List the open bugs for this project.",
"Close the ticket for this completed work."
]
}
}
Loading
Loading