feat(harness): wire ResolveForge into load pipeline (ADR-0045 PR 3/7) - #2142
Conversation
Site previewPreview: https://59f9555e-site.fullsend-ai.workers.dev Commit: |
|
🤖 Finished Review · ✅ Success · Started 9:01 PM UTC · Completed 9:13 PM UTC |
ReviewFindingsLow
Info
Previous runReviewFindingsLow
Info
Previous run (2)ReviewFindingsLow
Info
Previous run (3)ReviewFindingsMedium
Low
Previous run (4)ReviewFindingsHigh
Medium
Low
Previous run (5)ReviewFindingsLow
Info
Previous run (6)ReviewFindingsMedium
Low
Previous run (7)ReviewFindingsHigh
Medium
Low
|
2011827 to
54daebf
Compare
|
🤖 Finished Review · ✅ Success · Started 9:40 PM UTC · Completed 9:51 PM UTC |
54daebf to
83956d5
Compare
|
🤖 Finished Review · ✅ Success · Started 9:59 PM UTC · Completed 10:09 PM UTC |
83956d5 to
534c210
Compare
|
🤖 Finished Review · ✅ Success · Started 10:16 PM UTC · Completed 10:28 PM UTC |
Add LoadWithOpts and LoadRaw to the harness package, and --forge flag to both `fullsend run` and `fullsend lock` commands. LoadWithOpts runs the Unmarshal → validateForge → ResolveForge → Validate pipeline so forge-specific overrides are applied before validation. LoadRaw provides unmarshal-only loading for base composition and multi-forge lock discovery. The --forge flag accepts an explicit platform name; when omitted, the run command auto-detects from CI environment variables (GITHUB_ACTIONS, GITLAB_CI), while the lock command iterates all forge variants and locks the union of dependencies across platforms. Signed-off-by: Claude Opus 4.6 <noreply@anthropic.com> Signed-off-by: Greg Allen <gallen@redhat.com>
534c210 to
0726539
Compare
E2E tests did not runE2E tests run automatically for org/repo members and collaborators on pull requests. For other contributors, a maintainer must add the See E2E testing guide for details. |
|
🤖 Finished Review · ✅ Success · Started 11:07 AM UTC · Completed 11:18 AM UTC |
|
🤖 Finished Retro · ✅ Success · Started 2:52 PM UTC · Completed 2:58 PM UTC |
Retro: PR #2142 — feat(harness): wire ResolveForge into load pipelineOverall assessment: The workflow performed well. The review agent caught a genuine high-severity logic error on the first pass (auto-detection in Main inefficiency — repeated findings (already tracked): The same low-severity edge-case finding ("--forge with no forge section is a silent no-op") was raised in 3 separate review iterations. The author acknowledged and dismissed it each time, explaining it was intentional behavior. The review agent even correctly tagged some findings as
Redundant review runs (already tracked): Reviews 3-5 appear to have been triggered by comment activity or non-code events rather than meaningful code changes. Covered by #893 and #1418. No new proposals — all identified improvements are already tracked by open issues. |
Summary
LoadWithOpts(path, LoadOpts)andLoadRaw(path)to the harness package for forge-aware loading and raw unmarshaling--forgeflag tofullsend runandfullsend lockwith auto-detection from CI env vars (GITHUB_ACTIONS,GITLAB_CI)LoadWithOptsinto the run pipeline (replacesLoad) so forge overrides are applied before validation--forgeis omitted, locking the union of dependencies across platformsRoleandSlugin run output when presentContext
This is PR 3 of 7 for ADR-0045 (forge-portable harness schema). It depends on PR 1 (ForgeConfig struct, #2127) and PR 2 (role/slug fields, #2128), both merged.
Pipeline ordering
LoadWithOptsruns: Unmarshal → ResolveForge → Validate. This ordering is required becauseValidate()would reject sentinel zero-value structs (e.g., emptyvalidation_loop) thatResolveForgeneeds to process first.LoadRawprovides unmarshal-only loading for two consumers:LoadWithBase(PR 4) — loads base harnesses without consuming their forge maps before merginglockForgePlatforms— discovers forge keys without resolving them, enabling multi-forge lockingForge detection precedence
detectForgePlatform: explicit--forgeflag →GITHUB_ACTIONS=true→GITLAB_CI=true→ empty (skip)Test plan
LoadWithOptsapplies forge overrides before validationLoadWithOptswith empty platform preserves forge map (no-op)LoadWithOptsrejects invalid/unconfigured platformsLoadRawreturns raw harness without validation (missing agent field OK)LoadRawpreserves forge mapdetectForgePlatformflag overrides env varsdetectForgePlatformauto-detects fromGITHUB_ACTIONSandGITLAB_CI--forgeflag registered on bothrunandlockcommandsforgeFlagparametermake go-test— all tests passmake go-vet— cleanmake lint— passes🤖 Generated with Claude Code