Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions docs/developer/diagnostics.md
Original file line number Diff line number Diff line change
Expand Up @@ -88,13 +88,13 @@ linux_tracing:

## Per-Run Enablement

By default, `post_run_diagnostics` resolves from `diagnostics.post_run_analysis` (shipped
By default, `pipeline_health` resolves from `diagnostics.pipeline_health` (shipped
default: `false`). To enable diagnostics for a single run, the orchestrator can pass
`overrides={"post_run_diagnostics": "true"}` to `open_kitchen`. The override takes effect
`overrides={"pipeline_health": "true"}` to `open_kitchen`. The override takes effect
for that kitchen session only and does not modify the persistent config.

The orchestrator can also lock the value for the session via
`lock_ingredients(locked={"post_run_diagnostics": "true"})` to ensure it is not overridden
`lock_ingredients(locked={"pipeline_health": "true"})` to ensure it is not overridden
by downstream steps.

For post-hoc diagnostics on a completed run, use:
Expand Down
2 changes: 1 addition & 1 deletion src/autoskillit/config/_config_dataclasses.py
Original file line number Diff line number Diff line change
Expand Up @@ -305,7 +305,7 @@ class LoggingConfig:

@dataclass
class DiagnosticsConfig:
post_run_analysis: bool = False
pipeline_health: bool = False


@dataclass
Expand Down
2 changes: 1 addition & 1 deletion src/autoskillit/config/defaults.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ logging:
json_output: null

diagnostics:
post_run_analysis: false
pipeline_health: false

linux_tracing:
enabled: true
Expand Down
6 changes: 3 additions & 3 deletions src/autoskillit/config/ingredient_defaults.py
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ def iter_display_categories(

SERVER_AUTHORITATIVE_KEY_HINTS: dict[str, str] = {}

CONFIG_DEFAULT_INGREDIENTS: frozenset[str] = frozenset({"post_run_diagnostics"})
CONFIG_DEFAULT_INGREDIENTS: frozenset[str] = frozenset({"pipeline_health"})


def build_config_default_layer(defaults: dict[str, str]) -> dict[str, str]:
Expand Down Expand Up @@ -169,13 +169,13 @@ def resolve_ingredient_defaults(project_dir: Path) -> dict[str, str]:
resolved["base_branch"] = cfg.branching.default_base_branch
resolved["local_review_rounds"] = str(cfg.review.local_review_rounds)
resolved["adversarial_review_level"] = cfg.plan.adversarial_review_level
resolved["post_run_diagnostics"] = str(cfg.diagnostics.post_run_analysis).lower()
resolved["pipeline_health"] = str(cfg.diagnostics.pipeline_health).lower()
except Exception:
logger.warning("resolve_base_branch_failed", exc_info=True)
resolved["base_branch"] = "main"
resolved["local_review_rounds"] = "0"
resolved["adversarial_review_level"] = "auto"
resolved["post_run_diagnostics"] = "false"
resolved["pipeline_health"] = "false"

# Fleet dispatch detection β€” reads env vars, not config, so must run unconditionally.
resolved["is_fleet_dispatch"] = "true" if os.environ.get(DISPATCH_ID_ENV_VAR) else "false"
Expand Down
27 changes: 27 additions & 0 deletions src/autoskillit/migrations/0.10.884-to-0.10.885.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
from_version: "0.10.884"
to_version: "0.10.885"
description: >
Diagnostics configuration rename: diagnostics.post_run_analysis is now
diagnostics.pipeline_health.
changes:
- id: diagnostics-post-run-analysis-to-pipeline-health
description: >
The diagnostics.post_run_analysis config key has been renamed to
diagnostics.pipeline_health. The value and default behavior are unchanged.
instruction: |
In your user or project .autoskillit/config.yaml, replace:
diagnostics:
post_run_analysis: true
with:
diagnostics:
pipeline_health: true
Preserve the configured boolean value. The old 'post_run_analysis' key is
no longer recognized and will raise a ConfigSchemaError at startup.
detect:
key: diagnostics.post_run_analysis
example_before: |
diagnostics:
post_run_analysis: true
example_after: |
diagnostics:
pipeline_health: true
4 changes: 2 additions & 2 deletions src/autoskillit/recipes/campaigns/promote-to-main.json
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@
"default": "200000",
"hidden": true
},
"post_run_diagnostics": {
"pipeline_health": {
"description": "Run diagnostic analysis after pipeline completion",
"default": "false",
"hidden": true
Expand Down Expand Up @@ -132,7 +132,7 @@
"name": "consolidate-diagnostics",
"recipe": "consolidate-health-reports",
"task": "Consolidate pipeline health reports from all dispatches in this campaign.",
"skip_when": "${{ inputs.post_run_diagnostics }} == false",
"skip_when": "${{ inputs.pipeline_health }} == false",
"ingredients": {
"kitchen_id": "${{ inputs.kitchen_id }}",
"diagnostics_log_dir": "${{ inputs.diagnostics_log_dir }}"
Expand Down
4 changes: 2 additions & 2 deletions src/autoskillit/recipes/campaigns/promote-to-main.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ ingredients:
description: "Model context window in tokens; set to 1000000 for Opus 1M"
default: "200000"
hidden: true
post_run_diagnostics:
pipeline_health:
description: Run diagnostic analysis after pipeline completion
default: "false"
hidden: true
Expand Down Expand Up @@ -110,7 +110,7 @@ dispatches:
- name: consolidate-diagnostics
recipe: consolidate-health-reports
task: "Consolidate pipeline health reports from all dispatches in this campaign."
skip_when: "${{ inputs.post_run_diagnostics }} == false"
skip_when: "${{ inputs.pipeline_health }} == false"
ingredients:
kitchen_id: "${{ inputs.kitchen_id }}"
diagnostics_log_dir: "${{ inputs.diagnostics_log_dir }}"
Expand Down
2 changes: 1 addition & 1 deletion src/autoskillit/recipes/diagrams/implementation-groups.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<!-- autoskillit-recipe-hash: sha256:8a73b507ae7ff151ef381c119f0cf3afdbda8d95ba7a84caa312685770dd139c -->
<!-- autoskillit-recipe-hash: sha256:cc763bd472bb20adaa73a267b18890541d8833a53bb0b5e940c9db32a4e25bc3 -->
<!-- autoskillit-diagram-format: v7 -->
## implementation-groups

Expand Down
2 changes: 1 addition & 1 deletion src/autoskillit/recipes/diagrams/implementation.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<!-- autoskillit-recipe-hash: sha256:74eef5daa21fc9b155113bba7520513930ddb3c775204b2441099e58fb2d8c55 -->
<!-- autoskillit-recipe-hash: sha256:1035c0e666dbdc502ec7f2f9b82099da79b156a9be494b672153b09e345be28f -->
<!-- autoskillit-diagram-format: v7 -->
## implementation

Expand Down
2 changes: 1 addition & 1 deletion src/autoskillit/recipes/diagrams/merge-prs.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<!-- autoskillit-recipe-hash: sha256:c3ce9a46c00259a7ec0e7ba19aea8d03586bea1d3ab470a92a4bca2f2eac1c36 -->
<!-- autoskillit-recipe-hash: sha256:467b5e27dd1d2e74999c98918afe258437be79ca6be3fcad49bb3b09aba0cbdd -->
<!-- autoskillit-diagram-format: v7 -->
## merge-prs
Merge multiple PRs into an integration branch with conflict resolution and CI gates.
Expand Down
2 changes: 1 addition & 1 deletion src/autoskillit/recipes/diagrams/remediation.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<!-- autoskillit-recipe-hash: sha256:516fc419f800266de988df863dedcfcefc9591898b51f7a5e5e90d96218a0b76 -->
<!-- autoskillit-recipe-hash: sha256:5f3f1e229f1bb787263f1c2892cf8a4dfd9c73dc42c5bc01682f27e576edd6b7 -->
<!-- autoskillit-diagram-format: v7 -->
## remediation

Expand Down
42 changes: 21 additions & 21 deletions src/autoskillit/recipes/implementation-groups.json
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@
"default": "false",
"hidden": true
},
"post_run_diagnostics": {
"pipeline_health": {
"description": "Run diagnostic analysis after pipeline completion",
"default": "false",
"hidden": true
Expand Down Expand Up @@ -1605,20 +1605,20 @@
"status": "error",
"step_name": "register_clone_no_ci"
},
"on_success": "run_diagnostic_no_ci",
"on_failure": "run_diagnostic_no_ci"
"on_success": "analyze_pipeline_health_no_ci",
"on_failure": "analyze_pipeline_health_no_ci"
},
"run_diagnostic_no_ci": {
"analyze_pipeline_health_no_ci": {
"description": "Run post-pipeline diagnostic analysis on session logs (no-CI path)",
"tool": "run_skill",
"model": "",
"stale_threshold": 2400,
"optional": true,
"skip_when_false": "inputs.post_run_diagnostics",
"skip_when_false": "inputs.pipeline_health",
"with": {
"skill_command": "/autoskillit:analyze-pipeline-health ${{ inputs.kitchen_id }} --dispatch-id=${{ inputs.dispatch_id }} --diagnostics-log-dir=${{ inputs.diagnostics_log_dir }}",
"cwd": "${{ context.work_dir }}",
"step_name": "post_run_diagnostics"
"step_name": "analyze_pipeline_health"
},
"on_success": "escalate_stop_no_ci",
"on_failure": "escalate_stop_no_ci",
Expand Down Expand Up @@ -2518,21 +2518,21 @@
"status": "unconfirmed",
"step_name": "register_clone_unconfirmed"
},
"on_success": "run_diagnostic_unconfirmed",
"on_failure": "run_diagnostic_unconfirmed",
"on_success": "analyze_pipeline_health_unconfirmed",
"on_failure": "analyze_pipeline_health_unconfirmed",
"note": "Called when a merge-wait step times out before merge is confirmed. Does NOT call release_issue β€” the in-progress label stays on the issue so operators can see the PR is still actively queued. The clone is preserved (status: unconfirmed) for human inspection.\n"
},
"run_diagnostic_unconfirmed": {
"analyze_pipeline_health_unconfirmed": {
"description": "Run post-pipeline diagnostic analysis (unconfirmed path)",
"tool": "run_skill",
"model": "",
"stale_threshold": 2400,
"optional": true,
"skip_when_false": "inputs.post_run_diagnostics",
"skip_when_false": "inputs.pipeline_health",
"with": {
"skill_command": "/autoskillit:analyze-pipeline-health ${{ inputs.kitchen_id }} --dispatch-id=${{ inputs.dispatch_id }} --diagnostics-log-dir=${{ inputs.diagnostics_log_dir }}",
"cwd": "${{ context.work_dir }}",
"step_name": "post_run_diagnostics"
"step_name": "analyze_pipeline_health"
},
"on_success": "done_unconfirmed",
"on_failure": "done_unconfirmed",
Expand Down Expand Up @@ -2634,20 +2634,20 @@
"status": "success",
"step_name": "register_clone_success"
},
"on_success": "run_diagnostic",
"on_failure": "run_diagnostic"
"on_success": "analyze_pipeline_health",
"on_failure": "analyze_pipeline_health"
},
"run_diagnostic": {
"analyze_pipeline_health": {
"description": "Run post-pipeline diagnostic analysis on session logs",
"tool": "run_skill",
"model": "",
"stale_threshold": 2400,
"optional": true,
"skip_when_false": "inputs.post_run_diagnostics",
"skip_when_false": "inputs.pipeline_health",
"with": {
"skill_command": "/autoskillit:analyze-pipeline-health ${{ inputs.kitchen_id }} --dispatch-id=${{ inputs.dispatch_id }} --diagnostics-log-dir=${{ inputs.diagnostics_log_dir }}",
"cwd": "${{ context.work_dir }}",
"step_name": "post_run_diagnostics"
"step_name": "analyze_pipeline_health"
},
"on_success": "done",
"on_failure": "done",
Expand All @@ -2663,20 +2663,20 @@
"status": "error",
"step_name": "register_clone_failure"
},
"on_success": "run_diagnostic_error",
"on_failure": "run_diagnostic_error"
"on_success": "analyze_pipeline_health_error",
"on_failure": "analyze_pipeline_health_error"
},
"run_diagnostic_error": {
"analyze_pipeline_health_error": {
"description": "Run post-pipeline diagnostic analysis on session logs (error path)",
"tool": "run_skill",
"model": "",
"stale_threshold": 2400,
"optional": true,
"skip_when_false": "inputs.post_run_diagnostics",
"skip_when_false": "inputs.pipeline_health",
"with": {
"skill_command": "/autoskillit:analyze-pipeline-health ${{ inputs.kitchen_id }} --dispatch-id=${{ inputs.dispatch_id }} --diagnostics-log-dir=${{ inputs.diagnostics_log_dir }}",
"cwd": "${{ context.work_dir }}",
"step_name": "post_run_diagnostics"
"step_name": "analyze_pipeline_health"
},
"on_success": "escalate_stop",
"on_failure": "escalate_stop",
Expand Down
43 changes: 21 additions & 22 deletions src/autoskillit/recipes/implementation-groups.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ ingredients:
description: "Set to 'true' when process-issues has already claimed this issue upfront. Allows claim_issue defense step to pass through without aborting."
default: "false"
hidden: true
post_run_diagnostics:
pipeline_health:
description: Run diagnostic analysis after pipeline completion
default: 'false'
hidden: true
Expand Down Expand Up @@ -1440,21 +1440,21 @@ steps:
clone_path: "${{ context.work_dir }}"
status: "error"
step_name: register_clone_no_ci
on_success: run_diagnostic_no_ci
on_failure: run_diagnostic_no_ci
on_success: analyze_pipeline_health_no_ci
on_failure: analyze_pipeline_health_no_ci

run_diagnostic_no_ci:
analyze_pipeline_health_no_ci:
description: Run post-pipeline diagnostic analysis on session logs (no-CI path)
tool: run_skill
model: ''
stale_threshold: 2400
optional: true
skip_when_false: inputs.post_run_diagnostics
skip_when_false: inputs.pipeline_health
with:
skill_command: /autoskillit:analyze-pipeline-health ${{ inputs.kitchen_id }}
--dispatch-id=${{ inputs.dispatch_id }} --diagnostics-log-dir=${{ inputs.diagnostics_log_dir }}
cwd: ${{ context.work_dir }}
step_name: post_run_diagnostics
step_name: analyze_pipeline_health
on_success: escalate_stop_no_ci
on_failure: escalate_stop_no_ci
on_context_limit: escalate_stop_no_ci
Expand Down Expand Up @@ -2252,26 +2252,26 @@ steps:
clone_path: "${{ context.work_dir }}"
status: "unconfirmed"
step_name: register_clone_unconfirmed
on_success: run_diagnostic_unconfirmed
on_failure: run_diagnostic_unconfirmed
on_success: analyze_pipeline_health_unconfirmed
on_failure: analyze_pipeline_health_unconfirmed
note: >
Called when a merge-wait step times out before merge is confirmed.
Does NOT call release_issue β€” the in-progress label stays on the issue
so operators can see the PR is still actively queued. The clone is
preserved (status: unconfirmed) for human inspection.

run_diagnostic_unconfirmed:
analyze_pipeline_health_unconfirmed:
description: Run post-pipeline diagnostic analysis (unconfirmed path)
tool: run_skill
model: ''
stale_threshold: 2400
optional: true
skip_when_false: inputs.post_run_diagnostics
skip_when_false: inputs.pipeline_health
with:
skill_command: /autoskillit:analyze-pipeline-health ${{ inputs.kitchen_id }}
--dispatch-id=${{ inputs.dispatch_id }} --diagnostics-log-dir=${{ inputs.diagnostics_log_dir }}
cwd: ${{ context.work_dir }}
step_name: post_run_diagnostics
step_name: analyze_pipeline_health
on_success: done_unconfirmed
on_failure: done_unconfirmed
on_context_limit: done_unconfirmed
Expand Down Expand Up @@ -2390,21 +2390,21 @@ steps:
clone_path: "${{ context.work_dir }}"
status: "success"
step_name: register_clone_success
on_success: run_diagnostic
on_failure: run_diagnostic
on_success: analyze_pipeline_health
on_failure: analyze_pipeline_health

run_diagnostic:
analyze_pipeline_health:
description: Run post-pipeline diagnostic analysis on session logs
tool: run_skill
model: ''
stale_threshold: 2400
optional: true
skip_when_false: inputs.post_run_diagnostics
skip_when_false: inputs.pipeline_health
with:
skill_command: /autoskillit:analyze-pipeline-health ${{ inputs.kitchen_id }}
--dispatch-id=${{ inputs.dispatch_id }} --diagnostics-log-dir=${{ inputs.diagnostics_log_dir }}
cwd: ${{ context.work_dir }}
step_name: post_run_diagnostics
step_name: analyze_pipeline_health
on_success: done
on_failure: done
on_context_limit: done
Expand All @@ -2420,21 +2420,21 @@ steps:
clone_path: "${{ context.work_dir }}"
status: "error"
step_name: register_clone_failure
on_success: run_diagnostic_error
on_failure: run_diagnostic_error
on_success: analyze_pipeline_health_error
on_failure: analyze_pipeline_health_error

run_diagnostic_error:
analyze_pipeline_health_error:
description: Run post-pipeline diagnostic analysis on session logs (error path)
tool: run_skill
model: ''
stale_threshold: 2400
optional: true
skip_when_false: inputs.post_run_diagnostics
skip_when_false: inputs.pipeline_health
with:
skill_command: /autoskillit:analyze-pipeline-health ${{ inputs.kitchen_id }}
--dispatch-id=${{ inputs.dispatch_id }} --diagnostics-log-dir=${{ inputs.diagnostics_log_dir }}
cwd: ${{ context.work_dir }}
step_name: post_run_diagnostics
step_name: analyze_pipeline_health
on_success: escalate_stop
on_failure: escalate_stop
on_context_limit: escalate_stop
Expand All @@ -2455,4 +2455,3 @@ steps:
Pipeline failed β€” human intervention needed. Check the worktree and plan for details.
Emit the L3 result sentinel JSON block now with success=false.
Example sentinel: {"success": false, "reason": "implementation-groups pipeline failed"}

Loading
Loading