Record performance implementation review findings
This commit is contained in:
@@ -1,82 +1,119 @@
|
|||||||
# ReleaseKit adoption review findings
|
# Performance optimization review findings
|
||||||
|
|
||||||
Reviewed commits `1917dcf` through `f887fac` against the
|
Reviewed `5279330..6c62226838a3658e3802ed2926e9273fbd7c34ea` against the
|
||||||
[adoption roadmap](releasekit.md) and [implementation plan](implementation.md).
|
[performance audit roadmap](performance-audit.md) and the
|
||||||
The selected module, profile, validation sequence, and tag-only publication
|
[implementation plan](implementation.md). The private prefix indexes, worklist
|
||||||
match the intended architecture. Address the following documentation findings.
|
sensitivity closure, frozen inspection lookups, prepared replay, and ordered
|
||||||
|
membership maps broadly match the selected architecture. Whole-tree replay and
|
||||||
|
the expressly deferred ownership/trace changes remain unchanged.
|
||||||
|
|
||||||
## 1. Preserve the captured endpoint during manual recovery (P2)
|
The review found no reproduced functional regression or unintentionally stronger
|
||||||
|
public contract. The following bounded implementation and test-quality findings
|
||||||
|
remain to be addressed. They do not authorize changes to public semantics,
|
||||||
|
dependencies, resource limits, release gates, or credential handling.
|
||||||
|
|
||||||
Status: Complete. The runbook uses the captured endpoint and checks Git's URL
|
The older, completed ReleaseKit review record remains in Git history at
|
||||||
resolution before querying refs. Its documented command returned the exact tag
|
`6c62226:docs/roadmap/remediation.md`.
|
||||||
in a temporary fixture and rejected a rewritten endpoint before querying refs.
|
|
||||||
|
|
||||||
Affected: [release procedure](../release.md#5-recover-from-a-failed-or-uncertain-tag-push),
|
## 1. Complete parsed-path reuse in sensitivity collection (P2)
|
||||||
lines 180–199.
|
|
||||||
|
|
||||||
The manual recovery command queries a literal URL without checking whether Git
|
Status: Open.
|
||||||
rewrites it. ReleaseKit v0.2.0's own recovery procedure verifies that the captured
|
|
||||||
endpoint still resolves to itself before querying it. Without that check, the
|
|
||||||
documented query can inspect a different repository and falsely establish that
|
|
||||||
the published tag is absent. The runbook then permits deletion of the retained
|
|
||||||
local tag and a retry based on that incorrect conclusion.
|
|
||||||
|
|
||||||
Review reproduced this with two temporary bare repositories: the actual endpoint
|
Affected: [secret.go](../../internal/engine/secret.go), `addSecretPath`
|
||||||
contained the published annotated tag; an `insteadOf` rewrite sent the runbook's
|
(lines 85–89); implementation Stage 9, item 3.
|
||||||
query to a repository with the same `main` commit but no tag. The query succeeded
|
|
||||||
and reported only `main`.
|
|
||||||
|
|
||||||
Use the endpoint captured in the publication report and follow ReleaseKit's
|
Temporary node indexes and the redundant initial final-tree walk were removed,
|
||||||
existing URL-resolution check before querying its refs, for example:
|
but `addSecretPath` still unconditionally calls `ParsePath` and replaces the
|
||||||
|
stored path on every visit. Paths common to multiple source applications,
|
||||||
|
baseline/decoded projections, and the final tree are therefore repeatedly split,
|
||||||
|
unescaped, and allocated even when the accumulator already holds the identical
|
||||||
|
parsed representation. This leaves an expressly selected part of candidate 5
|
||||||
|
unimplemented, despite Stage 9 being marked complete.
|
||||||
|
|
||||||
```sh
|
Reuse the existing accumulator path only when it already has the same valid
|
||||||
authoritative='COPY_CAPTURED_ENDPOINT'
|
parsed representation. If history or inheritance has installed an explicit
|
||||||
release_version='vMAJOR.MINOR.PATCH'
|
key/index path, the later tree/pointer contribution must still replace it with
|
||||||
test "$(git ls-remote --get-url -- "$authoritative")" = "$authoritative" &&
|
parsed segments as before. Do not skip merely because the pointer key exists,
|
||||||
git ls-remote --refs -- "$authoritative" refs/heads/main "refs/tags/$release_version"
|
substitute walker-derived typed segments, or change collection phase precedence.
|
||||||
```
|
|
||||||
|
|
||||||
A failed equality check or query leaves the result unresolved. Retain the
|
Add focused behavioral coverage for a repeated parsed contribution and a typed
|
||||||
existing bounded recovery and confirmed-absence requirements. Verify this
|
historical contribution subsequently normalized to parsed form, including numeric
|
||||||
correction with a temporary URL-rewrite fixture; it adds no recurring release
|
mapping/sequence transitions. Reuse existing tag/predicate/ownership coverage.
|
||||||
gate or ConfigKit-owned recovery implementation.
|
No allocation threshold or traversal-count test is needed. Re-run the sensitivity,
|
||||||
|
inheritance, and rendering tests and the everyday development check, then reconcile
|
||||||
|
the completion evidence with the actual implementation.
|
||||||
|
|
||||||
## 2. Remove the unsupported prohibition on `go tool` (P3)
|
## 2. Correct the unindexed-sensitivity regression fixture (P2)
|
||||||
|
|
||||||
Status: Complete. The runbook retains the built-executable workflow and limits
|
Status: Open.
|
||||||
its exit-status explanation to `go run`. A fresh `go tool` check preserved
|
|
||||||
ReleaseKit's status 2 and publication diagnostics.
|
|
||||||
|
|
||||||
Affected: [release procedure](../release.md#1-select-go-and-prepare-the-tool),
|
Affected: [secret_propagation_test.go](../../internal/engine/secret_propagation_test.go),
|
||||||
lines 84–86.
|
`TestSecretDependencyClosureMatchesFixedPointScan`, the
|
||||||
|
“unindexed seed only activates inherited relations” case (lines 38–48).
|
||||||
|
|
||||||
The runbook prohibits both `go run` and `go tool` on an exit-status rationale.
|
The seed is `map[string]bool{"untracked": true}`, but the dependency and
|
||||||
That rationale applies to `go run`, but the review's Go 1.26.8 invocation
|
inheritance paths spell `/untracked`. These are different keys; the seed also
|
||||||
`GOTOOLCHAIN=local GOPROXY=off go tool releasekit publish invalid` returned
|
violates the canonical-pointer convention used by the new private trie. Both
|
||||||
ReleaseKit's status 2 and its publication diagnostics unchanged. The blanket
|
algorithms leave the inherited target unclassified, so their equality does not
|
||||||
`go tool` prohibition unnecessarily extends the selected native-executable
|
verify the case's intended behavior. The suite can pass without covering the
|
||||||
workflow into an unsupported restriction.
|
selected distinction between an unindexed classified path and an invalid seed.
|
||||||
|
|
||||||
Keep the documented temporary executable build and publication commands.
|
Use `secretSet(Keys("untracked"))` or the literal `"/untracked"`, while keeping
|
||||||
Remove `go tool` from the prohibition and explain the exit-status limitation
|
that path absent from the collected paths map. Assert that the inherited target
|
||||||
specifically for `go run`. No additional execution mode or test matrix is needed.
|
`/copy` becomes sensitive and the ordinary target `/ordinary` does not, in
|
||||||
|
addition to the reference-set comparison. This verifies the existing filtering
|
||||||
|
difference; it does not impose a new public guarantee or require malformed-seed
|
||||||
|
validation in production.
|
||||||
|
|
||||||
## 3. Reconcile completed implementation status (P3)
|
Review exercised this corrected canonical fixture in a disposable checkout;
|
||||||
|
the current production implementation produces the intended result. The finding
|
||||||
|
is missing regression protection, not an observed sensitivity leak.
|
||||||
|
|
||||||
Status: Complete. The roadmap and implementation plan now identify the migration
|
## 3. Finish moving reference-only machinery out of production (P3)
|
||||||
as complete, and the roadmap describes fixture verification as completed.
|
|
||||||
Completed documents remain available for retirement during release preparation.
|
|
||||||
|
|
||||||
Affected: the adoption roadmap's opening status and final migration-verification
|
Status: Open.
|
||||||
bullet, and the implementation plan's opening status.
|
|
||||||
|
|
||||||
All seven stage headings are marked complete, but the plan still says
|
Affected: [resolution.go](../../internal/engine/resolution.go),
|
||||||
"Status: Planned" and the roadmap says isolated fixture verification remains
|
`newResolutionCoverageIndex` (lines 373–382), `appendUniqueString`,
|
||||||
unfinished. The final two commits identify that verification as completed;
|
`appendUniquePath` (lines 439–453);
|
||||||
this review also reproduced validation failure without a tag, successful
|
[path.go](../../internal/engine/path.go), `pathSpellingEqual`;
|
||||||
annotated-tag publication with each selected gate once, and wrong-endpoint
|
[diagnostic.go](../../internal/engine/diagnostic.go), `compareDiagnostic`.
|
||||||
rejection before any Go validation or tag creation.
|
Relevant tests: `resolution_index_test.go` and `path_test.go`.
|
||||||
|
|
||||||
Mark the documents complete and describe the verification as completed.
|
After the caller migrations, the slice-based coverage constructor has only a
|
||||||
Keep retirement during release preparation under the existing release policy.
|
test caller. The old list-deduplication helpers likewise serve only the
|
||||||
Do not add a permanent migration-verification gate.
|
coalescing reference/test fixtures, and `pathSpellingEqual` exists solely to
|
||||||
|
support that reference-only path helper. The standalone diagnostic comparator
|
||||||
|
wrapper has no callers; production sorting uses `compareDiagnosticWithPaths`.
|
||||||
|
Keeping these in production leaves redundant mechanisms and test scaffolding
|
||||||
|
behind after Stage 18's requested cleanup.
|
||||||
|
|
||||||
|
Move useful reference-only helpers into test files, or make the coverage test
|
||||||
|
exercise a production record/snapshot adapter directly. Keep the old reference
|
||||||
|
deduplication relation independent and String-based where it acts as an oracle.
|
||||||
|
Remove unused production wrappers and helpers once callers are accounted for.
|
||||||
|
Consolidate or retarget the obsolete helper-specific deduplication test toward
|
||||||
|
the actual resolution membership behavior; existing repeated-record coverage
|
||||||
|
may already be sufficient.
|
||||||
|
|
||||||
|
Retain required `clonePaths`, token comparison, both live coverage adapters,
|
||||||
|
immutable inspection evidence, and the legitimate unprepared-metadata history
|
||||||
|
fallback. This is a narrow cleanup, not permission to remove behavior or useful
|
||||||
|
equivalence tests. Re-run affected tests and the everyday development check.
|
||||||
|
|
||||||
|
## Review validation
|
||||||
|
|
||||||
|
- `./scripts/check.sh` passed at the reviewed commit: formatting, whitespace,
|
||||||
|
all-package tests, vet, and build.
|
||||||
|
- `GOTOOLCHAIN=local GOPROXY=off GOWORK=off go test -race ./...` passed.
|
||||||
|
- A fresh, uncached `GOTOOLCHAIN=local GOPROXY=off GOWORK=off go test -count=1 ./...`
|
||||||
|
also passed.
|
||||||
|
- A disposable checkout outside the repository passed
|
||||||
|
`go test -mod=readonly ./internal/engine -run '^TestReview' -count=1` with
|
||||||
|
the corrected canonical unindexed-seed case and 1,500 deterministic generated
|
||||||
|
sensitivity graphs compared with the prior fixed-point procedure.
|
||||||
|
- Reviewed all changed production files and their added/modified test coverage.
|
||||||
|
Root public API, configuration contract, adopted policies, module dependencies,
|
||||||
|
and release profile are unchanged by the implementation commits.
|
||||||
|
- No performance measurements were required or collected. Algorithmic changes
|
||||||
|
and retained-index memory tradeoffs are not quantified runtime guarantees.
|
||||||
|
|||||||
Reference in New Issue
Block a user