Skip to content

feat(triage): use validation_loop.schema for output schema resolution#9

Merged
ggallen merged 1 commit into
mainfrom
use-validation-loop-schema
Jul 1, 2026
Merged

feat(triage): use validation_loop.schema for output schema resolution#9
ggallen merged 1 commit into
mainfrom
use-validation-loop-schema

Conversation

@ggallen

@ggallen ggallen commented Jul 1, 2026

Copy link
Copy Markdown
Member

Summary

  • Moves the output schema from env.runner.FULLSEND_OUTPUT_SCHEMA to the new validation_loop.schema field
  • Enables schema resolution via fetchBaseFile when the harness is loaded from a URL (config-driven agent registration, ADR-0058)
  • Removes the env: block entirely since FULLSEND_OUTPUT_SCHEMA was its only entry

Context

When a harness is loaded from a URL, ${FULLSEND_DIR} doesn't resolve to a meaningful local path, so the schema file is silently skipped. The new validation_loop.schema field (added in fullsend PR #2851) is resolved using the same fetchBaseFile mechanism as validation_loop.script, which correctly fetches and caches the file from the URL base.

Dependencies

Requires fullsend release with PR #2851 (validation_loop.schema support).

Test plan

  • Test via ggallen-sandbox config-driven triage run
  • Verify schema is fetched from URL and uploaded to sandbox
  • Verify validation loop uses the schema correctly

🤖 Generated with Claude Code

Move the output schema from env.runner.FULLSEND_OUTPUT_SCHEMA to the new
validation_loop.schema field. This allows the schema to be resolved via
fetchBaseFile when the harness is loaded from a URL, fixing schema
validation for config-driven agent registration (ADR-0058).

The env.runner block is removed entirely as FULLSEND_OUTPUT_SCHEMA was
its only entry.

Requires fullsend >= v0.X with PR #2851 (validation_loop.schema support).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Greg Allen <gallen@redhat.com>
@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

Use validation_loop.schema for triage output schema resolution

🐞 Bug fix ⚙️ Configuration changes 🕐 10-20 Minutes

Grey Divider

AI Description

• Move triage output schema config to validation_loop.schema for consistent schema resolution.
• Fix schema loading when the harness is fetched from a URL via fetchBaseFile.
• Remove the env.runner FULLSEND_OUTPUT_SCHEMA block since it is no longer needed.
Diagram

graph TD
  A[/"harness/triage.yaml"/] --> B["Harness loader"] --> C["fetchBaseFile"] --> D[("File cache")] --> E["Validation loop"] --> F["Schema validation"]
  G{{"Harness URL"}} --> B
  subgraph Legend
    direction LR
    _cfg[/"Config file"/] ~~~ _svc["Component"] ~~~ _ext{{"External source"}} ~~~ _cache[("Cache")]
  end
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Keep FULLSEND_OUTPUT_SCHEMA but resolve it via fetchBaseFile
  • ➕ Avoids requiring fullsend PR #2851 support in configs
  • ➕ Keeps schema configuration centralized under env.runner
  • ➖ Continues relying on env substitution semantics that break in URL-based harness loading contexts
  • ➖ Duplicates resolution logic that validation_loop.schema already standardizes
2. Embed schema inline in config (no external file)
  • ➕ Eliminates file fetching/caching concerns entirely
  • ➕ Works uniformly for local and URL-loaded harnesses
  • ➖ Large/verbose YAML; hard to review and maintain schema changes
  • ➖ Schema reuse across harnesses becomes difficult

Recommendation: Prefer the PR’s approach: using validation_loop.schema aligns schema resolution with validation_loop.script and leverages the existing fetchBaseFile + caching path for URL-loaded harnesses. The alternatives either reintroduce URL-resolution pitfalls (env-based) or create maintainability issues (inline schema).

Files changed (1) +1 / -4

Other (1) +1 / -4
triage.yamlDefine output schema via validation_loop.schema and remove env.runner override +1/-4

Define output schema via validation_loop.schema and remove env.runner override

• Adds validation_loop.schema pointing at schemas/triage-result.schema.json so schema resolution uses the same base-file fetching behavior as the validation script. Removes the env.runner.FULLSEND_OUTPUT_SCHEMA block since it was the only env entry and does not resolve correctly for URL-loaded harnesses.

harness/triage.yaml

@ggallen ggallen merged commit 8a62b1f into main Jul 1, 2026
3 checks passed
@fullsend-ai-review

fullsend-ai-review Bot commented Jul 1, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 7:20 PM UTC · Completed 7:23 PM UTC
Commit: 4d5fec5 · View workflow run →

@fullsend-ai-review

Copy link
Copy Markdown

Review skipped — this PR is already merged.

The /fs-review command only reviews open pull requests.

Posted by fullsend pre-review check

@qodo-code-review

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (0) 📎 Requirement gaps (0)

Grey Divider

Great, no issues found!

Qodo reviewed your code and found no material issues that require review

Grey Divider

Qodo Logo

@fullsend-ai-retro

fullsend-ai-retro Bot commented Jul 1, 2026

Copy link
Copy Markdown

🤖 Finished Retro · ✅ Success · Started 7:23 PM UTC · Completed 7:28 PM UTC
Commit: 4d5fec5 · View workflow run →

@fullsend-ai-review

Copy link
Copy Markdown

Review skipped — this PR is already merged.

The /fs-review command only reviews open pull requests.

Posted by fullsend post-review check

@fullsend-ai-retro

Copy link
Copy Markdown

Retro: PR #9feat(triage): use validation_loop.schema for output schema resolution

Timeline: Human-authored PR by ggallen, created at 19:17 UTC and self-merged ~76 seconds later at 19:18 UTC. The change was a small, correct config migration (+1/−4 lines in harness/triage.yaml) moving the output schema from env.runner.FULLSEND_OUTPUT_SCHEMA to validation_loop.schema to fix schema resolution when the harness is loaded from a URL.

What happened with agents:

  1. Review agent dispatched at 19:17:53 but the PR was already merged by 19:18:55 — the agent detected this at 19:20:43 and posted "Review skipped — this PR is already merged." However, it still bootstrapped a sandbox and ran the agent for ~2 minutes before completing.
  2. Three retro runs were triggered (28541913914, 28541976886, 28542000935), likely from multiple webhook events around the merge.
  3. Seven issue_comment workflow runs on the source repo were correctly skipped.

Assessment: The workflow was appropriate for a trivial, correct human change. No agent bugs or quality issues were observed. The inefficiencies identified are all well-covered by existing open issues:

  • Review on merged PRs / wasted sandbox compute: Covered by #1439, #2388, #2809, and others.
  • Multiple retro runs for the same PR: Covered by #2401.
  • Retro running on human PRs with no agent involvement: Covered by #2708.

No new proposals are warranted — all improvement opportunities map to existing tracked issues.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant