@atollhq/skill-codex 0.4.24 → 0.4.25
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
package/skill/SKILL.md
CHANGED
|
@@ -364,6 +364,7 @@ atoll dependency bulk-add --file ./dependencies.json --continue-on-error
|
|
|
364
364
|
|
|
365
365
|
Dependency reads include a target issue `identifier` and `projectSlug` when the target belongs to a project. Inaccessible targets remain `issue: null`; projectless targets have both fields set to `null`.
|
|
366
366
|
Dependencies persist a release point in the blocking project's ordered board columns. Add `releaseColumnId` when creating an edge, or omit it to default to that project's `done` column. Use the dependency API PATCH route to change the release point; reads include `releaseColumnId`, `releaseColumn`, and `satisfied`.
|
|
367
|
+
Archiving a blocker preserves the dependency edge and configured release column while satisfying the dependency. Restoring it re-evaluates the same release point and can block the dependent again. Configurable release-point and cancelled-blocker behavior are unchanged.
|
|
367
368
|
The blocking issue must belong to a project because its release point is a board
|
|
368
369
|
column there; a projectless issue may be the blocked target.
|
|
369
370
|
The dependency-release migration backfills existing dependencies to the
|
|
@@ -429,6 +430,9 @@ CLI JSON conventions:
|
|
|
429
430
|
- `atoll heartbeat --json` includes the same structured `cli` update metadata for agents, plus `attention_items`, `attention_summary`, and `recommended_action` when Atoll can propose one concrete strategy-backed next action. `atoll heartbeat --signals-only --json` preserves filtered `signals`, `attention_items`, `attention_summary`, and `recommended_action` for short polling. Handle direct attention items first, then call each handled item's `ack_endpoint`. Follow `recommended_action.usage_guidance`: prefer `suggested_write.operation` when it still matches the board, preserve KPI/initiative/initiative_target/why-now/expected-impact/first-step/success-criteria evidence, and avoid copying deferred busywork into issue or comment payloads. If a `start_work` recommendation uses `issue.update` with a body, update the issue status and preserve that body as an issue comment; `PATCH /issues/{issueId}` accepts `comment_body` for this same-request progress note.
|
|
430
431
|
- Authorized humans can configure an agent's included heartbeat sections and generated-signal focus in the Atoll **Heartbeats** UI. The saved policy is applied by the API before CLI or MCP request-level narrowing; it never changes project access, and existing heartbeat commands require no new arguments.
|
|
431
432
|
- GitHub `workflow_run` signals are accepted only when HMAC-signed and completed, then reread and matched exactly by repository, PR, workflow path, run attempt, and head SHA. Workflow verification is disabled by default and observe-only until an owner/admin enables it in **Settings > Integrations > GitHub**. `attention` mode can add one bounded `verification.completed` attention item through authorized REST or CLI heartbeat for exactly one eligible current agent assignee or, when there is no unambiguous assignee, an eligible configured delivery agent. The public MCP heartbeat excludes this private event type. Unresolved recipients and cancelled, obsolete, superseded, mismatched, or unreadable runs create no attention. Owners and admins can configure 1–10 workflow paths of at most 255 characters each; the bounded evidence list defaults to 25 items and accepts a maximum `limit` of 100. Signed pull-request writes and reconciliation bind PR links to the stable GitHub repository ID, so repository renames keep existing workflow evidence linked. Do not expect raw payloads, secrets, logs, or thread IDs in evidence; owner/admin reconciliation retries pending evidence after current GitHub and PR-link readback.
|
|
433
|
+
- Release-added required GitHub hook events mark existing reconciled and already-pending connections pending. The bounded 15-minute service sweep verifies immutable repository identity and upgrades hooks automatically; transient failures remain pending for retry, and owners/admins can reconcile manually.
|
|
434
|
+
- Issue delivery context selects an open PR first, then the latest updated link, then the highest PR number. `pending` review/workflow state with null provenance means no current-head observation and does not by itself set `partial`. Disabled GitHub verification stops new projections. Workflow conclusions map success/neutral to passed, cancelled/stale/skipped to cancelled, and other supported terminal conclusions to failed.
|
|
435
|
+
- Aggregate review state keeps each reviewer's latest exact-head opinion, ignores comments, and removes dismissed opinions. Change requests win. `approved` means at least one effective approval and no effective change request; it does not prove required-review counts or branch protection.
|
|
432
436
|
- `atoll plan validate/apply` consumes `schemaVersion: "atoll.plan.v1"` files with `milestones`, `issues`, `dependencies`, `initiativeLinks`, and `milestoneLinks`; local `key` values can be referenced by `milestoneKey`, `issueKey`, `dependsOn`, `blockedBy`, or `blocks`.
|
|
433
437
|
|
|
434
438
|
## KPI HTTP Sync Drafts
|
|
@@ -620,6 +624,64 @@ atoll() {
|
|
|
620
624
|
atoll "/api/orgs/$ATOLL_ORG_ID/issues?status=todo"
|
|
621
625
|
```
|
|
622
626
|
|
|
627
|
+
## Execution and attention CLI workflow
|
|
628
|
+
|
|
629
|
+
Use `atoll execution list|get|create|transition`, `execution evidence list|add`,
|
|
630
|
+
and `atoll attention create|list|get|cancel` with the selected profile and `--json`.
|
|
631
|
+
Creation requires `--issue`, `--agent <member-id|self>`, and an explicit
|
|
632
|
+
`--idempotency-key`; it returns `assigned` at state version 1. Start with a
|
|
633
|
+
separate `execution transition <id> --to running --expected-state-version 1
|
|
634
|
+
--idempotency-key <start-key>`. Atoll records state; it does not start a harness.
|
|
635
|
+
|
|
636
|
+
Generic transition targets are `running|waiting|succeeded|failed|cancelled`.
|
|
637
|
+
For `succeeded`, supply `--outcome-summary` unless the execution already has
|
|
638
|
+
linked evidence. The server validates this requirement.
|
|
639
|
+
Use `attention create` to move `running|waiting` to `needs_human`; generic
|
|
640
|
+
transitions cannot enter or leave `needs_human`. Attention kinds are exactly
|
|
641
|
+
`approval|clarification|access|decision|destructive_action|other`. Supply the
|
|
642
|
+
execution's expected state version, title, request summary, why needed, resume
|
|
643
|
+
condition, exactly one member/team/project-admin target, and an idempotency key.
|
|
644
|
+
Never put credentials, access tokens, private paths, prompts, logs, or other
|
|
645
|
+
secrets in attention text. Server permissions and concealed 404 responses remain
|
|
646
|
+
authoritative; do not try another identity to bypass them.
|
|
647
|
+
|
|
648
|
+
Read `attention get <id>` for the human's resolution and current attention and
|
|
649
|
+
execution versions. Human resolution returns the execution to `waiting`; it
|
|
650
|
+
does not resume a model or harness. Requester `attention cancel` also returns it
|
|
651
|
+
to `waiting` and requires `--expected-attention-version`,
|
|
652
|
+
`--expected-state-version`, and `--idempotency-key`. Human resolve, administrator
|
|
653
|
+
retarget/cancel, and recovery discovery are REST/UI operations, not CLI commands.
|
|
654
|
+
Harness acceptance and the later explicitly fenced `waiting -> running` resume
|
|
655
|
+
remain the separate AH-2122 integration.
|
|
656
|
+
|
|
657
|
+
Every write uses the caller's explicit idempotency key; transitions and attention
|
|
658
|
+
writes use the caller's expected versions. Never silently fetch a new version
|
|
659
|
+
and write against it. After a POST timeout, network failure, or HTTP 5xx, the
|
|
660
|
+
outcome is uncertain and the CLI does not retry. Read `execution get <id>`,
|
|
661
|
+
`attention get <id>` (or `attention list --execution <id>` when create returned no
|
|
662
|
+
attention ID), or `execution evidence list <id>`. Stop if the result is visible.
|
|
663
|
+
For execution create without an ID, replay the identical create command with
|
|
664
|
+
the same key, then read the returned ID. If replay is needed for another write,
|
|
665
|
+
keep the exact body and key. Stop for operator reconciliation if changed state
|
|
666
|
+
or versions make the outcome ambiguous; never use a new key to force progress.
|
|
667
|
+
|
|
668
|
+
Evidence add links only an existing authorized issue object using
|
|
669
|
+
`--type <comment|activity_event|issue_pr_link|attachment> --target-id <uuid>
|
|
670
|
+
--idempotency-key <key>`. It does not upload files, URLs, text, or raw logs.
|
|
671
|
+
|
|
672
|
+
## Human attention
|
|
673
|
+
|
|
674
|
+
When an execution needs a human, use the attention contract. `POST
|
|
675
|
+
/api/orgs/{id}/attention` records a bounded request and atomically moves the
|
|
676
|
+
execution to `needs_human`; generic execution transitions cannot perform this
|
|
677
|
+
edge. Poll `GET /api/orgs/{id}/attention` or use the exact item endpoint.
|
|
678
|
+
Resolve, cancel, or retarget with both expected versions and an idempotency
|
|
679
|
+
key. Reuse the same key only with the same input. Use `mode=recovery` only as
|
|
680
|
+
an authorized human administrator when the original target is no longer
|
|
681
|
+
eligible. Keep request text concise and never include secrets, credentials,
|
|
682
|
+
logs, prompts, or local paths. The public projection provides current and
|
|
683
|
+
snapshot actor/target fields, execution state, issue, and project context.
|
|
684
|
+
|
|
623
685
|
## The Heartbeat Loop
|
|
624
686
|
|
|
625
687
|
The primary pattern for autonomous agents. Prefer `atoll heartbeat --json` when the CLI is available; it wraps `GET /api/orgs/{id}/heartbeat` and returns the same computed briefing:
|
|
@@ -791,6 +853,20 @@ Owners/admins can read billing state with `GET /api/orgs/{id}/billing` and start
|
|
|
791
853
|
|
|
792
854
|
Creation endpoints can return `402` with `code: "PLAN_LIMIT_REACHED"` when an org reaches limits for humans, agents/integrations, active projects, or active issues.
|
|
793
855
|
|
|
856
|
+
## Agent execution REST API
|
|
857
|
+
|
|
858
|
+
Use the canonical org-scoped execution routes for lifecycle management:
|
|
859
|
+
`GET|POST /api/orgs/{id}/executions`, `GET
|
|
860
|
+
/api/orgs/{id}/executions/{executionId}`, `POST
|
|
861
|
+
/api/orgs/{id}/executions/{executionId}/transitions`, and `GET|POST` on the
|
|
862
|
+
matching `/evidence` route. Create starts in `assigned`; transition writes
|
|
863
|
+
require `expected_state_version` and an idempotency key. Generic transitions
|
|
864
|
+
cannot enter or leave `needs_human`; use the attention contract. Reads follow
|
|
865
|
+
the issue's current project access. Non-guest organization members may also read
|
|
866
|
+
projectless executions; setup-scoped agents and guest members cannot. Creation-
|
|
867
|
+
project metadata does not grant access, and unreadable records are concealed.
|
|
868
|
+
Responses are bounded management projections, not logs or harness controls.
|
|
869
|
+
|
|
794
870
|
## API Reference
|
|
795
871
|
|
|
796
872
|
Full endpoint tables and field schemas:
|
|
@@ -827,6 +903,12 @@ default 50) and `offset`, and returns `hasMore`; removing the final link
|
|
|
827
903
|
requires owner or admin access. Linked issues and projects cannot be deleted
|
|
828
904
|
until the Artifact is unlinked or reassigned.
|
|
829
905
|
|
|
906
|
+
Artifact list and detail responses include `can_edit`, which is true when the
|
|
907
|
+
current member can create a revision, and `can_unlink`, which is true when the
|
|
908
|
+
current member can remove a visible link. Members with write access can remove
|
|
909
|
+
a link when another link remains; removing a final link requires owner or admin
|
|
910
|
+
access.
|
|
911
|
+
|
|
830
912
|
Private CLI issue reads request the opt-in metadata-only manifest. Inspect
|
|
831
913
|
`.artifacts`, then use `atoll artifact get <id> --issue <issue>` only when the
|
|
832
914
|
full current body is required. Create and update accept `--body-file -` for
|
|
@@ -861,6 +943,17 @@ otherwise the API returns `422` with `code: "github_identity_unavailable"`.
|
|
|
861
943
|
Reads return bounded display metadata, provenance, observation timestamps, and
|
|
862
944
|
resolvability. Reads require project visibility; writes require project
|
|
863
945
|
`edit`/`admin`, with eligible non-guests allowed for projectless issues.
|
|
946
|
+
For compact implementation evidence, the private REST endpoint
|
|
947
|
+
`GET /api/orgs/{id}/issues/{issueId}/external-operational-signals` returns the
|
|
948
|
+
selected PR, stable repository identity, exact current head SHA, current-head
|
|
949
|
+
review and configured workflow states, bounded provenance, freshness, and a
|
|
950
|
+
safe strongest blocker. Older-head evidence is historical. Configured
|
|
951
|
+
workflows are not GitHub branch-protection required checks. This namespace is
|
|
952
|
+
separate from heartbeat `signals[]` and never changes tasks or dispatches
|
|
953
|
+
agents.
|
|
954
|
+
The selected PR-link state is authoritative. If a same-head PR observation
|
|
955
|
+
disagrees, Atoll clears its observation/provider provenance, falls back to the
|
|
956
|
+
link URL, excludes it from freshness, and sets `partial`.
|
|
864
957
|
Organization-wide templates are readable by non-guests and manageable only by
|
|
865
958
|
organization owners/admins; guest/project-scoped agents never receive them.
|
|
866
959
|
Avatar mutations require both caller and target to belong to the organization
|
|
@@ -220,6 +220,7 @@ bodies, projects only declared public issue fields, preserves nullable
|
|
|
220
220
|
Add with `{ "blockedByIssueId": "uuid" }` or `{ "blockingIssueId": "uuid" }`; snake_case aliases `{ "blocked_by_issue_id": "uuid" }` and `{ "blocking_issue_id": "uuid" }` are also accepted. The blocking issue must belong to a project; a projectless issue may be the blocked target. Optionally include `releaseColumnId` from the blocking project's board columns. Omit it to use the blocking project's `done` column. PATCH the dependency with `{ "releaseColumnId": "uuid" }`. Circular dependencies rejected (400). Duplicates return 409.
|
|
221
221
|
|
|
222
222
|
Dependency reads include each authorized target issue's canonical `identifier` and `projectSlug` when it belongs to a project. Projectless targets have both fields `null`; inaccessible targets remain `issue: null`. Release fields include `releaseColumnId` and the compatibility alias `release_column_id`; POST and PATCH accept either camelCase or snake_case release-column input. Release metadata is present when the blocking issue is authorized; a `blocking` target projection may still be `issue: null` independently.
|
|
223
|
+
Archiving a blocker preserves the dependency edge and configured release column while satisfying the dependency. Restoring it re-evaluates the same release point and can block the dependent again. Configurable release-point and cancelled-blocker behavior are unchanged.
|
|
223
224
|
The dependency-release migration backfills existing dependencies to the
|
|
224
225
|
blocking project's `done` column. During a rolling deployment, compatibility
|
|
225
226
|
reads may omit release fields from older rows; treat missing release metadata as
|
|
@@ -296,10 +297,10 @@ Artifacts.
|
|
|
296
297
|
|
|
297
298
|
| Method | Endpoint | Description |
|
|
298
299
|
| --- | --- | --- |
|
|
299
|
-
| `GET` | `/api/orgs/{id}/artifacts` | List readable artifact metadata and visible links; revision content is omitted; supports `limit` (1-100, default 50) and `offset` (0-10000), and returns `hasMore` |
|
|
300
|
+
| `GET` | `/api/orgs/{id}/artifacts` | List readable artifact metadata and visible links; revision content is omitted; includes `can_edit` and `can_unlink` capabilities; supports `limit` (1-100, default 50) and `offset` (0-10000), and returns `hasMore` |
|
|
300
301
|
| `POST` | `/api/orgs/{id}/artifacts` | Create artifact and immutable revision 1 atomically |
|
|
301
|
-
| `GET` | `/api/orgs/{id}/artifacts/{artifactId}` | Read artifact metadata and visible links |
|
|
302
|
-
| `GET` | `/api/orgs/{id}/artifacts/{artifactId}/revisions` | List immutable revision summaries without content; supports `limit` (1-100, default 50) and `offset
|
|
302
|
+
| `GET` | `/api/orgs/{id}/artifacts/{artifactId}` | Read artifact metadata and visible links, including `can_edit` and `can_unlink` capabilities |
|
|
303
|
+
| `GET` | `/api/orgs/{id}/artifacts/{artifactId}/revisions` | List immutable revision summaries without content; supports `limit` (1-100, default 50) and `offset` (0-10000), and returns `hasMore` |
|
|
303
304
|
| `POST` | `/api/orgs/{id}/artifacts/{artifactId}/revisions` | Create a content revision or title-aware full snapshot with an expected current revision |
|
|
304
305
|
| `GET` | `/api/orgs/{id}/artifacts/{artifactId}/revisions/{revisionId}` | Read one sanitized revision including content |
|
|
305
306
|
| `POST` | `/api/orgs/{id}/artifacts/{artifactId}/links` | Link to an authorized issue or project |
|
|
@@ -425,6 +426,20 @@ references return `409`, and resolver failures return `500`.
|
|
|
425
426
|
|
|
426
427
|
Returns findings only (not the full graph). Use it for a high-level review — orphaned initiatives/KPIs (no goal), goals with no KPI or no initiative, dangling initiative execution links, KPIs missing targets/stale/off-pace, initiatives missing impact/execution or stalled, blocked/overdue work — then remediate with the goal/KPI/initiative write endpoints above. Owners/admins receive organization-wide execution evidence. Other non-guests receive project-bound issues, milestones, target links, and target findings only for readable projects. A restricted member with no readable projects receives no issue or target execution evidence. Forbidden for guests. CLI: `atoll strategy audit [--severity critical|warning|info] [--json]`.
|
|
427
428
|
|
|
429
|
+
## Human attention
|
|
430
|
+
|
|
431
|
+
| Method | Endpoint | Description |
|
|
432
|
+
| --- | --- | --- |
|
|
433
|
+
| `GET` | `/api/orgs/{id}/attention` | List relevant open or closed attention items; supports status, execution, kind, recovery mode, target filters, bounded pagination, and envelope/CLI shape |
|
|
434
|
+
| `POST` | `/api/orgs/{id}/attention` | Request human attention and atomically pause the execution in `needs_human` |
|
|
435
|
+
| `GET` | `/api/orgs/{id}/attention/{attentionId}` | Read one safe attention detail projection |
|
|
436
|
+
| `POST` | `/api/orgs/{id}/attention/{attentionId}/resolve` | Resolve an open item for its eligible human target and leave the execution in `waiting`; a trusted harness performs any later resume |
|
|
437
|
+
| `POST` | `/api/orgs/{id}/attention/{attentionId}/cancel` | Cancel an item as its requesting agent and leave the execution in `waiting`; a trusted harness performs any later resume |
|
|
438
|
+
| `POST` | `/api/orgs/{id}/attention/{attentionId}/admin-cancel` | Cancel an item as an authorized human administrator and leave the execution in `waiting`; a trusted harness performs any later resume |
|
|
439
|
+
| `POST` | `/api/orgs/{id}/attention/{attentionId}/retarget` | Retarget an open item as an authorized human administrator |
|
|
440
|
+
|
|
441
|
+
The create body is strict and requires `execution_id`, `expected_state_version`, `kind`, `title`, `request_summary`, `why_needed`, `resume_condition`, one exact target shape, and `idempotency_key`. Close and retarget bodies require both expected versions. Mutations are idempotent and return `409` for stale versions, invalid lifecycle edges, conflicting keys, or ineligible targets. `mode=recovery` is restricted to authorized human administrators. Text is bounded and secret-safe; public projections omit provenance, hashes, prompts, logs, credentials, and paths.
|
|
442
|
+
|
|
428
443
|
## Heartbeat
|
|
429
444
|
|
|
430
445
|
| Method | Endpoint | Description |
|
|
@@ -455,6 +470,25 @@ atoll heartbeat --severity critical
|
|
|
455
470
|
`atoll heartbeat --signals-only --json` returns filtered `signals`, direct `attention_items`, `attention_summary`, and `recommended_action` for polling agents.
|
|
456
471
|
KPI stale/off-pace signal metadata includes `linked_initiatives` and `recent_attributed_snapshots`; `--explain-kpi` returns that movement context under `kpi_explanation`.
|
|
457
472
|
|
|
473
|
+
## Agent executions
|
|
474
|
+
|
|
475
|
+
| Method | Endpoint | Description |
|
|
476
|
+
| --- | --- | --- |
|
|
477
|
+
| GET | `/api/orgs/{id}/executions` | List executions in the caller's current issue-project scope; non-guest members may also read projectless executions, except setup agents and guests; filters: `issue_id`, `agent_member_id`, `state`, `active`, `harness_kind`, `updated_after`, `limit`, `offset` (maximum 10,000), `shape` |
|
|
478
|
+
| POST | `/api/orgs/{id}/executions` | Create an execution. Strict body; required `idempotency_key`; starts in `assigned` |
|
|
479
|
+
| GET | `/api/orgs/{id}/executions/{executionId}` | Read safe detail, transitions, and evidence projections |
|
|
480
|
+
| POST | `/api/orgs/{id}/executions/{executionId}/transitions` | Version-fenced transition through the shipped lifecycle RPC |
|
|
481
|
+
| GET/POST | `/api/orgs/{id}/executions/{executionId}/evidence` | List or link existing authorized issue evidence |
|
|
482
|
+
|
|
483
|
+
Use `expected_state_version` for follow-up transitions. Generic transitions cannot enter
|
|
484
|
+
or leave `needs_human`; those edges return `ATTENTION_CONTRACT_REQUIRED` and
|
|
485
|
+
belong to the attention contract. Reads use the issue's current project access;
|
|
486
|
+
non-guest members may also read projectless executions, except setup agents and
|
|
487
|
+
guests. Creation-project metadata does not grant access. Unreadable records are
|
|
488
|
+
concealed as `404`; public projections omit hashes, provenance, logs,
|
|
489
|
+
prompts, credentials, and paths. This API records state and does not start or
|
|
490
|
+
resume an underlying harness. There is no issue-specific execution route.
|
|
491
|
+
|
|
458
492
|
## Activity
|
|
459
493
|
|
|
460
494
|
| Method | Endpoint | Description |
|
|
@@ -600,6 +634,10 @@ requests also sweep a small due batch. Uploads over 2MB return `413`.
|
|
|
600
634
|
|
|
601
635
|
Attach PRs manually with a canonical GitHub pull request URL such as `https://github.com/owner/repo/pull/123`; malformed or non-PR URLs return `400`. On attach, Atoll refreshes GitHub metadata when available so title/status/head SHA reflect the PR instead of only the submitted URL. PR links can also be created or refreshed automatically via the GitHub webhook integration.
|
|
602
636
|
|
|
637
|
+
GET returns `id`, `pr_number`, `github_repo`, nullable
|
|
638
|
+
`github_repository_id`, nullable `external_reference_id`, `pr_url`, `pr_title`,
|
|
639
|
+
`pr_status`, nullable `head_sha`, and `updated_at` for each link.
|
|
640
|
+
|
|
603
641
|
For project-bound issues, listing requires project access and attaching requires
|
|
604
642
|
`edit` or `admin` access. Eligible non-guests may list and attach links for
|
|
605
643
|
projectless issues. Authorization is bound to the issue's current parent before
|
|
@@ -613,12 +651,35 @@ child reads or writes and occurs before URL parsing or GitHub metadata lookup.
|
|
|
613
651
|
| POST | `/api/orgs/{id}/issues/{issueId}/external-references` | Resolve and link a GitHub PR |
|
|
614
652
|
| GET | `/api/orgs/{id}/issues/{issueId}/external-references/{referenceId}` | Inspect a linked reference |
|
|
615
653
|
| DELETE | `/api/orgs/{id}/issues/{issueId}/external-references/{referenceId}` | Unlink a reference |
|
|
654
|
+
| GET | `/api/orgs/{id}/issues/{issueId}/external-operational-signals` | Read current exact-head GitHub delivery context |
|
|
616
655
|
| GET | `/api/orgs/{id}/projects/{projectId}/external-references` | List project external references |
|
|
617
656
|
| POST | `/api/orgs/{id}/projects/{projectId}/external-references` | Resolve and link a GitHub PR |
|
|
618
657
|
| GET | `/api/orgs/{id}/projects/{projectId}/external-references/{referenceId}` | Inspect a linked reference |
|
|
619
658
|
| DELETE | `/api/orgs/{id}/projects/{projectId}/external-references/{referenceId}` | Unlink a reference |
|
|
620
659
|
|
|
621
|
-
External Reference POST requests accept `{ "url": "https://github.com/owner/repo/pull/123" }`. They require an authorized GitHub connection and store a reference only when the live response proves numeric immutable repository and pull-request IDs. Missing proof returns `422` with `code: "github_identity_unavailable"`. URLs and caller owner/repo fields are not identity or authorization inputs.
|
|
660
|
+
External Reference POST requests accept `{ "url": "https://github.com/owner/repo/pull/123" }`. They require an authorized GitHub connection and store a reference only when the live response proves numeric immutable repository and pull-request IDs. Missing proof returns `422` with `code: "github_identity_unavailable"`. URLs and caller owner/repo fields are not identity or authorization inputs. Manual PR-link operations remain available without an External Reference; verified delivery projection creates and binds the immutable PR reference. CLI/MCP tools are deferred to a later slice.
|
|
661
|
+
|
|
662
|
+
The external-operational-signals GET returns `{ deliveryContext }` for the
|
|
663
|
+
selected current PR or `null` when there is no PR link. Selection prefers an
|
|
664
|
+
open link, then the latest `updated_at`, then the highest PR number. It contains stable
|
|
665
|
+
repository identity, exact head SHA, current PR/review/configured-workflow
|
|
666
|
+
state, bounded source and provider-event provenance, freshness, a safe strongest
|
|
667
|
+
blocker, and `partial`. Older-head signals are historical. Configured workflows
|
|
668
|
+
are not GitHub branch-protection required checks and report `required: false`.
|
|
669
|
+
Missing current-head review or configured-workflow evidence appears as
|
|
670
|
+
`pending` with null provenance and does not by itself set `partial`. Disabled
|
|
671
|
+
verification stops new projections. Workflow conclusions map `success` or
|
|
672
|
+
`neutral` to `passed`; `cancelled`, `stale`, or `skipped` to `cancelled`; and
|
|
673
|
+
other supported terminal conclusions to `failed`.
|
|
674
|
+
The selected PR-link state is authoritative. If a same-head PR observation
|
|
675
|
+
disagrees, Atoll clears its observation/provider provenance, uses the link URL
|
|
676
|
+
as `source_url`, excludes it from freshness, and sets `partial`.
|
|
677
|
+
Review aggregation keeps each reviewer's latest exact-head opinion, ignores
|
|
678
|
+
comments, and removes dismissed opinions. Change requests win; `approved`
|
|
679
|
+
means at least one effective approval and no effective change request. It does
|
|
680
|
+
not prove required-review counts or branch protection.
|
|
681
|
+
This read-only namespace is separate from heartbeat `signals[]` and does not
|
|
682
|
+
dispatch agents or change tasks.
|
|
622
683
|
|
|
623
684
|
## Project Status Updates
|
|
624
685
|
|
|
@@ -798,6 +859,11 @@ The default new-agent local path (without `setupAgentMemberId`) atomically creat
|
|
|
798
859
|
| POST | `/api/integrations/github/connect` | Connect a repo |
|
|
799
860
|
| POST | `/api/integrations/github/disconnect` | Disconnect a repo |
|
|
800
861
|
|
|
862
|
+
Release-added required hook events mark existing reconciled and already-pending connections pending. A bounded
|
|
863
|
+
15-minute service sweep verifies immutable repository identity and upgrades the
|
|
864
|
+
hooks automatically. Transient failures remain pending for retry; owners and
|
|
865
|
+
admins can also use the reconciliation endpoint.
|
|
866
|
+
|
|
801
867
|
## Platform Feedback
|
|
802
868
|
|
|
803
869
|
### Feedback error contract
|
|
@@ -782,6 +782,30 @@ The opt-in issue manifest contains only `id`, `type`, `title`,
|
|
|
782
782
|
Implementation Plan links are limited to one slot per issue, and each such
|
|
783
783
|
Artifact can be authoritative for only one issue.
|
|
784
784
|
|
|
785
|
+
Artifact list and detail responses also include `can_edit` and `can_unlink`.
|
|
786
|
+
`can_edit` is true when the current member can create a revision. `can_unlink`
|
|
787
|
+
is true when the current member can remove a visible link; removing a final link
|
|
788
|
+
requires owner or admin access, while a member with write access can remove a
|
|
789
|
+
link when another link remains.
|
|
790
|
+
|
|
791
|
+
## Agent execution fields
|
|
792
|
+
|
|
793
|
+
Execution projections contain `id`, `issue_id`, `current_project_id`,
|
|
794
|
+
`project_id_at_creation` (provenance only), normalized `state`, `state_version`,
|
|
795
|
+
bounded lifecycle summaries, safe harness/external-run metadata, timestamps,
|
|
796
|
+
and actor objects `{ id, display_name, type, deleted }`. `harness_kind` and
|
|
797
|
+
`external_run_id` reject credentials, tokens, and local filesystem paths;
|
|
798
|
+
legacy unsafe values are redacted as `null` in projections. Deleted agent or actor
|
|
799
|
+
rows use immutable AH-2095 snapshots. Detail adds ordered `transitions` and
|
|
800
|
+
existing `evidence` references `{ id, issue_id, link_type, target_id,
|
|
801
|
+
created_by, created_at }`.
|
|
802
|
+
|
|
803
|
+
Create requires `issue_id`, `agent_member_id`, and `idempotency_key`; it always
|
|
804
|
+
returns state `assigned`. Transition requires `expected_state_version`,
|
|
805
|
+
`to_state`, and `idempotency_key`. HTTP bodies are strict and omit actor
|
|
806
|
+
provenance; the server derives safe OAuth provenance. The generic transition
|
|
807
|
+
enum excludes `needs_human`.
|
|
808
|
+
|
|
785
809
|
## Analytics Response
|
|
786
810
|
|
|
787
811
|
```json
|
|
@@ -795,6 +819,28 @@ Artifact can be authoritative for only one issue.
|
|
|
795
819
|
|
|
796
820
|
---
|
|
797
821
|
|
|
822
|
+
## Human attention fields
|
|
823
|
+
|
|
824
|
+
Attention list/detail projections contain `id`, `status` (`open`, `resolved`, or
|
|
825
|
+
`cancelled`), `kind` (`approval`, `clarification`, `access`, `decision`,
|
|
826
|
+
`destructive_action`, or `other`), bounded `title`, `request_summary`,
|
|
827
|
+
`why_needed`, `resume_condition`, `requested_at`, `closed_at`,
|
|
828
|
+
`resolution_outcome`, `resolution_summary`, `attention_version`, and the
|
|
829
|
+
execution, issue, and project projections. `target` contains the exact target
|
|
830
|
+
type plus a live member/team projection when it still exists and immutable
|
|
831
|
+
snapshot fields. `requester` and `closed_by` contain `{ id, display_name,
|
|
832
|
+
type, deleted }` snapshots. Detail adds
|
|
833
|
+
`execution_state_version_at_request` and `execution_state_version_at_close`.
|
|
834
|
+
|
|
835
|
+
Create targets are one of `{ target_type: "member", target_member_id }`,
|
|
836
|
+
`{ target_type: "team", target_team_id }`, or
|
|
837
|
+
`{ target_type: "project_admins" }`. Mutation requests use
|
|
838
|
+
`expected_attention_version`, `expected_state_version`, and
|
|
839
|
+
`idempotency_key`; resolve also accepts `resolution_outcome` and an optional
|
|
840
|
+
bounded `resolution_summary`. Free-form text rejects secret-like values.
|
|
841
|
+
Internal requester/actor provenance, hashes, response snapshots, and mutation
|
|
842
|
+
metadata are never returned by the public API.
|
|
843
|
+
|
|
798
844
|
## Enums
|
|
799
845
|
|
|
800
846
|
| Domain | Field | Values |
|
|
@@ -876,7 +922,9 @@ be the blocked target when the caller has permission to use it.
|
|
|
876
922
|
| `releaseColumnId` | UUID | Persistent release column in the blocking issue's project; present when the blocking issue is authorized |
|
|
877
923
|
| `release_column_id` | UUID | Compatibility alias for `releaseColumnId`; present with the canonical field |
|
|
878
924
|
| `releaseColumn` | object or null | `{ id, key, label, position, projectId }` release column projection |
|
|
879
|
-
| `satisfied` | boolean or null | Whether the blocker reached the release column position
|
|
925
|
+
| `satisfied` | boolean or null | Whether the blocker is archived or cancelled, or reached the release column position |
|
|
926
|
+
|
|
927
|
+
Archiving a blocker preserves the dependency edge and configured release column while satisfying the dependency. Restoring it re-evaluates that same release point and can block the dependent again. Configurable release-point and cancelled-blocker behavior are unchanged.
|
|
880
928
|
|
|
881
929
|
The dependency-release migration backfills existing dependencies to the
|
|
882
930
|
blocking project's `done` column. During a rolling deployment, compatibility
|
|
@@ -898,6 +946,35 @@ provider response or return `422` with
|
|
|
898
946
|
metadata-only Activity actions `external_reference.linked`,
|
|
899
947
|
`external_reference.updated`, or `external_reference.unlinked`.
|
|
900
948
|
|
|
949
|
+
### External operational delivery context
|
|
950
|
+
|
|
951
|
+
`GET /api/orgs/{id}/issues/{issueId}/external-operational-signals` returns
|
|
952
|
+
`{ deliveryContext }`. The value is `null` without a linked PR. With several
|
|
953
|
+
links, selection prefers an open PR, then the latest `updated_at`, then the
|
|
954
|
+
highest PR number. Otherwise it
|
|
955
|
+
contains `repository`, `pull_request`, nullable `review`, `workflows`,
|
|
956
|
+
`freshness`, nullable `strongest_blocker`, and `partial`. PR, review, and
|
|
957
|
+
workflow evidence includes nullable `observed_at`, `provider_updated_at`,
|
|
958
|
+
`provider_event_id`, and `source_url`. The PR includes the exact `head_sha`.
|
|
959
|
+
Review state is `pending`, `approved`, or `changes_requested`; workflow state is
|
|
960
|
+
`pending`, `passed`, `failed`, or `cancelled`. Older-head evidence is not
|
|
961
|
+
current. Workflow `required` is always `false` because configured workflow
|
|
962
|
+
paths do not prove GitHub branch protection. Raw payloads, review bodies,
|
|
963
|
+
actors, logs, and credentials are excluded. A `pending` review or workflow with
|
|
964
|
+
null provenance has no current-head observation; this absence does not by
|
|
965
|
+
itself set `partial`. Disabled verification stops new projections. Workflow
|
|
966
|
+
conclusions map `success`/`neutral` to `passed`,
|
|
967
|
+
`cancelled`/`stale`/`skipped` to `cancelled`, and other supported terminal
|
|
968
|
+
conclusions to `failed`.
|
|
969
|
+
The selected PR-link state is authoritative. If a same-head PR observation
|
|
970
|
+
disagrees, its `observed_at`, `provider_updated_at`, and `provider_event_id` are
|
|
971
|
+
null, `source_url` uses the link URL, the observation is excluded from
|
|
972
|
+
`freshness`, and `partial` is true.
|
|
973
|
+
Review aggregation keeps each reviewer's latest exact-head opinion, ignores
|
|
974
|
+
comments, and removes dismissed opinions. Change requests win; `approved`
|
|
975
|
+
means at least one effective approval and no effective change request. It does
|
|
976
|
+
not prove required-review counts or branch protection.
|
|
977
|
+
|
|
901
978
|
## Task Activity
|
|
902
979
|
|
|
903
980
|
`GET /api/orgs/{id}/activity` returns `{ data, currentMemberId, limit, offset,
|