diff --git a/docs/roadmap/module-releases.md b/docs/roadmap/module-releases.md index 3d642e4..0f58c84 100644 --- a/docs/roadmap/module-releases.md +++ b/docs/roadmap/module-releases.md @@ -50,8 +50,10 @@ means the repository-root module. For example: All mandatory and selected optional release checks use the selected module's scope. Independently released nested modules are excluded from their parent's -validation inputs. Checks may read referenced material elsewhere in the -captured repository without adding that material's surrounding files to the +automatic validation inputs. Shared file selections follow the +[resolved shared-file rules](#shared-file-validation-inputs). Checks may read +referenced material elsewhere in the captured repository without adding that +material's surrounding files to the input set. The checkout remains the boundary for outside-checkout link checks. Repository cleanliness, branch, candidate commit, remote endpoint, and publication @@ -106,8 +108,9 @@ or its target heading without scanning that module's unrelated documents. Update module-distribution inspection to examine the selected release's inputs. For example, an unrelated sibling's filesystem replacement should not fail the -selected module's check. Determine relevant shared release materials through -existing conventions; shared files should not pull in an entire parent tree. +selected module's check. Add shared files through the +[resolved selection rules](#shared-file-validation-inputs), carrying the selection +through the public request and profile and applying it to the shared file inputs. Keep the optional checks optional and retain their existing individual rules, error identities, cancellation, and cause propagation apart from the intended scope change. Apply the boundary and path conventions recorded below. @@ -205,6 +208,10 @@ versions across modules; major-version directories; full-tag reuse; and failed or unknown publication with the correct recovery identity. Exercise optional checks with violations inside and outside the selected scope, parent selection excluding independent nested modules, and cross-module Markdown references. +Cover omitted, replacement, and empty shared-file lists; optional default files; +missing explicit files; committed-tree lookup; duplicate inputs; and explicit +files in another module. Verify selection errors when optional file checks are +disabled, and that shared-file selection preserves enabled checks and Go scope. Verify that repository guards still observe changes outside the selected module and that module selection does not repeat the standard suite. Reuse existing failure tests where they already protect unchanged behavior. Add representative @@ -229,7 +236,7 @@ examples. Synthetic dependency fixtures use isolated module caches. Use committed nested `go.mod` locations as module boundaries for ordinary source directories. This follows Go's module structure and avoids a second registry of independently versioned products. Vendored material remains part of the selected -module's file-check inputs. Nested fixture modules are excluded from generic +module's file-check inputs. Nested fixture modules are excluded from automatic parent file checks and can be exercised through the parent's tests or product checks. Document this distinction and verify representative cases. @@ -238,6 +245,36 @@ does not fail that module's workspace-file check merely because it exists. Shared release materials and referenced destinations receive the targeted inspection described above. +### Shared file-validation inputs + +Provide an optional shared-file list in the public request and profile. Its +selection applies only to shared file-validation inputs. Existing validation +selections control which checks are enabled. Enabled checks retain their rules, +and Go tests, vet, and package compilation retain the selected module's scope. + +| Selection | Shared files added automatically | +| --- | --- | +| Omitted list | Repository-root `COPYRIGHT`, `LICENSE`, and `docs/oss/attribution.md`, when present. | +| Explicit list | The listed files replace the defaults. | +| Explicit empty list | No shared files. | + +In Go, a nil slice selects the defaults; a non-nil empty slice selects none. +In JSON, omission or `null` selects the defaults; `[]` selects none. Preserve +this distinction through profile mapping and facade conversions. Exact field +names belong in API design. + +Paths are repository-relative literal file paths. This initial selection +supports individual files. Resolve presence and file identity from the captured +committed tree. Missing explicitly selected files produce a configuration or +validation error identifying the selected path, including when optional file +checks are disabled. Defaults are optional when absent. + +Deduplicate the combined module and shared-file inputs by committed path, so a +file already in module scope or repeated in the list is checked once. Explicit +selection may name a file in another module; include that file alone. Reference +resolution continues to inspect destinations using existing rules and leaves +those destinations outside the input set unless independently selected. + ### Relative paths and product commands Anchor module selection and profile lookup at the repository. Anchor