Multi-source verification targets#48
Merged
Merged
Conversation
…--source) Flips config.Target.Source from string to SourcePaths, wires validation through SourcePaths.Validate, makes `target register --source` repeatable (StringArrayVar), and removes the Task 3 transitional shim.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
A target's
sourcein.speckit/specs.jsonmay now be a single directory string (unchanged) or a JSON array of directories. Verification scans every listed root and joins the bindings into one target — so a Go-service target whose scenario tests span the daemon, sharedinternal/packages, and a sibling CLI can be verified as one unit.Fixes the Trove handoff repro:
What changed
config.SourcePaths— a[]stringthat JSON-decodes from a string or an array; ergonomic round-trip (one path → bare string, many → array) so existing single-source configs don't churn. Validation requires ≥1 non-empty path.VerifyConfig.Sourceis now[]string; new additiveScanBindingsMany/ScanDeviationsManyaggregate across roots;verifyandparityroute through them. Binding identity/file/line,bindings: "scoped", dangling-from-any-root, and locking semantics are all unchanged (they operate on the joined binding set).verify/paritywork with multi-source targets;specify target register --sourceis now repeatable for authoring them without hand-editing JSON.deploy/secretsuse the first source for their app-dir heuristic.docs/config.mddocuments the array form; design doc atdocs/design/multi-source-targets.md.The
config↔engineboundary is preserved: the flexible JSON lives only inconfig; the engine stays a plain[]string; the CLI is the sole glue.Test Plan
mise run cigreen (build + vet + test + gofmt), including after merging latestmainscopeddrops untagged across the joined set; missing-root tolerance pinnedtarget registerwith repeated--sourcewrites an array target