@atollhq/skill-codex 0.4.27 → 0.4.29

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atollhq/skill-codex",
3
- "version": "0.4.27",
3
+ "version": "0.4.29",
4
4
  "description": "Install the Atoll project management integration for Codex CLI",
5
5
  "bin": {
6
6
  "skill-codex": "bin/install.mjs"
package/skill/SKILL.md CHANGED
@@ -38,12 +38,20 @@ Read only the references required for the current task:
38
38
  - Request and response fields, enums, and validation:
39
39
  [api-fields.md](references/api-fields.md)
40
40
 
41
- For automation rule V1 actions (including create issue), CI create-only rules,
42
- event conditions, validation, safe disabling, and example-only CI dry runs, read [Automation Rule Fields](references/api-fields.md#automation-rule-fields).
41
+ For automation rule V1 actions (including create issue and send webhook), explicit project or
42
+ organization scope, CI create-or-webhook rules, event conditions, validation, safe
43
+ disabling, repair, and example-only CI dry runs, read [Automation Rule Fields](references/api-fields.md#automation-rule-fields).
43
44
  Use `atoll automation` for rule management, previews, and run history; see
44
45
  [CLI operations](references/cli-operations.md#automation-rules).
45
- Invalid rules execute no actions. Do not enable one before its full definition
46
- and references pass validation.
46
+ REST rule lists accept `?project_id=<UUID>` for exact project rules or
47
+ `?project_id=none` for organization-wide rules only. Omission lists all rules
48
+ in the organization. See [list filter access and validation](references/api-endpoints.md#automation-rules).
49
+ Rule creates require an explicit `project_id`: use a project UUID for project
50
+ scope or `null` for organization scope. Partial updates preserve the saved
51
+ scope when `project_id` is omitted; include it only when intentionally changing
52
+ scope. An invalid rule executes no actions. Repair an invalid rule with
53
+ separate `disable`, `update` while it is disabled, `test`, and `enable`
54
+ operations. Enable only after the latest saved revision passes the dry run.
47
55
 
48
56
  Do not load every reference by default. Start with this entrypoint and load a
49
57
  topic reference only when the requested operation needs it.
@@ -719,6 +719,18 @@ receive projectless work. An inaccessible explicit `projectId` is concealed as
719
719
 
720
720
  ## Automation Rules
721
721
 
722
+ **List filter:** `GET /api/orgs/{id}/automation-rules` accepts optional
723
+ `project_id`. A project UUID returns only rules assigned to that exact project;
724
+ it does not include organization-wide rules. Use `project_id=none` for only
725
+ organization-wide rules (`project_id IS NULL`). Omit the parameter to preserve
726
+ the existing list of all rules in the organization. Empty or invalid values
727
+ return `400`. A project UUID requires both organization membership and caller
728
+ read access to that project; cross-organization, inaccessible, or missing
729
+ projects return `404`. Organization-wide and unfiltered requests retain existing
730
+ organization-member access. Results remain newest first and include disabled
731
+ or invalid rules with their validation diagnostics. This REST filter does not
732
+ add CLI flags or public MCP tool parameters.
733
+
722
734
  | Method | Endpoint | Description |
723
735
  |--------|----------|-------------|
724
736
  | GET | `/api/orgs/{id}/automation-rules` | List rules |
@@ -730,7 +742,15 @@ receive projectless work. An inaccessible explicit `projectId` is concealed as
730
742
  | POST | `/api/orgs/{id}/automation-rules/{ruleId}/test` | Dry-run test |
731
743
 
732
744
  V1 definitions validate on create, merged partial updates, dry runs, and runtime.
733
- A concurrent edit during validation returns `409`; reload before retrying.
745
+ On create, `project_id` must be explicit: use a project UUID for project scope
746
+ or `null` for organization scope. Partial updates preserve the saved scope
747
+ when `project_id` is omitted; include it only when intentionally changing
748
+ scope. A concurrent edit during validation returns `409`; reload before
749
+ retrying. An enabled rule must be
750
+ disabled with a separate exact `{ "enabled": false }` update before changing
751
+ scope or repairing an invalid definition. A disabled invalid rule can be
752
+ repaired while remaining disabled; run `test` on that saved revision before a
753
+ separate `enable` update.
734
754
  GET/list preserve invalid rows with optional `validation: { valid, issues }`
735
755
  (`issues` contain `path`, `code`, and `message`). Owner/admin callers can disable
736
756
  an invalid rule with only `{ "enabled": false }`. Change-condition dry runs
@@ -764,6 +784,7 @@ failed without executing its actions.
764
784
  |--------|----------|-------------|
765
785
  | GET | `/api/webhooks?orgId=...` | List redacted webhooks (owner/admin) |
766
786
  | POST | `/api/webhooks?orgId=...` | Create webhook (owner/admin) |
787
+ | PATCH | `/api/webhooks/{id}` | Update webhook metadata or private auth (owner/admin) |
767
788
  | DELETE | `/api/webhooks/{id}` | Delete webhook (owner/admin) |
768
789
  | GET | `/api/webhooks/{id}/deliveries` | List safe delivery metadata (owner/admin, last 50) |
769
790
  | POST | `/api/webhooks/{id}/redeliver/{deliveryId}` | Redeliver a past payload (owner/admin) |
@@ -499,6 +499,11 @@ clear it), `add_assignee` (add a member UUID without removing others), `unassign
499
499
  (omit `value`), `set_priority` (integer `0` through `3`), `add_label` and
500
500
  `remove_label` (label UUID), `post_comment` (non-empty text, at most 10,000
501
501
  characters), and legacy `close_issue` (omit `value`, targets the valid `done` key).
502
+ `send_webhook` accepts only `{ "type": "send_webhook", "webhook_id": "webhook-uuid" }`.
503
+ The destination must be enabled, same-org, and purpose `automation` or `both`.
504
+ Queued transport retries do not re-run the automation action. Activity exposes
505
+ `webhook_delivery_id` plus safe latest-attempt `webhook_delivery` state.
506
+ Manual redelivery uses a new header and payload delivery ID.
502
507
  Already satisfied assignments, priorities, statuses, and label relationships
503
508
  succeed without duplicate mutation events. Invalid references still fail.
504
509
  Unsupported action types or malformed values return `400` and are not saved.
@@ -517,7 +522,7 @@ oversized rendered content fail before creation. Current issue triggers do not
517
522
  provide those external fields; use fixed text for issue triggers. The
518
523
  `ci.run.completed` trigger supplies them from a signed GitHub completion event.
519
524
  CI rules require organization scope (`project_id: null`) and support only
520
- `create_issue`. CI rules accept only event conditions. Issue triggers reject event conditions.
525
+ `create_issue` and `send_webhook`. CI rules accept only event conditions. Issue triggers reject event conditions.
521
526
  Event conditions use `kind: "event"`, `eq` or `neq`, and fields
522
527
  `conclusion`, `repository`, `workflow`, `branch` (strings), `has_pr`, or
523
528
  `has_linked_issue` (booleans). Use conclusion `failure` and
@@ -553,12 +558,29 @@ Create and partial `PUT` requests reject unknown keys, unsupported versions,
553
558
  malformed conditions/actions, and invalid references with `400` and
554
559
  `issues: [{ path, code, message }]`. A partial update is merged with the stored
555
560
  definition and the complete result is validated. If another edit changes the rule
556
- during validation, `PUT` returns `409`; reload the rule before retrying. Project-scoped status values
561
+ during validation, `PUT` returns `409`; reload the rule before retrying. An enabled
562
+ rule must be disabled by a separate exact `{ "enabled": false }` request before
563
+ changing `project_id`; combining disable with a scope change is rejected. An
564
+ enabled invalid rule must also be disabled separately before repair. A disabled
565
+ invalid rule accepts a valid repair only while remaining disabled; repair and
566
+ enable must be separate. Project-scoped status values
557
567
  must exist in that workflow; project, member, and label references must belong
558
568
  to the organization. A request containing only `{ "enabled": false }` can
559
569
  disable an invalid rule without changing its definition; owner/admin access
560
570
  is still required. Enabling requires a valid definition.
561
571
 
572
+ **List filter:** `GET /api/orgs/{id}/automation-rules` accepts optional
573
+ `project_id`. A project UUID returns only rules assigned to that exact project;
574
+ it does not include organization-wide rules. Use `project_id=none` for only
575
+ organization-wide rules (`project_id IS NULL`). Omit the parameter to preserve
576
+ the existing list of all rules in the organization. Empty or invalid values
577
+ return `400`. A project UUID requires both organization membership and caller
578
+ read access to that project; cross-organization, inaccessible, or missing
579
+ projects return `404`. Organization-wide and unfiltered requests retain existing
580
+ organization-member access. Results remain newest first and include disabled
581
+ or invalid rules with their validation diagnostics. This REST filter does not
582
+ add CLI flags or public MCP tool parameters.
583
+
562
584
  GET/list rules can include `validation: { valid, issues: [{ path, code, message }] }`.
563
585
  Invalid saved rows remain readable. Runtime validation rejects the whole invalid
564
586
  rule before any action; valid actions are not salvaged from a malformed rule.
@@ -688,15 +710,23 @@ reject `position`.
688
710
 
689
711
  ## Webhook Fields
690
712
 
713
+ Bearer secrets must contain only printable ASCII characters. Switching from none to Bearer requires a token and returns HTTP 400 if it is missing.
714
+
715
+ `PATCH /api/webhooks/{id}` preserves omitted fields. A blank or omitted Bearer
716
+ secret preserves the token; `auth.type: none` clears it. URL/auth changes create
717
+ a new private destination version; pending deliveries retain their pinned version.
718
+
691
719
  ```json
692
720
  {
693
721
  "url": "https://example.com/webhook",
694
722
  "events": ["issue.created", "issue.updated"],
695
- "enabled": true
723
+ "enabled": true,
724
+ "purpose": "subscription",
725
+ "auth": { "type": "none" }
696
726
  }
697
727
  ```
698
728
 
699
- URL must be an HTTPS DNS hostname. IP literals, `localhost`, and `.local` hosts are rejected at creation; delivery refuses non-public DNS results and does not follow redirects. The create response includes a `secret` for HMAC signature verification. Store it immediately; it is shown only once.
729
+ URL must be an HTTPS DNS hostname. IP literals, `localhost`, and `.local` hosts are rejected at creation; delivery refuses non-public DNS results and does not follow redirects. The create response includes a `secret` for HMAC signature verification. Store it immediately; it is shown only once. Use purpose `automation` or `both` with `auth: { "type": "bearer", "secret": "..." }` for automation destinations; responses expose only `auth.type` and `auth.configured`.
700
730
 
701
731
  List responses include `destination_display` and a deprecated `url` compatibility field containing only the origin plus `/…`. Payload schema version `2` is allowlisted. Delivery requests include `X-Atoll-Signature`, `X-Atoll-Signature-Version`, versioned `X-Atoll-Signatures`, and `X-Atoll-Delivery-Id`. Delivery history includes `delivery_id`, `status`, `status_code`, `error_code`, `delivered_at`, and `next_retry_at`, never payloads, receiver response bodies, or raw errors.
702
732
 
@@ -201,16 +201,21 @@ Use `atoll automation list`, `get <rule-uuid>`, `create --file rule.json`,
201
201
  `runs <rule-uuid> --limit 20`, `enable`, `disable`, and `delete --force`.
202
202
  Use `delete <rule-uuid> --dry-run` to preview deletion. Use `--json`
203
203
  for machine-readable results and `--file -` for standard input. Create defaults
204
- to disabled when `enabled` is omitted; update preserves omitted fields.
204
+ to disabled when `enabled` is omitted, but the JSON must include an explicit
205
+ `project_id` UUID or `null` for Organization-wide scope; update preserves omitted
206
+ fields.
205
207
  List uses the selected organization and applies a project filter only with
206
208
  explicit `--project`; it does not inherit the default project.
207
209
 
208
210
  Rule files use the canonical Automation Rule Fields contract. CI rules require
209
- `project_id: null`, only `create_issue` actions, and event conditions. Use
211
+ `project_id: null`, only `create_issue` or `send_webhook` actions, and event conditions. Use
210
212
  conclusion `failure` and `has_linked_issue: false` for unlinked CI failures.
211
213
  The action chooses its target project/status and accepts approved
212
214
  `{{repository}}`, `{{workflow}}`, `{{conclusion}}`, `{{run_url}}` substitutions.
213
215
  CI `test` sends `{}` by default, uses marked fixed examples, rejects overrides,
214
216
  and executes no actions. Inspect the preview before explicitly enabling.
215
217
  Rule writes, tests, and run history require owner/admin access; CLI does not bypass it.
216
- `runs` preserves created issue IDs and interrupted-action evidence.
218
+ `runs` preserves created issue IDs and interrupted-action evidence. For an invalid
219
+ rule, use separate `disable`, `update` while disabled, `test`, and `enable`
220
+ operations. Human `get` output includes invalid state and validation paths;
221
+ `--json` preserves the API response.