Align preparation roadmap with automatic checkout root resolution

This commit is contained in:
2026-11-01 20:56:15 +00:00
parent 303385a5ee
commit 59bb0745e7

View File

@@ -29,9 +29,9 @@ checks passed during the audits; they do not cover all identified defects.
- Asset operations classify a missing service-provided release identity as a - Asset operations classify a missing service-provided release identity as a
malformed observation. Existing page-only reads retain their current minimal malformed observation. Existing page-only reads retain their current minimal
response requirements. response requirements.
- Preparation path anchoring is explicit in the public documentation. The - Preparation resolves the containing checkout root automatically, matching
recommended interpretation retains the supplied-directory anchor; the other orchestration operations. Standalone preparation retains the supplied
alternative is discussed under Open Decisions. directory as its base.
- Delivery documentation accurately describes identity requirements for empty - Delivery documentation accurately describes identity requirements for empty
prebuilt results and credential preflight before full artifact verification. prebuilt results and credential preflight before full artifact verification.
@@ -101,17 +101,18 @@ flag source.
This is narrower than replacing all `GOFLAGS` or disabling the persistent Go This is narrower than replacing all `GOFLAGS` or disabling the persistent Go
environment. Preserve the other effective flags and the current proxy, environment. Preserve the other effective flags and the current proxy,
private-module, authentication, checksum, cache, workspace, and local-toolchain private-module, authentication, checksum, cache, workspace, and local-toolchain
behavior. Preserve Go's existing checksum-update behavior and directory behavior. Directory selection follows the checkout-root resolution in unit 6;
selection; this unit adds no requirement for an immediate `go.mod` in a supplied within the resolved selection, preserve Go's existing checksum-update behavior
package directory. and ordinary module discovery. Standalone package-directory preparation retains
upward declaration discovery.
**Completion evidence:** exercise both inherited and persistent `-modfile` **Completion evidence:** exercise both inherited and persistent `-modfile`
settings against different module graphs. Preparation consumes the ordinary settings against different module graphs. Preparation consumes the ordinary
selected graph, including when Go discovers its declaration above the working selected graph, including standalone use where Go discovers its declaration
directory. Verify the existing network/private-module/cache settings remain above the working directory. Verify the existing network/private-module/cache
available and that unrelated flags retain their behavior. Use test-owned settings remain available and that unrelated flags retain their behavior. Use
`GOMODCACHE` directories for every synthetic-module download. Keep the existing test-owned `GOMODCACHE` directories for every synthetic-module download. Keep the
binary CI preparation ordering and cancellation/error propagation covered. existing binary CI preparation ordering and cancellation/error propagation covered.
Document the preparation flag override in its GoDoc and the Document the preparation flag override in its GoDoc and the
[Go environment guide](../internal/gotool.md). Update command fixtures for the [Go environment guide](../internal/gotool.md). Update command fixtures for the
@@ -179,27 +180,35 @@ to work, and existing page/write-progress outcomes remain accurate. Retain
`TestBackendFindReleaseDoesNotRequireWriteResponseFields` or equivalent `TestBackendFindReleaseDoesNotRequireWriteResponseFields` or equivalent
behavioral coverage. Update the integration guide's error description as needed. behavioral coverage. Update the integration guide's error description as needed.
### 6. Clarify dependency preparation's path anchor ### 6. Resolve preparation's checkout root automatically
**Status:** open; targeted interpretation follows Open Decision 1. **Status:** open. **Source:** interfaces finding 3.
**Source:** interfaces finding 3.
**Owners:** `DependencyPreparationRequest` GoDoc and consumer preparation guidance; **Owners:** the preparation facade, shared Git/selection boundaries,
selection code only if the alternative is chosen. `DependencyPreparationRequest` GoDoc, and consumer preparation guidance.
Under the recommendation, document `RepositoryDir` as the supplied base Resolve the containing checkout root from `RepositoryDir` before applying
directory for preparation, `ModuleDir` as relative to that base, and empty `ModuleDir`. Within a checkout, interpret `ModuleDir` relative to that root;
`ModuleDir` as selecting that base. Explain that callers sharing a location with empty selection means the root module, consistently with `Check`, `Build`, and
other orchestration APIs should supply the resolved checkout root when they `Deliver`. For standalone use outside a Git checkout, retain the supplied
intend repository-root-relative selection. Keep standalone directory preparation directory as the base and apply the existing relative module selection there.
and the CLI's existing root normalization.
**Completion evidence:** compare the wording and examples with current root, Keep this normalization inside ReleaseKit so callers can reuse a repository
nested, symlink-resolved, and standalone-directory behavior. Reuse existing location across operations without normalization code or a new setting. This
selection tests for a documentation-only correction. If anchoring behavior applies [ADR 0002's priority](../adr/0002-routine-releases.md) of minimizing
changes instead, add behavioral coverage for calls from within a checkout and caller-owned release work. Retain the CLI's existing root normalization and
for standalone preparation, including failed discovery behavior, and document shared symlink/containment rules. Distinguish standalone use from discovery
the changed interpretation. failures; cancellation, permission failures, and other Git errors remain
errors rather than silently selecting another base.
**Completion evidence:** cover calls from the checkout root and its
subdirectories, default and explicit nested-module selections, symlink-resolved
paths, standalone directories, and discovery failures. Include combined coverage
with unit 2 showing that preparation and subsequent orchestration select the
same module from the same repository location and `ModuleDir`, even with an
ambient alternate module file. Preserve standalone package-directory discovery
and the existing CLI behavior. Update GoDoc and consumer guidance to describe
the selected interpretation and the change for checkout-subdirectory callers.
### 7. Clarify empty prebuilt results ### 7. Clarify empty prebuilt results
@@ -258,28 +267,3 @@ Mark this roadmap complete when all eight work units and their corresponding
audit findings have been addressed and verified, including the selected path-anchor audit findings have been addressed and verified, including the selected path-anchor
interpretation. The initial pass that creates this roadmap changes only this interpretation. The initial pass that creates this roadmap changes only this
document. document.
## Open Decisions
### 1. Dependency preparation's repository anchor
**Recommendation:** retain the supplied `RepositoryDir` as the preparation base
and clarify its meaning in GoDoc and consumer guidance. This corrects the
ambiguity without changing existing selection behavior, preserves standalone
preparation, and keeps the current CLI experience. The tradeoff is that API
callers reusing a directory within a checkout must supply its resolved root
when composing root-relative preparation with `Check`, `Build`, or `Deliver`.
This is a recommended resolution, not a claim that the audit established a
requirement to retain that difference.
**Viable alternative:** resolve the containing checkout root when the supplied
directory belongs to a Git checkout, and preserve supplied-directory preparation
for standalone use. This aligns ordinary checkout-based calls with the other
facades and reduces caller normalization. It changes the interpretation of
existing calls from checkout subdirectories and adds discovery behavior. The
implementation would need to distinguish standalone use from discovery failures
without silently treating every Git error as permission to use another anchor.
Adopting it would require focused selection tests and updated consumer guidance.
A Git-checkout prerequisite is unnecessary for either correction; the current
standalone use remains part of the baseline considered by both choices.