agent-templates 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ADOPTING.md +57 -57
- package/CLAUDE.md +128 -125
- package/LICENSE +21 -21
- package/README.md +32 -32
- package/package.json +32 -32
- package/patterns/three-agent-architect-builder-reviewer/README.md +161 -153
- package/patterns/three-agent-architect-builder-reviewer/scaffold/.claude/agents/architect.md +31 -31
- package/patterns/three-agent-architect-builder-reviewer/scaffold/.claude/agents/builder.md +25 -25
- package/patterns/three-agent-architect-builder-reviewer/scaffold/.claude/agents/reviewer.md +33 -33
- package/patterns/three-agent-architect-builder-reviewer/scaffold/.claude/agents/triage.md +31 -31
- package/patterns/three-agent-architect-builder-reviewer/scaffold/.claude/commands/breakdown-prd.md +18 -18
- package/patterns/three-agent-architect-builder-reviewer/scaffold/.claude/commands/nightly-issues.md +14 -14
- package/patterns/three-agent-architect-builder-reviewer/scaffold/.claude/commands/review-ticket.md +14 -14
- package/patterns/three-agent-architect-builder-reviewer/scaffold/.claude/commands/start-all.md +17 -0
- package/patterns/three-agent-architect-builder-reviewer/scaffold/.claude/commands/start-milestone.md +15 -15
- package/patterns/three-agent-architect-builder-reviewer/scaffold/.claude/commands/verify-delivery.md +20 -20
- package/patterns/three-agent-architect-builder-reviewer/scaffold/.claude/hooks/guard-main-session-writes.mjs +53 -53
- package/patterns/three-agent-architect-builder-reviewer/scaffold/.claude/scripts/milestone-dag.mjs +94 -0
- package/patterns/three-agent-architect-builder-reviewer/scaffold/.claude/scripts/publish-tickets.mjs +263 -263
- package/patterns/three-agent-architect-builder-reviewer/scaffold/.claude/settings.json +15 -15
- package/patterns/three-agent-architect-builder-reviewer/scaffold/.claude/workflows/nightly-issues.js +139 -139
- package/patterns/three-agent-architect-builder-reviewer/scaffold/.claude/workflows/run-milestone.js +223 -223
- package/patterns/three-agent-architect-builder-reviewer/scaffold/.claude/workflows/start-all.js +118 -0
- package/patterns/three-agent-architect-builder-reviewer/scaffold/INSTALL.md +65 -65
- package/patterns/three-agent-architect-builder-reviewer/scaffold/claude-md-snippet.md +38 -37
- package/scripts/adopt.mjs +187 -177
- package/scripts/build-site.mjs +264 -264
- package/scripts/cli.mjs +52 -52
- package/templates/pattern-README.template.md +65 -65
- package/templates/ticket.template.md +104 -104
- package/templates/tracker/github/ISSUE_TEMPLATE/bug-report.md +28 -28
- package/templates/tracker/github/ISSUE_TEMPLATE/decision-record.md +25 -25
- package/templates/tracker/github/ISSUE_TEMPLATE/task.md +36 -36
- package/templates/tracker/github/PULL_REQUEST_TEMPLATE.md +54 -54
- package/templates/tracker/gitlab/issue_templates/bug-report.md +23 -23
- package/templates/tracker/gitlab/issue_templates/decision-record.md +20 -20
- package/templates/tracker/gitlab/issue_templates/task.md +31 -31
- package/templates/tracker/gitlab/merge_request_templates/default.md +55 -55
package/scripts/cli.mjs
CHANGED
|
@@ -1,52 +1,52 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
// agent-templates CLI — the npx entry point (package.json "bin").
|
|
3
|
-
// Dispatches to the catalog tooling; carries no logic of its own.
|
|
4
|
-
//
|
|
5
|
-
// agent-templates list show available patterns
|
|
6
|
-
// agent-templates adopt <pattern> <target-dir> [options] install a pattern (see adopt.mjs)
|
|
7
|
-
//
|
|
8
|
-
// Without cloning the catalog:
|
|
9
|
-
// npx github:Ruihang2017/agent-templates list
|
|
10
|
-
// npx github:Ruihang2017/agent-templates adopt three-agent-architect-builder-reviewer .
|
|
11
|
-
|
|
12
|
-
import { spawnSync } from 'node:child_process'
|
|
13
|
-
import { existsSync, readdirSync } from 'node:fs'
|
|
14
|
-
import { join } from 'node:path'
|
|
15
|
-
import { fileURLToPath } from 'node:url'
|
|
16
|
-
|
|
17
|
-
const ROOT = fileURLToPath(new URL('..', import.meta.url))
|
|
18
|
-
const [cmd, ...rest] = process.argv.slice(2)
|
|
19
|
-
|
|
20
|
-
if (cmd === 'adopt') {
|
|
21
|
-
const r = spawnSync(process.execPath, [join(ROOT, 'scripts', 'adopt.mjs'), ...rest], { stdio: 'inherit' })
|
|
22
|
-
process.exit(r.status === null ? 1 : r.status)
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
if (cmd === 'list') {
|
|
26
|
-
const dir = join(ROOT, 'patterns')
|
|
27
|
-
const patterns = existsSync(dir)
|
|
28
|
-
? readdirSync(dir, { withFileTypes: true })
|
|
29
|
-
.filter((d) => d.isDirectory() && existsSync(join(dir, d.name, 'scaffold')))
|
|
30
|
-
.map((d) => d.name)
|
|
31
|
-
: []
|
|
32
|
-
console.log(patterns.length ? patterns.join('\n') : '(no patterns found)')
|
|
33
|
-
process.exit(0)
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
const usage = `agent-templates — multi-agent pattern catalog
|
|
37
|
-
|
|
38
|
-
usage:
|
|
39
|
-
agent-templates list
|
|
40
|
-
agent-templates adopt <pattern> <target-dir> [--platform gh|glab] [--force]
|
|
41
|
-
|
|
42
|
-
without cloning:
|
|
43
|
-
npx github:Ruihang2017/agent-templates list
|
|
44
|
-
npx github:Ruihang2017/agent-templates adopt three-agent-architect-builder-reviewer .
|
|
45
|
-
|
|
46
|
-
docs: ADOPTING.md in the catalog root`
|
|
47
|
-
if (!cmd) {
|
|
48
|
-
console.log(usage)
|
|
49
|
-
process.exit(0)
|
|
50
|
-
}
|
|
51
|
-
console.error(`unknown command: ${cmd}\n\n${usage}`)
|
|
52
|
-
process.exit(1)
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// agent-templates CLI — the npx entry point (package.json "bin").
|
|
3
|
+
// Dispatches to the catalog tooling; carries no logic of its own.
|
|
4
|
+
//
|
|
5
|
+
// agent-templates list show available patterns
|
|
6
|
+
// agent-templates adopt <pattern> <target-dir> [options] install a pattern (see adopt.mjs)
|
|
7
|
+
//
|
|
8
|
+
// Without cloning the catalog:
|
|
9
|
+
// npx github:Ruihang2017/agent-templates list
|
|
10
|
+
// npx github:Ruihang2017/agent-templates adopt three-agent-architect-builder-reviewer .
|
|
11
|
+
|
|
12
|
+
import { spawnSync } from 'node:child_process'
|
|
13
|
+
import { existsSync, readdirSync } from 'node:fs'
|
|
14
|
+
import { join } from 'node:path'
|
|
15
|
+
import { fileURLToPath } from 'node:url'
|
|
16
|
+
|
|
17
|
+
const ROOT = fileURLToPath(new URL('..', import.meta.url))
|
|
18
|
+
const [cmd, ...rest] = process.argv.slice(2)
|
|
19
|
+
|
|
20
|
+
if (cmd === 'adopt') {
|
|
21
|
+
const r = spawnSync(process.execPath, [join(ROOT, 'scripts', 'adopt.mjs'), ...rest], { stdio: 'inherit' })
|
|
22
|
+
process.exit(r.status === null ? 1 : r.status)
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
if (cmd === 'list') {
|
|
26
|
+
const dir = join(ROOT, 'patterns')
|
|
27
|
+
const patterns = existsSync(dir)
|
|
28
|
+
? readdirSync(dir, { withFileTypes: true })
|
|
29
|
+
.filter((d) => d.isDirectory() && existsSync(join(dir, d.name, 'scaffold')))
|
|
30
|
+
.map((d) => d.name)
|
|
31
|
+
: []
|
|
32
|
+
console.log(patterns.length ? patterns.join('\n') : '(no patterns found)')
|
|
33
|
+
process.exit(0)
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const usage = `agent-templates — multi-agent pattern catalog
|
|
37
|
+
|
|
38
|
+
usage:
|
|
39
|
+
agent-templates list
|
|
40
|
+
agent-templates adopt <pattern> <target-dir> [--platform gh|glab] [--force]
|
|
41
|
+
|
|
42
|
+
without cloning:
|
|
43
|
+
npx github:Ruihang2017/agent-templates list
|
|
44
|
+
npx github:Ruihang2017/agent-templates adopt three-agent-architect-builder-reviewer .
|
|
45
|
+
|
|
46
|
+
docs: ADOPTING.md in the catalog root`
|
|
47
|
+
if (!cmd) {
|
|
48
|
+
console.log(usage)
|
|
49
|
+
process.exit(0)
|
|
50
|
+
}
|
|
51
|
+
console.error(`unknown command: ${cmd}\n\n${usage}`)
|
|
52
|
+
process.exit(1)
|
|
@@ -1,65 +1,65 @@
|
|
|
1
|
-
# Pattern: <Human-Readable Pattern Name>
|
|
2
|
-
|
|
3
|
-
<!-- Copy this file to patterns/<kebab-name>/README.md and fill EVERY section.
|
|
4
|
-
Format reference: patterns/three-agent-architect-builder-reviewer/README.md
|
|
5
|
-
Rules: CLAUDE.md "Grounding rules" — every model/effort claim carries a source label;
|
|
6
|
-
no training-data impressions; as-of date moves with every recommendation change. -->
|
|
7
|
-
|
|
8
|
-
| Field | Value |
|
|
9
|
-
|---|---|
|
|
10
|
-
| **Pattern name** | `<kebab-name>` (= directory name) |
|
|
11
|
-
| **Status** | `proposed` <!-- proposed → trialed → adopted → deprecated --> |
|
|
12
|
-
| **As-of date** | YYYY-MM-DD |
|
|
13
|
-
| **Expiry trigger** | First successor release to any listed model, or YYYY-MM-DD (+6 months), whichever comes first |
|
|
14
|
-
| **Sign-off** | <name, role, date> |
|
|
15
|
-
|
|
16
|
-
<One- or two-sentence summary of the agent topology: who does what, in what order.>
|
|
17
|
-
|
|
18
|
-
## 1. When to use / when not to use
|
|
19
|
-
|
|
20
|
-
**Use when:**
|
|
21
|
-
- <concrete task shape>
|
|
22
|
-
|
|
23
|
-
**Do not use when:**
|
|
24
|
-
- <concrete task shape — every pattern has a floor below which its overhead dominates>
|
|
25
|
-
|
|
26
|
-
## 2. Agent roles & boundaries
|
|
27
|
-
|
|
28
|
-
| Agent | Does | Never does |
|
|
29
|
-
|---|---|---|
|
|
30
|
-
| **<Role>** | <responsibility> | <hard boundary> |
|
|
31
|
-
|
|
32
|
-
<Who judges whom; which contexts must stay isolated; which boundaries are hard requirements vs tunable.
|
|
33
|
-
State which agent owns unit / integration / E2E tests — agents own all three levels (repo testing policy);
|
|
34
|
-
the human only smoke-tests at PRD completion.>
|
|
35
|
-
|
|
36
|
-
## 3. Model + effort assignment (as of YYYY-MM-DD)
|
|
37
|
-
|
|
38
|
-
| Role | Model | Effort | Reasoning | Source labels |
|
|
39
|
-
|---|---|---|---|---|
|
|
40
|
-
| <Role> | <exact model name> | <effort level> | <why this model/effort for this role> | <`[official]` / `[vendor-benchmark]` / `[third-party]` / `[internal]` / `[unverified]` / `[team-policy]` + link or "link not captured — attach at first re-verification"> |
|
|
41
|
-
|
|
42
|
-
## 4. Known failure modes / pitfalls
|
|
43
|
-
|
|
44
|
-
| Pitfall | Context | Mitigation | Recorded |
|
|
45
|
-
|---|---|---|---|
|
|
46
|
-
| <symptom> | <the specific harness/project/conditions it was observed in — or "design constraint (not a measured incident)"> | <mitigation> | YYYY-MM-DD |
|
|
47
|
-
| Harness-specific failures for these exact model+effort combinations | **None recorded yet** (as of YYYY-MM-DD) | Record here with harness name, conditions, and date when observed | — |
|
|
48
|
-
|
|
49
|
-
## 5. Upstream / downstream integration
|
|
50
|
-
|
|
51
|
-
**Upstream (work intake):** <how work enters — master PRD → sub-PRD → ticket; which docs each agent reads; where ADRs come in.>
|
|
52
|
-
|
|
53
|
-
**Downstream (deliverables):** <what leaves — PR, verdict, docs; what gates a merge.>
|
|
54
|
-
|
|
55
|
-
**Human gates:** <where humans decide (e.g. the start signal), where they must NOT be needed, and the exception path that pulls a human back in.>
|
|
56
|
-
|
|
57
|
-
## 6. Scaffold
|
|
58
|
-
|
|
59
|
-
<List of files under scaffold/ and what each is for. Point to scaffold/INSTALL.md for install steps. Note the date the scaffold's config keys were last verified against Claude Code docs.>
|
|
60
|
-
|
|
61
|
-
## 7. Provenance & change log
|
|
62
|
-
|
|
63
|
-
| Date | Change | Basis | Author |
|
|
64
|
-
|---|---|---|---|
|
|
65
|
-
| YYYY-MM-DD | Initial entry | <source record / doc links> | <who> |
|
|
1
|
+
# Pattern: <Human-Readable Pattern Name>
|
|
2
|
+
|
|
3
|
+
<!-- Copy this file to patterns/<kebab-name>/README.md and fill EVERY section.
|
|
4
|
+
Format reference: patterns/three-agent-architect-builder-reviewer/README.md
|
|
5
|
+
Rules: CLAUDE.md "Grounding rules" — every model/effort claim carries a source label;
|
|
6
|
+
no training-data impressions; as-of date moves with every recommendation change. -->
|
|
7
|
+
|
|
8
|
+
| Field | Value |
|
|
9
|
+
|---|---|
|
|
10
|
+
| **Pattern name** | `<kebab-name>` (= directory name) |
|
|
11
|
+
| **Status** | `proposed` <!-- proposed → trialed → adopted → deprecated --> |
|
|
12
|
+
| **As-of date** | YYYY-MM-DD |
|
|
13
|
+
| **Expiry trigger** | First successor release to any listed model, or YYYY-MM-DD (+6 months), whichever comes first |
|
|
14
|
+
| **Sign-off** | <name, role, date> |
|
|
15
|
+
|
|
16
|
+
<One- or two-sentence summary of the agent topology: who does what, in what order.>
|
|
17
|
+
|
|
18
|
+
## 1. When to use / when not to use
|
|
19
|
+
|
|
20
|
+
**Use when:**
|
|
21
|
+
- <concrete task shape>
|
|
22
|
+
|
|
23
|
+
**Do not use when:**
|
|
24
|
+
- <concrete task shape — every pattern has a floor below which its overhead dominates>
|
|
25
|
+
|
|
26
|
+
## 2. Agent roles & boundaries
|
|
27
|
+
|
|
28
|
+
| Agent | Does | Never does |
|
|
29
|
+
|---|---|---|
|
|
30
|
+
| **<Role>** | <responsibility> | <hard boundary> |
|
|
31
|
+
|
|
32
|
+
<Who judges whom; which contexts must stay isolated; which boundaries are hard requirements vs tunable.
|
|
33
|
+
State which agent owns unit / integration / E2E tests — agents own all three levels (repo testing policy);
|
|
34
|
+
the human only smoke-tests at PRD completion.>
|
|
35
|
+
|
|
36
|
+
## 3. Model + effort assignment (as of YYYY-MM-DD)
|
|
37
|
+
|
|
38
|
+
| Role | Model | Effort | Reasoning | Source labels |
|
|
39
|
+
|---|---|---|---|---|
|
|
40
|
+
| <Role> | <exact model name> | <effort level> | <why this model/effort for this role> | <`[official]` / `[vendor-benchmark]` / `[third-party]` / `[internal]` / `[unverified]` / `[team-policy]` + link or "link not captured — attach at first re-verification"> |
|
|
41
|
+
|
|
42
|
+
## 4. Known failure modes / pitfalls
|
|
43
|
+
|
|
44
|
+
| Pitfall | Context | Mitigation | Recorded |
|
|
45
|
+
|---|---|---|---|
|
|
46
|
+
| <symptom> | <the specific harness/project/conditions it was observed in — or "design constraint (not a measured incident)"> | <mitigation> | YYYY-MM-DD |
|
|
47
|
+
| Harness-specific failures for these exact model+effort combinations | **None recorded yet** (as of YYYY-MM-DD) | Record here with harness name, conditions, and date when observed | — |
|
|
48
|
+
|
|
49
|
+
## 5. Upstream / downstream integration
|
|
50
|
+
|
|
51
|
+
**Upstream (work intake):** <how work enters — master PRD → sub-PRD → ticket; which docs each agent reads; where ADRs come in.>
|
|
52
|
+
|
|
53
|
+
**Downstream (deliverables):** <what leaves — PR, verdict, docs; what gates a merge.>
|
|
54
|
+
|
|
55
|
+
**Human gates:** <where humans decide (e.g. the start signal), where they must NOT be needed, and the exception path that pulls a human back in.>
|
|
56
|
+
|
|
57
|
+
## 6. Scaffold
|
|
58
|
+
|
|
59
|
+
<List of files under scaffold/ and what each is for. Point to scaffold/INSTALL.md for install steps. Note the date the scaffold's config keys were last verified against Claude Code docs.>
|
|
60
|
+
|
|
61
|
+
## 7. Provenance & change log
|
|
62
|
+
|
|
63
|
+
| Date | Change | Basis | Author |
|
|
64
|
+
|---|---|---|---|
|
|
65
|
+
| YYYY-MM-DD | Initial entry | <source record / doc links> | <who> |
|
|
@@ -1,104 +1,104 @@
|
|
|
1
|
-
<!-- Universal ticket template — all patterns, plus the catalog repo itself.
|
|
2
|
-
Format distilled 2026-07-17 from the team's field-proven tickets: fx-eye-tracking
|
|
3
|
-
discipline, realtime-pilot PIL-15, MeritAI FND-9.
|
|
4
|
-
Copy to docs/prd/<NN-module>/tickets/<ID>-<slug>.md and fill every section.
|
|
5
|
-
Cold-start rule: a ticket is DEFECTIVE if executing it requires the planning
|
|
6
|
-
conversation. Inline the needed facts AND link their authoritative source.
|
|
7
|
-
The body below the frontmatter becomes the tracker issue body verbatim
|
|
8
|
-
(.claude/scripts/publish-tickets.mjs); the file stays the content source of truth. -->
|
|
9
|
-
---
|
|
10
|
-
id: MOD-NN # unique + stable; becomes the issue-title prefix "[MOD-NN]" (the dedupe key)
|
|
11
|
-
title: Short imperative title
|
|
12
|
-
module: NN-module # = parent directory name under docs/prd/
|
|
13
|
-
lane: NN-module # parallel lane; lanes may run concurrently ONLY with disjoint file-scopes
|
|
14
|
-
size: S # S | M | L
|
|
15
|
-
agent: builder # primary executing stage; justify in the "Why" line below
|
|
16
|
-
status: draft # draft -> ready -> done
|
|
17
|
-
date: YYYY-MM-DD
|
|
18
|
-
blocked_by: [] # ticket ids this one cannot start before (machine-readable dependency DAG)
|
|
19
|
-
blocks: [] # ticket ids waiting on this one
|
|
20
|
-
---
|
|
21
|
-
|
|
22
|
-
# MOD-NN — Short imperative title
|
|
23
|
-
|
|
24
|
-
Implements <PRD §X FR-Y> per <ADR-NNNN (status, owner, date, via PR #N)> — or: "No ADR —
|
|
25
|
-
the decision is already made in <ref>; this is build ticket <n of m> against it."
|
|
26
|
-
Parent sub-PRD: [NN-module README](../README.md). Master spec: [PRD](../../../PRD.md).
|
|
27
|
-
Depends on: [MOD-NM — other ticket](MOD-NM-other-ticket.md) <!-- mirrors blocked_by; delete if none -->
|
|
28
|
-
**Why `builder`:** <one line — the basis for the agent assignment, e.g. "a narrowly-scoped
|
|
29
|
-
addition to an existing module, not a new subsystem">.
|
|
30
|
-
|
|
31
|
-
## Background + basis
|
|
32
|
-
|
|
33
|
-
<!-- Why this ticket exists. CITE every claim: PRD §, ADR section, stable decision ID, or a
|
|
34
|
-
merged PR — a conclusion may not appear from nowhere. QUOTE the load-bearing sentences
|
|
35
|
-
of the ADR/spec so the Builder does not re-derive intent.
|
|
36
|
-
Carry known caveats forward EXPLICITLY ("accepted for the pilot: X — documented, not
|
|
37
|
-
enforced, per PRD §Y") instead of re-litigating or silently dropping them. -->
|
|
38
|
-
|
|
39
|
-
## Goal
|
|
40
|
-
|
|
41
|
-
<!-- One paragraph: the artifact(s)/behavior to produce and where they land — stated so
|
|
42
|
-
completion is mechanically checkable. -->
|
|
43
|
-
|
|
44
|
-
## Non-goals
|
|
45
|
-
|
|
46
|
-
<!-- Bullet list. EACH exclusion names its owner or standing reason, so nobody guesses:
|
|
47
|
-
- No schema files — those are MOD-02.
|
|
48
|
-
- No init authentication — stays documented-not-enforced per PRD §9.4. Do not add it
|
|
49
|
-
as a side effect of this ticket. -->
|
|
50
|
-
|
|
51
|
-
## File-scope (write-owns)
|
|
52
|
-
|
|
53
|
-
<!-- Exact paths/globs this ticket may write, PLUS the explicit does-not-touch list.
|
|
54
|
-
State the serial-safety analysis: which tickets last touched these files, whether that
|
|
55
|
-
work is merged, and that no in-flight ticket contends for them. Must not overlap any
|
|
56
|
-
other in-flight ticket — disjoint file-scopes are what make parallel lanes safe.
|
|
57
|
-
Internal organization inside the scope is the Builder's choice. -->
|
|
58
|
-
|
|
59
|
-
- <paths this ticket owns>
|
|
60
|
-
- Does not touch: <paths owned elsewhere — name the owning ticket/module>
|
|
61
|
-
|
|
62
|
-
## Deliverables
|
|
63
|
-
|
|
64
|
-
<!-- Numbered, code-level precision: exact functions/exports, call sites, ordering
|
|
65
|
-
constraints ("directly after X and before Y"), naming conventions, and the behavioral
|
|
66
|
-
guarantee ("either fully visible or fully absent"). Fix the boundary AND the
|
|
67
|
-
load-bearing mechanics; leave internals free. -->
|
|
68
|
-
|
|
69
|
-
1. <deliverable>
|
|
70
|
-
|
|
71
|
-
## Acceptance checklist (classified)
|
|
72
|
-
|
|
73
|
-
<!-- Every criterion is a checkbox with exactly one class tag. The tag VOCABULARY is
|
|
74
|
-
project-defined in the target repo's CLAUDE.md — defaults: [machine] runnable
|
|
75
|
-
code/logic check · [fixture] replay of recorded data · [human] irreducibly human
|
|
76
|
-
judgment. Field vocabularies in use: [offline]/[live-model] (realtime pilot),
|
|
77
|
-
[machine]/[fixture]/[hardware-human] (fx-eye-tracking).
|
|
78
|
-
Rules: cover the pyramid where applicable — unit / integration / E2E; agents own all
|
|
79
|
-
three levels, the human only smoke-tests at PRD completion. Include the standing
|
|
80
|
-
suite-green item. If the ticket must conclude an open question, make the WRITEBACK
|
|
81
|
-
itself an acceptance item. Mark optional orchestrator-owned live checks "not required
|
|
82
|
-
to merge". Declare absent classes explicitly ("No [human] criteria — pure logic"). -->
|
|
83
|
-
|
|
84
|
-
- [ ] `[machine]` <criterion> (<cross-ref to AC/decision id>)
|
|
85
|
-
- [ ] `[machine]` <project test-suite command> green
|
|
86
|
-
|
|
87
|
-
## Test plan
|
|
88
|
-
|
|
89
|
-
<!-- The exact steps the Reviewer runs. NAME the harness/mocks/fixtures and the existing
|
|
90
|
-
test file whose construction pattern to copy. Say what is asserted, on what. Every
|
|
91
|
-
[machine]/[fixture] row must be reproducible offline. -->
|
|
92
|
-
|
|
93
|
-
## Feedback obligation
|
|
94
|
-
|
|
95
|
-
<!-- The writeback protocol, made concrete — three layers:
|
|
96
|
-
1. General rule: if implementation falsifies this spec, update this ticket / the
|
|
97
|
-
sub-PRD / the ADR first (version +0.1, changelog line), then change code. Silent
|
|
98
|
-
divergence = incomplete.
|
|
99
|
-
2. ENUMERATE the foreseeable frictions, each with its exact writeback target and path:
|
|
100
|
-
"if X cannot be expressed as Y → update docs/design-Z.md and ADR-NNNN's
|
|
101
|
-
consequences section FIRST, before touching src/W — a bigger surface than this
|
|
102
|
-
ticket's goal must not change silently."
|
|
103
|
-
3. If a decided protocol is outright falsified: that overturns a team decision —
|
|
104
|
-
escalate for re-review; never swap the approach silently inside the ticket. -->
|
|
1
|
+
<!-- Universal ticket template — all patterns, plus the catalog repo itself.
|
|
2
|
+
Format distilled 2026-07-17 from the team's field-proven tickets: fx-eye-tracking
|
|
3
|
+
discipline, realtime-pilot PIL-15, MeritAI FND-9.
|
|
4
|
+
Copy to docs/prd/<NN-module>/tickets/<ID>-<slug>.md and fill every section.
|
|
5
|
+
Cold-start rule: a ticket is DEFECTIVE if executing it requires the planning
|
|
6
|
+
conversation. Inline the needed facts AND link their authoritative source.
|
|
7
|
+
The body below the frontmatter becomes the tracker issue body verbatim
|
|
8
|
+
(.claude/scripts/publish-tickets.mjs); the file stays the content source of truth. -->
|
|
9
|
+
---
|
|
10
|
+
id: MOD-NN # unique + stable; becomes the issue-title prefix "[MOD-NN]" (the dedupe key)
|
|
11
|
+
title: Short imperative title
|
|
12
|
+
module: NN-module # = parent directory name under docs/prd/
|
|
13
|
+
lane: NN-module # parallel lane; lanes may run concurrently ONLY with disjoint file-scopes
|
|
14
|
+
size: S # S | M | L
|
|
15
|
+
agent: builder # primary executing stage; justify in the "Why" line below
|
|
16
|
+
status: draft # draft -> ready -> done
|
|
17
|
+
date: YYYY-MM-DD
|
|
18
|
+
blocked_by: [] # ticket ids this one cannot start before (machine-readable dependency DAG)
|
|
19
|
+
blocks: [] # ticket ids waiting on this one
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# MOD-NN — Short imperative title
|
|
23
|
+
|
|
24
|
+
Implements <PRD §X FR-Y> per <ADR-NNNN (status, owner, date, via PR #N)> — or: "No ADR —
|
|
25
|
+
the decision is already made in <ref>; this is build ticket <n of m> against it."
|
|
26
|
+
Parent sub-PRD: [NN-module README](../README.md). Master spec: [PRD](../../../PRD.md).
|
|
27
|
+
Depends on: [MOD-NM — other ticket](MOD-NM-other-ticket.md) <!-- mirrors blocked_by; delete if none -->
|
|
28
|
+
**Why `builder`:** <one line — the basis for the agent assignment, e.g. "a narrowly-scoped
|
|
29
|
+
addition to an existing module, not a new subsystem">.
|
|
30
|
+
|
|
31
|
+
## Background + basis
|
|
32
|
+
|
|
33
|
+
<!-- Why this ticket exists. CITE every claim: PRD §, ADR section, stable decision ID, or a
|
|
34
|
+
merged PR — a conclusion may not appear from nowhere. QUOTE the load-bearing sentences
|
|
35
|
+
of the ADR/spec so the Builder does not re-derive intent.
|
|
36
|
+
Carry known caveats forward EXPLICITLY ("accepted for the pilot: X — documented, not
|
|
37
|
+
enforced, per PRD §Y") instead of re-litigating or silently dropping them. -->
|
|
38
|
+
|
|
39
|
+
## Goal
|
|
40
|
+
|
|
41
|
+
<!-- One paragraph: the artifact(s)/behavior to produce and where they land — stated so
|
|
42
|
+
completion is mechanically checkable. -->
|
|
43
|
+
|
|
44
|
+
## Non-goals
|
|
45
|
+
|
|
46
|
+
<!-- Bullet list. EACH exclusion names its owner or standing reason, so nobody guesses:
|
|
47
|
+
- No schema files — those are MOD-02.
|
|
48
|
+
- No init authentication — stays documented-not-enforced per PRD §9.4. Do not add it
|
|
49
|
+
as a side effect of this ticket. -->
|
|
50
|
+
|
|
51
|
+
## File-scope (write-owns)
|
|
52
|
+
|
|
53
|
+
<!-- Exact paths/globs this ticket may write, PLUS the explicit does-not-touch list.
|
|
54
|
+
State the serial-safety analysis: which tickets last touched these files, whether that
|
|
55
|
+
work is merged, and that no in-flight ticket contends for them. Must not overlap any
|
|
56
|
+
other in-flight ticket — disjoint file-scopes are what make parallel lanes safe.
|
|
57
|
+
Internal organization inside the scope is the Builder's choice. -->
|
|
58
|
+
|
|
59
|
+
- <paths this ticket owns>
|
|
60
|
+
- Does not touch: <paths owned elsewhere — name the owning ticket/module>
|
|
61
|
+
|
|
62
|
+
## Deliverables
|
|
63
|
+
|
|
64
|
+
<!-- Numbered, code-level precision: exact functions/exports, call sites, ordering
|
|
65
|
+
constraints ("directly after X and before Y"), naming conventions, and the behavioral
|
|
66
|
+
guarantee ("either fully visible or fully absent"). Fix the boundary AND the
|
|
67
|
+
load-bearing mechanics; leave internals free. -->
|
|
68
|
+
|
|
69
|
+
1. <deliverable>
|
|
70
|
+
|
|
71
|
+
## Acceptance checklist (classified)
|
|
72
|
+
|
|
73
|
+
<!-- Every criterion is a checkbox with exactly one class tag. The tag VOCABULARY is
|
|
74
|
+
project-defined in the target repo's CLAUDE.md — defaults: [machine] runnable
|
|
75
|
+
code/logic check · [fixture] replay of recorded data · [human] irreducibly human
|
|
76
|
+
judgment. Field vocabularies in use: [offline]/[live-model] (realtime pilot),
|
|
77
|
+
[machine]/[fixture]/[hardware-human] (fx-eye-tracking).
|
|
78
|
+
Rules: cover the pyramid where applicable — unit / integration / E2E; agents own all
|
|
79
|
+
three levels, the human only smoke-tests at PRD completion. Include the standing
|
|
80
|
+
suite-green item. If the ticket must conclude an open question, make the WRITEBACK
|
|
81
|
+
itself an acceptance item. Mark optional orchestrator-owned live checks "not required
|
|
82
|
+
to merge". Declare absent classes explicitly ("No [human] criteria — pure logic"). -->
|
|
83
|
+
|
|
84
|
+
- [ ] `[machine]` <criterion> (<cross-ref to AC/decision id>)
|
|
85
|
+
- [ ] `[machine]` <project test-suite command> green
|
|
86
|
+
|
|
87
|
+
## Test plan
|
|
88
|
+
|
|
89
|
+
<!-- The exact steps the Reviewer runs. NAME the harness/mocks/fixtures and the existing
|
|
90
|
+
test file whose construction pattern to copy. Say what is asserted, on what. Every
|
|
91
|
+
[machine]/[fixture] row must be reproducible offline. -->
|
|
92
|
+
|
|
93
|
+
## Feedback obligation
|
|
94
|
+
|
|
95
|
+
<!-- The writeback protocol, made concrete — three layers:
|
|
96
|
+
1. General rule: if implementation falsifies this spec, update this ticket / the
|
|
97
|
+
sub-PRD / the ADR first (version +0.1, changelog line), then change code. Silent
|
|
98
|
+
divergence = incomplete.
|
|
99
|
+
2. ENUMERATE the foreseeable frictions, each with its exact writeback target and path:
|
|
100
|
+
"if X cannot be expressed as Y → update docs/design-Z.md and ADR-NNNN's
|
|
101
|
+
consequences section FIRST, before touching src/W — a bigger surface than this
|
|
102
|
+
ticket's goal must not change silently."
|
|
103
|
+
3. If a decided protocol is outright falsified: that overturns a team decision —
|
|
104
|
+
escalate for re-review; never swap the approach silently inside the ticket. -->
|
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Bug report
|
|
3
|
-
about: Report a defect. Nightly triage reads this — the more mechanical the reproduction, the likelier an overnight fix.
|
|
4
|
-
title: ''
|
|
5
|
-
labels: ''
|
|
6
|
-
assignees: ''
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## Symptom
|
|
10
|
-
|
|
11
|
-
<!-- What happens. Paste the exact error output / wrong value. -->
|
|
12
|
-
|
|
13
|
-
## Reproduction
|
|
14
|
-
|
|
15
|
-
<!-- Exact steps or commands; the smallest input that triggers it. -->
|
|
16
|
-
|
|
17
|
-
## Expected
|
|
18
|
-
|
|
19
|
-
<!-- What should happen instead, stated checkably. Cite the spec (PRD §/ADR) if you know it. -->
|
|
20
|
-
|
|
21
|
-
## Affected area (best guess)
|
|
22
|
-
|
|
23
|
-
<!-- Files/modules if you know them; leave empty if unsure — triage will trace it. -->
|
|
24
|
-
|
|
25
|
-
## Acceptance
|
|
26
|
-
|
|
27
|
-
<!-- What proves it fixed. Ideally a runnable check, e.g. "npm test stays green and f(x) returns y".
|
|
28
|
-
The pipeline turns this into the ticket's classified acceptance checklist. -->
|
|
1
|
+
---
|
|
2
|
+
name: Bug report
|
|
3
|
+
about: Report a defect. Nightly triage reads this — the more mechanical the reproduction, the likelier an overnight fix.
|
|
4
|
+
title: ''
|
|
5
|
+
labels: ''
|
|
6
|
+
assignees: ''
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Symptom
|
|
10
|
+
|
|
11
|
+
<!-- What happens. Paste the exact error output / wrong value. -->
|
|
12
|
+
|
|
13
|
+
## Reproduction
|
|
14
|
+
|
|
15
|
+
<!-- Exact steps or commands; the smallest input that triggers it. -->
|
|
16
|
+
|
|
17
|
+
## Expected
|
|
18
|
+
|
|
19
|
+
<!-- What should happen instead, stated checkably. Cite the spec (PRD §/ADR) if you know it. -->
|
|
20
|
+
|
|
21
|
+
## Affected area (best guess)
|
|
22
|
+
|
|
23
|
+
<!-- Files/modules if you know them; leave empty if unsure — triage will trace it. -->
|
|
24
|
+
|
|
25
|
+
## Acceptance
|
|
26
|
+
|
|
27
|
+
<!-- What proves it fixed. Ideally a runnable check, e.g. "npm test stays green and f(x) returns y".
|
|
28
|
+
The pipeline turns this into the ticket's classified acceptance checklist. -->
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Decision record
|
|
3
|
-
about: Records what was done and why — the durable memory that commits cannot carry. Used by agents and humans alike.
|
|
4
|
-
title: 'Decision record: '
|
|
5
|
-
labels: decision-record
|
|
6
|
-
assignees: ''
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
**What** (merged in <commit/PR/MR>, YYYY-MM-DD): <one paragraph — the change as shipped.>
|
|
10
|
-
|
|
11
|
-
**Key decisions & why**
|
|
12
|
-
|
|
13
|
-
<!-- One bullet per decision: the decision, its reason, and the rejected alternative when
|
|
14
|
-
one was seriously considered. Cite sources — official docs, ADRs, maintainer direction
|
|
15
|
-
with date — the same grounding discipline as everything else. -->
|
|
16
|
-
|
|
17
|
-
-
|
|
18
|
-
|
|
19
|
-
**Evidence**
|
|
20
|
-
|
|
21
|
-
<!-- Test results, verification records, links to the docs where each decision landed. -->
|
|
22
|
-
|
|
23
|
-
**Links**
|
|
24
|
-
|
|
25
|
-
<!-- Related issues / PRs / ADRs / tickets. -->
|
|
1
|
+
---
|
|
2
|
+
name: Decision record
|
|
3
|
+
about: Records what was done and why — the durable memory that commits cannot carry. Used by agents and humans alike.
|
|
4
|
+
title: 'Decision record: '
|
|
5
|
+
labels: decision-record
|
|
6
|
+
assignees: ''
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
**What** (merged in <commit/PR/MR>, YYYY-MM-DD): <one paragraph — the change as shipped.>
|
|
10
|
+
|
|
11
|
+
**Key decisions & why**
|
|
12
|
+
|
|
13
|
+
<!-- One bullet per decision: the decision, its reason, and the rejected alternative when
|
|
14
|
+
one was seriously considered. Cite sources — official docs, ADRs, maintainer direction
|
|
15
|
+
with date — the same grounding discipline as everything else. -->
|
|
16
|
+
|
|
17
|
+
-
|
|
18
|
+
|
|
19
|
+
**Evidence**
|
|
20
|
+
|
|
21
|
+
<!-- Test results, verification records, links to the docs where each decision landed. -->
|
|
22
|
+
|
|
23
|
+
**Links**
|
|
24
|
+
|
|
25
|
+
<!-- Related issues / PRs / ADRs / tickets. -->
|
|
@@ -1,36 +1,36 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Task
|
|
3
|
-
about: Request a bounded piece of work. Mirrors the pipeline's ticket format so triage can convert it mechanically.
|
|
4
|
-
title: ''
|
|
5
|
-
labels: ''
|
|
6
|
-
assignees: ''
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## Traceability
|
|
10
|
-
|
|
11
|
-
<!-- What this implements or follows from: PRD §/FR, an ADR, a discussion, an upstream
|
|
12
|
-
pattern — with links. If the decision is already made somewhere, say where. -->
|
|
13
|
-
|
|
14
|
-
## Background + basis
|
|
15
|
-
|
|
16
|
-
<!-- Why this is needed. Cite claims; quote the load-bearing sentences rather than
|
|
17
|
-
paraphrasing from memory. -->
|
|
18
|
-
|
|
19
|
-
## Goal
|
|
20
|
-
|
|
21
|
-
<!-- One paragraph: the artifact(s) to produce and where they land — checkable. -->
|
|
22
|
-
|
|
23
|
-
## Non-goals
|
|
24
|
-
|
|
25
|
-
<!-- Each exclusion names its owner or standing reason: "No X — that is MOD-02" /
|
|
26
|
-
"No Y — stays out of scope per PRD §Z; do not add it as a side effect." -->
|
|
27
|
-
|
|
28
|
-
## Affected area (best guess)
|
|
29
|
-
|
|
30
|
-
<!-- Files/modules if known; the Architect finalizes the file-scope and the
|
|
31
|
-
does-not-touch list. -->
|
|
32
|
-
|
|
33
|
-
## Acceptance
|
|
34
|
-
|
|
35
|
-
<!-- Checkable criteria, one per line, tagged with the repo's class vocabulary if you can
|
|
36
|
-
(defaults: [machine]/[fixture]/[human]). Prefer runnable checks ("command X exits 0"). -->
|
|
1
|
+
---
|
|
2
|
+
name: Task
|
|
3
|
+
about: Request a bounded piece of work. Mirrors the pipeline's ticket format so triage can convert it mechanically.
|
|
4
|
+
title: ''
|
|
5
|
+
labels: ''
|
|
6
|
+
assignees: ''
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Traceability
|
|
10
|
+
|
|
11
|
+
<!-- What this implements or follows from: PRD §/FR, an ADR, a discussion, an upstream
|
|
12
|
+
pattern — with links. If the decision is already made somewhere, say where. -->
|
|
13
|
+
|
|
14
|
+
## Background + basis
|
|
15
|
+
|
|
16
|
+
<!-- Why this is needed. Cite claims; quote the load-bearing sentences rather than
|
|
17
|
+
paraphrasing from memory. -->
|
|
18
|
+
|
|
19
|
+
## Goal
|
|
20
|
+
|
|
21
|
+
<!-- One paragraph: the artifact(s) to produce and where they land — checkable. -->
|
|
22
|
+
|
|
23
|
+
## Non-goals
|
|
24
|
+
|
|
25
|
+
<!-- Each exclusion names its owner or standing reason: "No X — that is MOD-02" /
|
|
26
|
+
"No Y — stays out of scope per PRD §Z; do not add it as a side effect." -->
|
|
27
|
+
|
|
28
|
+
## Affected area (best guess)
|
|
29
|
+
|
|
30
|
+
<!-- Files/modules if known; the Architect finalizes the file-scope and the
|
|
31
|
+
does-not-touch list. -->
|
|
32
|
+
|
|
33
|
+
## Acceptance
|
|
34
|
+
|
|
35
|
+
<!-- Checkable criteria, one per line, tagged with the repo's class vocabulary if you can
|
|
36
|
+
(defaults: [machine]/[fixture]/[human]). Prefer runnable checks ("command X exits 0"). -->
|