@awebai/oats 0.30.0 → 0.30.1

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.
Files changed (118) hide show
  1. package/docs/desktop-cli-api.md +3 -3
  2. package/docs/implementation.md +2 -1
  3. package/docs/integrations.md +1 -1
  4. package/docs/knowledge.md +4 -4
  5. package/docs/official-catalog.md +3 -3
  6. package/docs/packages.md +8 -8
  7. package/docs/plans/0.30-close-out.md +24 -2
  8. package/docs/release-lane.md +7 -2
  9. package/docs/release-notes/v0.30.1.md +123 -0
  10. package/docs/souls-and-instances.md +2 -2
  11. package/docs/workspaces.md +6 -1
  12. package/lib/packages.mjs +1 -1
  13. package/lib/resolve.mjs +1 -1
  14. package/package-catalog.json +2 -2
  15. package/package.json +1 -3
  16. package/skills/oats-getting-started/SKILL.md +1 -1
  17. package/capabilities/oats-authoring/LICENSE +0 -21
  18. package/capabilities/oats-authoring/oats-package.json +0 -11
  19. package/capabilities/oats-authoring/oats.json +0 -12
  20. package/capabilities/oats-authoring/skills/integration-authoring/SKILL.md +0 -84
  21. package/capabilities/oats-authoring/skills/skill-craft/SKILL.md +0 -109
  22. package/capabilities/oats-authoring/skills/soul-craft/SKILL.md +0 -116
  23. package/capabilities/oats-aweb/bin/oats-aweb-binding.mjs +0 -11
  24. package/capabilities/oats-aweb/bin/oats-aweb.mjs +0 -1672
  25. package/capabilities/oats-aweb/injects/aweb.md +0 -47
  26. package/capabilities/oats-aweb/lib/binding-wire.mjs +0 -365
  27. package/capabilities/oats-aweb/lib/captured-execution.mjs +0 -91
  28. package/capabilities/oats-aweb/lib/captured-native.mjs +0 -91
  29. package/capabilities/oats-aweb/lib/grant-custody.mjs +0 -38
  30. package/capabilities/oats-aweb/lib/invocation-shape.mjs +0 -135
  31. package/capabilities/oats-aweb/lib/portable-binding.mjs +0 -146
  32. package/capabilities/oats-aweb/lib/session-readiness.mjs +0 -56
  33. package/capabilities/oats-aweb/lib/wake-receive.mjs +0 -56
  34. package/capabilities/oats-aweb/oats.json +0 -201
  35. package/capabilities/oats-aweb/skills/LICENSE +0 -21
  36. package/capabilities/oats-aweb/skills/VENDORED.md +0 -31
  37. package/capabilities/oats-aweb/skills/aweb-identity/SKILL.md +0 -201
  38. package/capabilities/oats-aweb/skills/aweb-messaging/SKILL.md +0 -161
  39. package/capabilities/oats-aweb/skills/aweb-messaging/references/messaging-scenarios.md +0 -61
  40. package/capabilities/oats-aweb/skills/aweb-team-membership/SKILL.md +0 -116
  41. package/capabilities/oats-aweb/skills/aweb-team-membership/references/team-membership-reference.md +0 -74
  42. package/capabilities/oats-aweb/skills/oats-aweb/SKILL.md +0 -286
  43. package/capabilities/oats-code-review/injects/reviewer.md +0 -26
  44. package/capabilities/oats-code-review/oats.json +0 -16
  45. package/capabilities/oats-code-review/skills/adversarial-review/SKILL.md +0 -66
  46. package/capabilities/oats-code-review/skills/review-dev-docs/SKILL.md +0 -30
  47. package/capabilities/oats-code-review/skills/security-review/SKILL.md +0 -56
  48. package/capabilities/oats-code-review/skills/simplification-review/SKILL.md +0 -34
  49. package/capabilities/oats-developer/injects/developer.md +0 -38
  50. package/capabilities/oats-developer/oats.json +0 -17
  51. package/capabilities/oats-developer/skills/execution-strategy/SKILL.md +0 -43
  52. package/capabilities/oats-developer/skills/maintain-dev-docs/SKILL.md +0 -47
  53. package/capabilities/oats-developer/skills/run-the-review-loop/SKILL.md +0 -65
  54. package/capabilities/oats-developer/skills/understand-the-spec/SKILL.md +0 -37
  55. package/capabilities/oats-developer/skills/worktrees/SKILL.md +0 -36
  56. package/capabilities/oats-engineering-expert/injects/expert.md +0 -37
  57. package/capabilities/oats-engineering-expert/oats.json +0 -17
  58. package/capabilities/oats-engineering-expert/skills/coordinate-developers/SKILL.md +0 -37
  59. package/capabilities/oats-engineering-expert/skills/coordinate-experts/SKILL.md +0 -52
  60. package/capabilities/oats-engineering-expert/skills/land-your-prs/SKILL.md +0 -50
  61. package/capabilities/oats-engineering-expert/skills/plan-and-spec/SKILL.md +0 -53
  62. package/capabilities/oats-engineering-expert/skills/verify-developer-work/SKILL.md +0 -49
  63. package/capabilities/oats-jira/bin/oats-jira.mjs +0 -40
  64. package/capabilities/oats-jira/injects/jira.md +0 -10
  65. package/capabilities/oats-jira/oats.json +0 -22
  66. package/capabilities/oats-jira/skills/jira-tasks/SKILL.md +0 -179
  67. package/capabilities/oats-linear/bin/oats-linear-hook.mjs +0 -34
  68. package/capabilities/oats-linear/bin/oats-linear.mjs +0 -344
  69. package/capabilities/oats-linear/injects/linear.md +0 -8
  70. package/capabilities/oats-linear/oats.json +0 -24
  71. package/capabilities/oats-linear/skills/linear-tasks/SKILL.md +0 -223
  72. package/capabilities/oats-okf/bin/oats-okf-binding.mjs +0 -14
  73. package/capabilities/oats-okf/bin/oats-okf.mjs +0 -213
  74. package/capabilities/oats-okf/injects/okf.md +0 -42
  75. package/capabilities/oats-okf/lib/binding-wire.mjs +0 -380
  76. package/capabilities/oats-okf/lib/captured-worker.mjs +0 -109
  77. package/capabilities/oats-okf/lib/config.mjs +0 -124
  78. package/capabilities/oats-okf/lib/consult.mjs +0 -518
  79. package/capabilities/oats-okf/lib/harvest-status.mjs +0 -88
  80. package/capabilities/oats-okf/lib/harvest-switch.mjs +0 -94
  81. package/capabilities/oats-okf/lib/inspection.mjs +0 -138
  82. package/capabilities/oats-okf/lib/invocation-context.mjs +0 -111
  83. package/capabilities/oats-okf/lib/invocation-shape.mjs +0 -135
  84. package/capabilities/oats-okf/lib/io.mjs +0 -118
  85. package/capabilities/oats-okf/lib/migration.mjs +0 -137
  86. package/capabilities/oats-okf/lib/okf-validate.mjs +0 -123
  87. package/capabilities/oats-okf/lib/portable-binding.mjs +0 -199
  88. package/capabilities/oats-okf/lib/source-contract.mjs +0 -46
  89. package/capabilities/oats-okf/lib/sources.mjs +0 -438
  90. package/capabilities/oats-okf/lib/stores.mjs +0 -473
  91. package/capabilities/oats-okf/lib/worker.mjs +0 -486
  92. package/capabilities/oats-okf/oats.json +0 -151
  93. package/capabilities/oats-okf/schemas/okf-base.schema.json +0 -46
  94. package/capabilities/oats-okf/schemas/okf-bindings.schema.json +0 -112
  95. package/capabilities/oats-okf/schemas/okf-portable-declaration.schema.json +0 -87
  96. package/capabilities/oats-okf/schemas/okf-portable-payload.schema.json +0 -113
  97. package/capabilities/oats-okf/schemas/okf-soul.schema.json +0 -37
  98. package/capabilities/oats-okf/skills/okf-consultation/SKILL.md +0 -144
  99. package/capabilities/oats-okf/skills/okf-consultation/references/consult.md +0 -86
  100. package/capabilities/oats-okf/skills/okf-instance-knowledge/SKILL.md +0 -104
  101. package/capabilities/oats-okf-harvest/bin/okf-harvest.mjs +0 -140
  102. package/capabilities/oats-okf-harvest/injects/harvester.md +0 -12
  103. package/capabilities/oats-okf-harvest/oats.json +0 -26
  104. package/capabilities/oats-okf-harvest/skills/knowledge-harvest/SKILL.md +0 -168
  105. package/capabilities/oats-okf-harvest/skills/knowledge-theory/SKILL.md +0 -192
  106. package/capabilities/oats-okf-harvest/skills/okf-authoring/SKILL.md +0 -151
  107. package/capabilities/oats-okf-harvest/skills/okf-authoring/scripts/okf-validate.mjs +0 -123
  108. package/capabilities/oats-okf-maintenance/bin/okf-maintenance.mjs +0 -170
  109. package/capabilities/oats-okf-maintenance/injects/maintainer.md +0 -12
  110. package/capabilities/oats-okf-maintenance/lib/provenance.mjs +0 -50
  111. package/capabilities/oats-okf-maintenance/oats.json +0 -21
  112. package/capabilities/oats-okf-maintenance/skills/knowledge-review/SKILL.md +0 -159
  113. package/capabilities/oats-okf-maintenance/skills/knowledge-theory/SKILL.md +0 -192
  114. package/capabilities/oats-okf-maintenance/skills/okf-authoring/SKILL.md +0 -151
  115. package/capabilities/oats-okf-maintenance/skills/okf-authoring/scripts/okf-validate.mjs +0 -123
  116. package/capabilities/oats-okf-maintenance/skills/okf-trigger-setup/SKILL.md +0 -134
  117. package/capabilities/oats-workspace-experts/injects/oats-experts.md +0 -26
  118. package/capabilities/oats-workspace-experts/oats.json +0 -9
