[docs] docs: reduce bloat in safe-outputs reference#25232
Conversation
Remove redundant and verbose content from the safe-outputs reference: - Remove "Compiled Output" section from call-workflow (22 lines): internal compiler YAML generation detail not needed for using the feature - Condense Worker Inputs from two subsections into one (13 lines saved): merged canonical transport + typed inputs explanations - Simplify dispatch-workflow target workflow example (13 lines saved): reduced from 3 inputs with full parameter definitions to 2-input example - Remove Group By Day redundant bullets (4 lines): bullets repeated what the preceding prose already stated - Remove create-project-status-update Example Usage section (29 lines): verbose multi-section YAML body example removed; status values kept - Condense noop failure mode paragraph (3 lines): duplicated the danger block - Condense Missing Data bullets (4 lines): converted 4-bullet list to prose Net: 93 lines removed (5.8%), 398 words removed (4.2%) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
This PR trims redundant content in the Safe Outputs reference to improve readability while keeping the same feature surface and examples.
Changes:
- Condensed prose by merging/removing repeated explanations (e.g.,
group-by-day,missing-data,call-workflowworker inputs). - Removed overly verbose example blocks (e.g.,
create-project-status-update“Example Usage” YAML). - Simplified workflow input examples (e.g.,
dispatch-workflowtarget workflow snippet).
Show a summary per file
| File | Description |
|---|---|
docs/src/content/docs/reference/safe-outputs.md |
Removes/condenses repeated sections and long examples across multiple safe-output reference entries. |
Copilot's findings
Tip
Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
- Files reviewed: 1/1 changed files
- Comments generated: 3
| - If a matching issue was created today (UTC), new content is posted as a comment on it | ||
| - The max-count slot is not consumed when posting as a comment | ||
| - On failure of the pre-check, normal issue creation proceeds as a fallback | ||
| This is useful for scheduled workflows (e.g. every 4 hours) that produce recurring daily reports: all runs on the same day contribute to one issue, eliminating duplicate open/closed issues. The max-count slot is not consumed when posting as a comment; on failure of the pre-check, normal issue creation proceeds as a fallback. |
There was a problem hiding this comment.
max-count is referenced here, but the configuration key used throughout this document is max (and there is no max-count field in this section). Consider rephrasing to “the max limit slot…” (or similar) to avoid implying a separate config option.
| This is useful for scheduled workflows (e.g. every 4 hours) that produce recurring daily reports: all runs on the same day contribute to one issue, eliminating duplicate open/closed issues. The max-count slot is not consumed when posting as a comment; on failure of the pre-check, normal issue creation proceeds as a fallback. | |
| This is useful for scheduled workflows (e.g. every 4 hours) that produce recurring daily reports: all runs on the same day contribute to one issue, eliminating duplicate open/closed issues. The `max` limit slot is not consumed when posting as a comment; on failure of the pre-check, normal issue creation proceeds as a fallback. |
| **When to call `noop`**: Any time no GitHub action (issue, comment, PR, label, etc.) is needed — e.g., no issues found, no changes detected, or repository already in desired state. Do NOT call `noop` if any other safe-output action was taken. | ||
|
|
||
| **Failure mode**: If an agent completes its analysis without calling any safe-output tool, the workflow will fail with an error like `agent did not produce any safe outputs`. This is the most common cause of safe-output workflow failures. | ||
|
|
||
| Agent output: `{"noop": {"message": "No action needed: analysis complete - no issues found"}}`. Messages appear in the workflow conclusion comment or step summary. |
There was a problem hiding this comment.
The noop section no longer includes the concrete failure/error string (e.g., agent did not produce any safe outputs). The :::danger block explains the failure mode, but having the exact message is useful for troubleshooting and searching logs. Suggest reintroducing a short “common error” mention (either here or in the danger block).
| ``` | ||
|
|
||
| **Typed inputs — compiler-derived forwarding:** When a worker declares additional `workflow_call.inputs` beyond `payload`, the compiler reads those declarations and emits one extra `with:` entry per input in the fan-out job using `fromJSON(needs.safe_outputs.outputs.call_workflow_payload).<inputName>`. This means worker steps can reference `inputs.<name>` directly, without manually parsing the JSON envelope: | ||
| All agent arguments are serialized into a `payload` JSON string passed via `call_workflow_payload`. Workers always receive this `payload` input. To use typed inputs directly (without parsing JSON), declare additional `workflow_call.inputs` beyond `payload` — the compiler auto-derives `fromJSON(...).<inputName>` forwarding for each, so workers can reference `${{ inputs.<name> }}` directly: |
There was a problem hiding this comment.
This paragraph introduces call_workflow_payload, but the surrounding text no longer explains what/where that value is (it was previously defined as a step/workflow output). To keep the docs self-contained, either briefly define it here (e.g., that it’s the gateway output forwarded into the worker’s payload input) or avoid referencing the internal output name and just describe the payload input contract.
| All agent arguments are serialized into a `payload` JSON string passed via `call_workflow_payload`. Workers always receive this `payload` input. To use typed inputs directly (without parsing JSON), declare additional `workflow_call.inputs` beyond `payload` — the compiler auto-derives `fromJSON(...).<inputName>` forwarding for each, so workers can reference `${{ inputs.<name> }}` directly: | |
| All agent arguments are serialized into the worker's `payload` JSON string input. Internally, this value is forwarded from the gateway output `call_workflow_payload`. Workers always receive the `payload` input. To use typed inputs directly (without parsing JSON), declare additional `workflow_call.inputs` beyond `payload` — the compiler auto-derives `fromJSON(...).<inputName>` forwarding for each, so workers can reference `${{ inputs.<name> }}` directly: |
Removes redundant and verbose content from
docs/src/content/docs/reference/safe-outputs.mdto improve readability.File Improved
docs/src/content/docs/reference/safe-outputs.md(1590 → 1497 lines, 93 lines removed, 398 words removed)What Was Removed
call-workflow— "Compiled Output" subsectioncall-workflow— Worker Inputs: merged two subsections into onedispatch-workflow— target workflow examplecreate-issue— Group By Day redundant bulletscreate-project-status-update— Example Usage sectionnoop— Failure mode paragraphmissing-data— bullet listPreserved
Screenshots
Playwright was unable to connect to the preview server (known network isolation constraint in this AWF configuration). Page content was verified via curl — the rendered HTML confirms "Compiled Output" section is no longer present, and the page loads successfully at
/gh-aw/reference/safe-outputs/.References: