Skip to content

Commit fa976a0

Browse files
committed
feat(skills): publish objectstack-pm-dispatch — the project-agnostic PM dispatch loop (#4607)
Generalizes the repo-internal .claude/skills/pm-dispatch core into the published skills/ catalog so any ObjectStack project (hotcrm, customer projects) can install the loop with the skills CLI. Project-specific rules are replaced by two seams: an optional .claude/pm-dispatch.json (backlogRepo / repos / batch / mode / conventionsFile / routingLabelPrefix, zero-config = current repo is the only shard and the backlog), and pointers to the project's own conventions file for gates, release-note artifacts, branch naming and merge policy. The developer-agent procedure ships embedded as a paste-in template, so the loop needs no custom agent types. Adds the upstream-reporting section for platform defects found in an app project. The internal .claude version is untouched. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012C2cd7tL8QDoZ2QKN3djJ5
1 parent 45a5787 commit fa976a0

6 files changed

Lines changed: 875 additions & 7 deletions

File tree

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
---
2+
---
3+
4+
docs(skills): publish `objectstack-pm-dispatch` — the project-agnostic core of the PM dispatch loop, installable by any ObjectStack project (#4607).
5+
6+
The multi-agent delivery loop (backlog triage → claim → dispatch → structured
7+
report → review → land) has only existed as repo-internal agent tooling under
8+
`.claude/`. Third-party projects building on ObjectStack — hotcrm, customer
9+
projects — run the same shape of work and had nothing to install. This adds the
10+
generalized skill to the published `skills/` catalog:
11+
12+
- **Config over hardcoding.** The loop reads an optional
13+
`.claude/pm-dispatch.json` (`backlogRepo`, `repos`, `batch`, `mode`,
14+
`conventionsFile`, `routingLabelPrefix`); with no file the current repository
15+
is both the only shard and the backlog. Every project-specific gate — branch
16+
naming, release-note artifact, test commands, merge policy — is read from the
17+
project's own conventions file rather than baked into the skill, and that file
18+
wins on conflict.
19+
- **The developer-agent operating procedure is embedded as a template** the PM
20+
pastes into each dispatch, so the loop works with no custom agent types:
21+
worktree-first, scope = the issue, contract-first (no lenient consumer
22+
fallback), the JSON report contract, `needs_decision` instead of guessing, and
23+
the container resource discipline (shared heavy-verify `flock`, heap cap,
24+
scoped builds, PID-only process operations, worktree cleanup).
25+
- **The two-axis decision frame is kept verbatim** because both axes generalize:
26+
① long-term architectural soundness for this project, ② making AI-authored
27+
code — especially AI-authored metadata — structurally hard to get wrong
28+
(tighten the producer, never make the consumer tolerant).
29+
- **New: upstream reporting.** What an app project does when it finds a
30+
*platform* defect — stale-premise check against upstream first, minimal repro
31+
with pinned versions and the contract being cited, **never** a tolerant
32+
workaround in the app, an upstream issue backlinked with `Part of <app>#N` and
33+
carrying none of the upstream's queue labels, and the app-side task parked as
34+
`Blocked-by:` or as a version pin with a written unblock condition.
35+
36+
Catalog registration only — `metadata.domain: process`, no `metadata.internal`,
37+
listed in `skills/README.md` and `content/docs/ai/skills-reference.mdx` via the
38+
existing `build-skill-docs.ts` generator. The repo-internal `.claude` version is
39+
untouched. Releases nothing: no published package's shipped files change
40+
(`packages/spec` does not ship `scripts/`).

content/docs/ai/skills-reference.mdx

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ description: Reference for every ObjectStack AI skill — domain-scoped knowledg
55

66
# AI Skills Reference
77

8-
ObjectStack ships a set of **domain-specific skills** that teach AI assistants (Claude Code, GitHub Copilot, Cursor, …) the protocol's schemas, patterns, and constraints. This guide is the complete catalog.
8+
ObjectStack ships a set of **domain-specific skills** that teach AI assistants (Claude Code, GitHub Copilot, Cursor, …) the protocol's schemas, patterns, and constraints — plus **process** skills that teach how work moves through a project rather than what to author. This guide is the complete catalog.
99

1010
<Callout type="info">
1111
**New to skills?** Read [AI Skills System](/docs/ai/skills) first for the conceptual overview, then return here for the per-skill reference.
@@ -39,7 +39,7 @@ Skills are versioned as **one bundle**. You do not track or update each skill in
3939

4040
{/* BEGIN GENERATED: skills (packages/spec/scripts/build-skill-docs.ts) — DO NOT EDIT */}
4141

42-
ObjectStack ships **9 domain-specific skills**. Each is self-contained an AI assistant loads only the ones a task needs.
42+
ObjectStack ships **10 skills** — one per authoring domain, plus process skills for how a project is delivered. Each is self-contained: an AI assistant loads only the ones a task needs.
4343

4444
## Quick Reference
4545

@@ -54,6 +54,7 @@ ObjectStack ships **9 domain-specific skills**. Each is self-contained — an AI
5454
| 7 | [API](#api) | `api` | `skills/objectstack-api/` | Design the server-side API surface that an ObjectStack runtime exposes — REST endpoints, auth providers, realtime channels, error envelopes, batch/versioning contracts. |
5555
| 8 | [i18n](#i18n) | `i18n` | `skills/objectstack-i18n/` | Author ObjectStack translation bundles — object/field labels, view text, app navigation strings, automation messages — and configure locale fallback, coverage reporting, and the per-locale source layout. |
5656
| 9 | [Formula](#formula) | `expression` | `skills/objectstack-formula/` | Author CEL expressions used across ObjectStack — formula fields, field conditional rules (`visibleWhen`, `readonlyWhen`, `requiredWhen`), validation / sharing / visibility predicates, flow conditions, and dynamic seed values. |
57+
| 10 | [PM Dispatch](#pm-dispatch) | `process` | `skills/objectstack-pm-dispatch/` | Run a project-manager dispatch loop over a GitHub backlog: triage and queue ready issues, claim each one, dispatch it to a parallel developer agent that returns a structured JSON report, review the results against GitHub, and drive accepted pull requests to landing — escalating to the maintainer only what genuinely needs a human decision. Ships the developer-agent operating template the loop injects into every dispatch (no custom agent types required) and the upstream-reporting procedure for platform defects an app project finds. |
5758

5859
---
5960

@@ -183,6 +184,20 @@ Do not use for SQL fragments (driver-native), cron schedules (cron dialect), or
183184

184185
---
185186

187+
### PM Dispatch
188+
189+
**Domain** `process` · **Path** `skills/objectstack-pm-dispatch/`
190+
191+
Run a project-manager dispatch loop over a GitHub backlog: triage and queue ready issues, claim each one, dispatch it to a parallel developer agent that returns a structured JSON report, review the results against GitHub, and drive accepted pull requests to landing — escalating to the maintainer only what genuinely needs a human decision. Ships the developer-agent operating template the loop injects into every dispatch (no custom agent types required) and the upstream-reporting procedure for platform defects an app project finds.
192+
193+
Use when asked to "work through the backlog", "batch-dispatch issues", "派发 issue 给开发 agent", to stand up a multi-agent delivery loop in an ObjectStack app project, or to report a platform bug found while building an app.
194+
195+
Do not use for authoring ObjectStack metadata (the domain skills cover that), for a single already-scoped change you can just make, or as a replacement for the project's own conventions file — that file always wins.
196+
197+
**Tags:** `pm`, `dispatch`, `backlog`, `triage`, `multi-agent`, `delivery`, `github`, `escalation`, `upstream`
198+
199+
---
200+
186201
{/* END GENERATED: skills */}
187202

188203
## Skill anatomy

content/docs/ai/skills.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ This format ensures AI assistants generate protocol-compliant code.
128128

129129
## The skill catalog
130130

131-
ObjectStack provides **nine domain-specific skills**, one per protocol domain — Platform, Data, Query, UI, Automation, AI, API, i18n, and Formula.
131+
ObjectStack provides **nine domain-specific skills**, one per protocol domain — Platform, Data, Query, UI, Automation, AI, API, i18n, and Formula — plus **PM Dispatch**, a `process` skill that teaches no schema: it runs the multi-agent backlog → dispatch → review → land loop for a project built on the platform, and the procedure for reporting a platform defect upstream.
132132

133133
The authoritative list (names, domains, and "use when / do not use" boundaries) is generated from each skill's `SKILL.md` frontmatter. See the **[AI Skills Reference](/docs/ai/skills-reference)** for the full catalog with per-skill detail.
134134

packages/spec/scripts/build-skill-docs.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ const DISPLAY: Array<{ name: string; label: string }> = [
5454
{ name: 'objectstack-api', label: 'API' },
5555
{ name: 'objectstack-i18n', label: 'i18n' },
5656
{ name: 'objectstack-formula', label: 'Formula' },
57+
{ name: 'objectstack-pm-dispatch', label: 'PM Dispatch' },
5758
];
5859

5960
// ── Frontmatter parser ───────────────────────────────────────────────────────
@@ -178,7 +179,7 @@ function renderGuideBlock(skills: Skill[]): string {
178179
return [
179180
begin,
180181
'',
181-
`ObjectStack ships **${skills.length} domain-specific skills**. Each is self-contained an AI assistant loads only the ones a task needs.`,
182+
`ObjectStack ships **${skills.length} skills** — one per authoring domain, plus process skills for how a project is delivered. Each is self-contained: an AI assistant loads only the ones a task needs.`,
182183
'',
183184
'## Quick Reference',
184185
'',

skills/README.md

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ npx skills add objectstack-ai/objectstack/skills --all
1212
The `/skills` subpath matters: it is the published catalog boundary — pointing
1313
the skills CLI at the repo root would also pick up repo-internal skills (#3101).
1414

15-
Each skill is self-contained: a `SKILL.md` with YAML frontmatter, plus a
15+
Each **domain** skill is self-contained: a `SKILL.md` with YAML frontmatter, plus a
1616
`references/_index.md` that points into the authoritative Zod sources in
1717
`node_modules/@objectstack/spec/src/...` (the published `@objectstack/spec`
1818
package ships these `.zod.ts` sources, so the pointers resolve in consumer
@@ -38,6 +38,7 @@ apps too).
3838
| [API](./objectstack-api/SKILL.md) | `api` | Design the server-side API surface that an ObjectStack runtime exposes — REST endpoints, auth providers, realtime channels, error envelopes, batch/versioning contracts. |
3939
| [i18n](./objectstack-i18n/SKILL.md) | `i18n` | Author ObjectStack translation bundles — object/field labels, view text, app navigation strings, automation messages — and configure locale fallback, coverage reporting, and the per-locale source layout. |
4040
| [Formula](./objectstack-formula/SKILL.md) | `expression` | Author CEL expressions used across ObjectStack — formula fields, field conditional rules (`visibleWhen`, `readonlyWhen`, `requiredWhen`), validation / sharing / visibility predicates, flow conditions, and dynamic seed values. |
41+
| [PM Dispatch](./objectstack-pm-dispatch/SKILL.md) | `process` | Run a project-manager dispatch loop over a GitHub backlog: triage and queue ready issues, claim each one, dispatch it to a parallel developer agent that returns a structured JSON report, review the results against GitHub, and drive accepted pull requests to landing — escalating to the maintainer only what genuinely needs a human decision. Ships the developer-agent operating template the loop injects into every dispatch (no custom agent types required) and the upstream-reporting procedure for platform defects an app project finds. |
4142

4243
<!-- END GENERATED: skills -->
4344

@@ -59,15 +60,19 @@ skills/<skill-name>/
5960
# inert (but harmless) in consumer installs
6061
```
6162

63+
A `process` skill (`metadata.domain: process`) points at no Zod schema, so it
64+
carries `SKILL.md` alone — `gen:skill-refs` only visits skills listed in its
65+
`SKILL_MAP`, and there is nothing to map.
66+
6267
`SKILL.md` frontmatter fields:
6368

6469
| Field | Purpose |
6570
|:------|:--------|
6671
| `name` | Stable id (matches directory name). |
6772
| `description` | One paragraph — what the skill is for *and* what it is **not** for. |
6873
| `license` | `Apache-2.0`. |
69-
| `compatibility` | Minimum `@objectstack/spec` version. |
70-
| `metadata.domain` | One of: `platform`, `data`, `query`, `ui`, `automation`, `ai`, `api`, `i18n`, `formula`. |
74+
| `compatibility` | Minimum `@objectstack/spec` version — or, for a `process` skill that binds to no schema, the tooling it needs. |
75+
| `metadata.domain` | Authoring domain — one of: `platform`, `data`, `query`, `ui`, `automation`, `ai`, `api`, `i18n`, `expression` — or `process` for a delivery-process skill that teaches no schema. |
7176
| `metadata.tags` | Short comma-separated keywords for retrieval. |
7277

7378
---

0 commit comments

Comments
 (0)