@@ -1,53 +0,0 @@
1
- ---
2
- name: plan-and-spec
3
- description: Turn a goal into a plan and one executable spec per surface (code area, package or service) for developers to implement. Use when starting a feature, fix or project in your domain, when a developer needs a spec, or when work must be split across developers.
4
- ---
5
-
6
- # Plan and spec
7
-
8
- A developer should be able to implement a spec without coming back to ask what you
9
- meant. If they would have to guess, the spec is not done.
10
-
11
- ## 1. Frame the goal
12
- - **The problem**, in one or two sentences, and who has it.
13
- - **Done means:** observable outcomes, not activities ("`oats teams add` refuses a
14
- duplicate label with E_TEAM_EXISTS", not "improve team handling").
15
- - **Constraints:** compatibility promises, contracts other parts rely on, security
16
- boundaries, performance limits, deadlines.
17
- - **Out of scope:** what this work deliberately does not do.
18
-
19
- ## 2. Design at your level
20
- - Choose the design. Record the alternatives you rejected and why, in one line each.
21
- - Name every contract the change touches (APIs, file formats, CLI output, env vars,
22
- events) and whether it changes. A contract change needs its consumers named and an
23
- order ("the consumer accepts the new shape first").
24
- - Prefer the smallest change that meets "done". If a simpler design meets 90% of the
25
- goal, raise it with the requester before choosing the bigger one.
26
-
27
- ## 3. Split by surface
28
- - A **surface** is a part of the system one developer can own: a package, a service, a
29
- module group. Split so that each developer's work can be built and tested on its own.
30
- - Where surfaces meet, write the **interface first** (the shape, the error cases). Both
31
- specs cite it.
32
- - Sequence the pieces: what can run in parallel, what must land first.
33
-
34
- ## 4. Write each spec
35
- Use this shape, and keep it as short as the work allows:
36
-
37
- ```
38
- # Spec: <title>
39
- Goal: <one paragraph: the problem and the outcome>
40
- Done when: <checkable outcomes>
41
- Design: <the approach; the key decisions and why>
42
- Contracts: <what must not break; what changes, and for whom>
43
- Edge cases: <inputs, failures and states the code must handle>
44
- Tests: <what proves it: unit, integration, a real run>
45
- Out of scope: <what not to do>
46
- Surface / files: <where the work lives; what to leave alone>
47
- Delivery: <branch, PR target, who reviews>
48
- ```
49
-
50
- ## 5. Check the plan before launching
51
- - Every "done when" is covered by some spec's tests.
52
- - No two developers edit the same files without an agreed order.
53
- - The riskiest assumption is tested first (a spike, a real run), not last.
@@ -1,49 +0,0 @@
1
- ---
2
- name: verify-developer-work
3
- description: The expert's verification of work a developer hands back, after it has passed adversarial code review. Checks architecture, coherence, fit with the whole system, simplicity, and glaring bugs; does not redo the line-by-line review. Use when a developer reports work done, before accepting, merging or passing work on.
4
- ---
5
-
6
- # Verify developer work
7
-
8
- The work has been through an adversarial code review: line-level bugs, security and
9
- simplification were that reviewer's job. Yours is the view the reviewer doesn't have:
10
- does this belong in the system, the way it was built?
11
-
12
- ## 0. Check the handover is complete
13
- It needs:
14
- - what was done, against the spec's "done when";
15
- - how it was verified (tests run, real runs, with results);
16
- - **the adversarial review's final verdict**, and the rounds it took;
17
- - anything deliberately left out.
18
-
19
- If the review didn't happen, or ended without the reviewer being satisfied, send it back:
20
- you don't do the reviewer's job for it.
21
-
22
- ## 1. Architecture
23
- - Is it the design the spec asked for? If it deviates, is the deviation better, and
24
- recorded?
25
- - Are the responsibilities in the right places, or did logic leak across a boundary to
26
- make something easy?
27
- - Are contracts kept? A changed contract must have its consumers handled, in the right
28
- order.
29
-
30
- ## 2. Coherence and fit
31
- - Does it follow the system's existing patterns and names, or invent a parallel way?
32
- - Does it duplicate something that exists?
33
- - Will the next change in this area be easier or harder because of it?
34
-
35
- ## 3. Simplicity
36
- - Is it the simplest solution that meets "done"? Look for layers, options, flags or
37
- generality nobody asked for.
38
- - Could a piece be deleted with no loss?
39
-
40
- ## 4. Glaring bugs
41
- - Read the main path and the failure paths once, as a user would hit them. You are
42
- looking for what's obviously wrong, not auditing every line.
43
- - Check that the tests prove the "done when" items, not just that the code runs.
44
-
45
- ## Verdict
46
- - **Accept**, or **return** with numbered reasons, each saying what's wrong and why it
47
- matters. Keep matters of taste out of a return.
48
- - A return goes to the same developer. Architecture-level returns may need a spec change
49
- first: make it, then return.
@@ -1,40 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * oats-jira — OATS tasks-provider hook for Jira.
4
- *
5
- * Invoked by the OATS kernel at instance lifecycle events (hook contract):
6
- * oats-jira spawn surface the instance's Jira identity (label) and the
7
- * deployment's site/project in TASK.md — advisory only,
8
- * no Jira calls, nothing to mint or clean up.
9
- *
10
- * Env contract (set by the kernel):
11
- * OATS_EVENT spawn
12
- * OATS_INSTANCE instance name (its Jira label is agent-<instance>)
13
- * OATS_SETTINGS JSON of the provider's `settings:` block ({ site?, project? })
14
- *
15
- * Output (stdout JSON): { "meta": {...}, "brief": "...", "warning": "..." }
16
- * Exit code is advisory: the kernel treats hook failure as a warning, never a block.
17
- */
18
- const out = (o) => { process.stdout.write(JSON.stringify(o) + "\n"); process.exit(0); };
19
- const warn = (m) => out({ warning: `oats-jira: ${String(m).slice(0, 300)}` });
20
-
21
- const event = process.env.OATS_EVENT || process.argv[2];
22
- const instance = process.env.OATS_INSTANCE;
23
- const settings = JSON.parse(process.env.OATS_SETTINGS || "{}");
24
-
25
- if (event === "spawn") {
26
- const label = `agent-${instance}`;
27
- const site = settings.site;
28
- const project = settings.project;
29
- const where = site && project ? `project ${project} on ${site}`
30
- : site ? `site ${site} (project unset — ask your human)`
31
- : project ? `project ${project} (site unset — ask your human)`
32
- : `your deployment's Jira (site/project not configured — ask your human to set tasks: { site, project } in the soul's soul.yaml, or settings.oats.jira.{site,project} in the deployment's oats-local.yaml)`;
33
- out({
34
- meta: { label, ...(site ? { site } : {}), ...(project ? { project } : {}) },
35
- brief: `Tasks: Jira — ${where}. Your Jira identity is the label "${label}" (never the assignee field). Load the jira-tasks skill before touching tickets.`,
36
- ...(site && project ? {} : { warning: `oats-jira: settings incomplete (site: ${site || "unset"}, project: ${project || "unset"}) — set tasks: { site, project } in the soul's soul.yaml, or settings.oats.jira.{site,project} in the deployment's oats-local.yaml` }),
37
- });
38
- } else {
39
- warn(`unknown event "${event}" (expected spawn)`);
40
- }
@@ -1,10 +0,0 @@
1
- ## Tasks: Jira
2
-
3
- Your tasks layer is **Jira** (via the `acli` CLI). Work traces up to epics;
4
- you are identified by the label `agent-<your-instance-alias>` and an `Agent:`
5
- line in descriptions — never by the assignee field. Load the **jira-tasks**
6
- skill before reading your work queue, joining an epic's roster, posting
7
- progress, transitioning status, or creating stories/tasks. Your Jira site and
8
- project come from your deployment's settings (see your TASK.md briefing or
9
- the skill). Tasks only: status and outcomes live in Jira; conversation lives
10
- in your deployment's messaging layer.
@@ -1,22 +0,0 @@
1
- {
2
- "capability": "oats.jira",
3
- "command": "jira",
4
- "version": "1.0.1",
5
- "compatibility": { "oats": ">=0.26.0" },
6
- "layer": "tasks",
7
- "description": "Tasks layer via Jira: acli-based epic/story/task protocol, agent roster in epic descriptions, label-based agent identity.",
8
- "requires": [
9
- {
10
- "command": "acli",
11
- "why": "all Jira operations (search, view, create, transition, comment)",
12
- "install": "https://developer.atlassian.com/cloud/acli/guides/install-acli/"
13
- }
14
- ],
15
- "skills": [
16
- "skills"
17
- ],
18
- "inject": "injects/jira.md",
19
- "hooks": {
20
- "spawn": "bin/oats-jira.mjs spawn"
21
- }
22
- }
@@ -1,179 +0,0 @@
1
- ---
2
- name: jira-tasks
3
- description: >-
4
- Jira task tracking and agent roster protocol for OATS agents. Use when you
5
- are an agent instance working an epic, story, or task in Jira: reading your
6
- assignment, finding your work queue, joining or leaving an epic's Agent
7
- Roster, posting progress or handoff comments, transitioning ticket status,
8
- or creating stories/tasks under an epic. Also use when asked about "the
9
- board", "the roster", "your ticket", "epic status", or task tracking
10
- between agents. Uses the acli CLI (Atlassian CLI) from bash.
11
- ---
12
-
13
- # Agent task tracking (Jira)
14
-
15
- Jira is your deployment's **tasks layer** — the shared record for task
16
- tracking and the agent roster. Agents do not know about projects — you know
17
- **repos and epics**. The hierarchy:
18
-
19
- - **Epic** — the unit of work that kicks off, runs, and completes. May touch
20
- one repo or several. Its description carries the **Agent Roster** — the
21
- source of truth for who is on the epic and their role. Bugs/support run as
22
- a standing epic.
23
- - **Story** — a **group of related tasks** covering one part of the epic's
24
- work (often one repo's slice, one feature area). Not every task needs a
25
- story.
26
- - **Task** — a small bounded item, the thing an agent actually works. Lives
27
- **either directly under the epic** (standalone item) **or under a story**
28
- (part of a grouped slice). Everything traces up to an epic.
29
-
30
- ## Site and project (from your deployment, never hardcoded)
31
-
32
- Your Jira **site** and **project key** come from the tasks payload OATS merged
33
- for this instance: the soul's `soul.yaml` `tasks: { site, project }`, the
34
- deployment's `oats-local.yaml` `settings.oats.jira.{site,project}`, or a
35
- spawn's `--provider oats.jira key=value`. Find them, in order:
36
-
37
- 1. Your `TASK.md` briefing — the spawn hook writes a
38
- `Tasks: Jira — project <KEY> on <site>` line.
39
- 2. `./instance.json` in your instance home — `providers["oats.jira"]` is the
40
- merged payload this instance received.
41
- 3. Ask your human.
42
-
43
- Below, `<PROJECT>` means that project key. If site or project are unset,
44
- STOP and ask your human to set them — do not guess.
45
-
46
- **First use**: run `acli jira auth status` — if unauthorized, STOP and tell
47
- the human to run `acli jira auth login --web`. Never attempt login yourself.
48
-
49
- ## Identity rules (non-negotiable)
50
-
51
- - **The human assignee is always the owning engineer** (never change
52
- assignee to yourself; agents are not Jira users). Do not touch assignee
53
- unless told.
54
- - **You are identified by label and description**, not the assignee field:
55
- - Label `agent-<your-instance-alias>` on any story/task you work.
56
- - An `Agent:` line in the description (see templates).
57
- - **Never set or modify sprints.** Never delete tickets. Comment, don't
58
- rewrite, other agents' descriptions (exception: coordinators maintain the
59
- roster table).
60
-
61
- ## Your work queue
62
-
63
- ```bash
64
- acli jira workitem search --jql "project = <PROJECT> AND labels = agent-<alias> AND statusCategory != Done ORDER BY rank" --json
65
- acli jira workitem view <PROJECT>-1234 --json # read one ticket (description, labels, status)
66
- acli jira workitem search --jql "project = <PROJECT> AND parent = <PROJECT>-<epic> AND statusCategory != Done" --json # epic's direct children (stories + standalone tasks)
67
- acli jira workitem search --jql "project = <PROJECT> AND parent = <PROJECT>-<story> AND statusCategory != Done" --json # a story's tasks
68
- ```
69
-
70
- An epic's full open work = its direct children **plus** the tasks under each
71
- of its stories — walk one level down from stories when you need the complete
72
- picture.
73
-
74
- Record your epic and ticket keys in your instance memory (e.g. `STATE.md`
75
- `# Context`).
76
-
77
- ## The Agent Roster (epics)
78
-
79
- The epic description contains a `## Agent Roster` markdown table — current
80
- truth for who is on the epic:
81
-
82
- ```
83
- ## Agent Roster
84
-
85
- | Agent (instance) | Soul / class | Repo | Role on epic | Status | Since |
86
- |---|---|---|---|---|---|
87
- | coordinator-digest | coordinator (newsletter) | newsletter-service | runs the epic | active | 2026-07-07 |
88
- | developer-digest-api | developer (newsletter) | newsletter-service | implements API | active | 2026-07-07 |
89
- ```
90
-
91
- Protocol:
92
- - **Joining**: the coordinator (or the spawning agent) adds your row to the
93
- table (`acli jira workitem edit <epic> --description ...` with the full
94
- updated description — read it first, edit only the roster table) AND posts
95
- a comment: `[roster] <alias> joined — role: <role>, repo: <repo>`.
96
- - **Leaving/retiring**: set the row's Status to `retired` (keep the row — it
97
- is history) and comment `[roster] <alias> retired — <one-line outcome>`.
98
- - Only edit the roster table; never rewrite the rest of the epic description.
99
- - Comments are the event log; the table is current state. On conflict, fix
100
- the table and note it in a comment.
101
-
102
- ## Working a ticket
103
-
104
- 1. Read your ticket and its epic (description + roster) before starting.
105
- 2. **Milestones** → comment on your ticket, prefixed `[<alias>]`. Mirror the
106
- entry you record in your instance memory — same events, two audiences.
107
- 3. **Status transitions** — move your ticket as you work:
108
- `acli jira workitem transition <PROJECT>-1234 --status "In Progress"`.
109
- Discover valid statuses with `--help` or by trying; if a transition is
110
- rejected, comment instead and let the coordinator move it.
111
- 4. **Done** = your latest commit is review-clean and the branch is handed
112
- off. Comment the outcome (branch, PR link, verification), then transition.
113
- 5. **Handoff/blocked** → comment
114
- `[<alias>] handoff → <next-alias>: <what+where>` or
115
- `[<alias>] blocked: <what is needed, from whom>`.
116
-
117
- Tasks ≠ messaging: status and outcomes live here in Jira; conversation lives
118
- in your deployment's messaging layer. Mail nudges; Jira records.
119
-
120
- ## Creating tickets (coordinators; developers file follow-ups as Tasks)
121
-
122
- House rules: summary ≤ 12 words, describe the requirement not the solution,
123
- bugs always include reproduction steps, keep descriptions to a few bullets.
124
-
125
- **Choosing the level:**
126
- - Small bounded item, no siblings needed → **Task directly under the epic**.
127
- - A part of the epic's work that breaks into several related tasks → **Story
128
- under the epic, tasks under the story**. The story is the group, not the
129
- work item — agents are assigned to its tasks (a story worked wholly by one
130
- agent may carry that agent's label too).
131
- - Never create a story for a single task, and never nest stories.
132
-
133
- ```bash
134
- acli jira workitem create --project <PROJECT> --type Task --summary "<summary>" \
135
- --parent <PROJECT>-<epic-or-story> --label "agent-<alias>" --description "<see template>"
136
- acli jira workitem create --project <PROJECT> --type Story --summary "<summary>" \
137
- --parent <PROJECT>-<epic> --description "<see template>"
138
- ```
139
-
140
- ### Story/Task description template
141
-
142
- ```
143
- <What & why — 2-4 bullets. Acceptance criteria as a checklist.>
144
-
145
- ---
146
- Agent: <instance-alias> (who works this — matches the agent-<alias> label; stories list it only when one agent works the whole story)
147
- Soul: <soul-name> · Repo: <repo>
148
- Parent: <PROJECT>-<epic-or-story-key> · Epic: <PROJECT>-<epic-key>
149
- ```
150
-
151
- ### Epic description template
152
-
153
- ```
154
- <Intent — what this epic delivers and why. Walls — what is explicitly out.>
155
-
156
- Repos touched: <repo>, <repo>
157
- Human gates: <security/authz/migration/contract items needing sign-off, or "none">
158
-
159
- ## Agent Roster
160
-
161
- | Agent (instance) | Soul / class | Repo | Role on epic | Status | Since |
162
- |---|---|---|---|---|---|
163
- ```
164
-
165
- ### Comment conventions (machine-greppable prefixes)
166
-
167
- - `[roster] <alias> joined|retired — …`
168
- - `[<alias>] milestone: …` · `[<alias>] handoff → <alias>: …` ·
169
- `[<alias>] blocked: …` · `[<alias>] done: branch <name>, <verification>`
170
-
171
- ## Verify-before-trusting
172
-
173
- Jira workflows differ per site. On first real use in a deployment: check the
174
- project's issue types (`Epic/Story/Task/Bug`), whether `--parent` links
175
- stories/tasks to epics, whether a **Task can take a Story as parent** (some
176
- Jira configs only allow that via the Sub-task type — if so, use Sub-tasks
177
- under stories and treat them as tasks), and the exact status names. If
178
- reality differs, note it in a comment on your ticket and tell your
179
- coordinator so your deployment's conventions get recorded.
@@ -1,34 +0,0 @@
1
- #!/usr/bin/env node
2
- /** OATS spawn briefing for the Linear tasks integration. Makes no API calls. */
3
- const output = (value) => {
4
- process.stdout.write(JSON.stringify(value) + "\n");
5
- process.exit(0);
6
- };
7
-
8
- const event = process.env.OATS_EVENT || process.argv[2];
9
- if (event !== "spawn") output({ warning: `oats-linear: unknown event "${event}" (expected spawn)` });
10
-
11
- let settings = {};
12
- try { settings = JSON.parse(process.env.OATS_SETTINGS || "{}"); }
13
- catch { output({ warning: "oats-linear: the tasks settings payload (OATS_SETTINGS) is not valid JSON" }); }
14
-
15
- const instance = process.env.OATS_INSTANCE || "unknown-instance";
16
- const team = settings.team;
17
- const project = settings.project;
18
- const label = `agent-${instance}`;
19
- // Where team lives under the workspace model (0.26): the soul's tasks payload or this machine's settings.
20
- const TEAM_HOMES = "tasks: { team } in the soul's soul.yaml, or settings.oats.linear.team in the deployment's oats-local.yaml";
21
- const target = team
22
- ? `team ${team}${project ? `, default project ${project}` : ""}`
23
- : `team unset — ask your human to set ${TEAM_HOMES}`;
24
- const warnings = [];
25
- if (!team) warnings.push(`settings.team is unset (set ${TEAM_HOMES})`);
26
- if (!process.env.LINEAR_API_KEY) warnings.push("LINEAR_API_KEY is not in the spawn environment");
27
-
28
- output({
29
- meta: { label, ...(team ? { team } : {}), ...(project ? { project } : {}) },
30
- brief: `Tasks: Linear — ${target}. Your agent identity is label "${label}"; keep the human assignee unchanged. Load the linear-tasks skill before touching issues.`,
31
- ...(warnings.length ? {
32
- warning: `oats-linear: ${warnings.join("; ")} — see the linear-tasks skill`,
33
- } : {}),
34
- });