Make the test gate unfakeable and stop test-integration lying (closes #93) #98
Reference in New Issue
Block a user
Delete Branch "fix-test-gate"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #93. Closes #69.
Combined deliberately: both change
script/test, and the timeout in #69had to be chosen against the uncached behaviour #93 introduces, or it
would have been tuned against runs that did no work.
Four files, no Go code touched:
script/test,Makefile,README.md,TODO.md.The defect
On
mainat3f9c2e5, two back-to-backmake testruns: 15.9s / 14ok/ 0(cached), then 0.42s / 14ok/ 14(cached). The fullevidence signal this repo leans on, produced in under half a second with
no test executed.
ok <pkg> (cached)is anokline, and nothing thisrepo checks can tell the two apart.
This sits one level below the Docker layer cache #85 addressed:
CHECK_EPOCHforcesRUN make testto re-execute, but aGOCACHEbaked into an earlier layer survives into the re-executed step, so the
step can re-run and still do no work.
Part A (#93):
-count=1, unconditionallyApplied to
script/testfor every run, not only the containerised path.The issue offered keeping the cache locally if the inner-loop cost were
too high; it is ~11s per repeat run, and against that the pre-commit
hook runs this same script, so a cache-honest-only-in-CI gate leaves the
hole exactly where it gets leaned on hardest. An unconditional flag also
cannot be got wrong by a future caller.
Other call sites (DoD item 4):
script/checkinherits it;Dockerfileinherits it and is otherwise untouched;
test-integrationdeleted (PartB);
Makefiletest-coveragefixed — it was a raw inlinego testwith no
-count=1, so a coverage profile could be assembled from cachedresults and describe a run that did not happen.
Both invocations in
script/testnow come from onerun_testsfunctionso the quiet run and the verbose rerun cannot drift apart in flags.
Part B (#69): option (b), delete the target
No file in the repo carries a build tag of any kind, so
-tags=integrationselected nothing andtest-integrationwas an exactduplicate of
make testplus-v, whileinternal/vaultik/integration_test.goran unconditionally on everymake test— the opposite of what theMakefileimplied.Option (a) was rejected: the whole suite is ~12s on the host and ~57s in
a cold container, ~46s of which is compilation that (a) would not avoid.
Gating would save seconds in exchange for a build-tag scheme and a
second CI path to keep wired up; in a repo that has now found five ways
for a gate to report an unearned green (#78, #80, #85, #88, #93), a
mechanism whose failure mode is "some tests silently stopped running" is
a bad trade. It also discharges DoD item 2 for free — nothing can drop
out of CI coverage when nothing is conditional. The target was
referenced nowhere but the
Makefile.Part B, the timeout: 30s → 120s
The claim in the #69 comment is wrong
It is not.
-timeoutreaches the compiled test binary as-test.timeout, and that clock starts insidetesting.M.Run, aftercompilation and linking. Measured: a container with an empty
GOCACHEspent 46.3s compiling before the first result line, then reported
per-package durations within ~11% of a warm host run. If compilation
were charged, they would be tens of seconds larger. The sibling-repo
failure the comment cites was
timeout 30 go test ./...— a shelltimeoutaround the whole invocation, which genuinely does includecompilation. Different mechanism; the analogy does not carry. Verified
independently a second time by the reviewer.
The value
The exposure was margin, not compilation.
internal/database, theslowest package, across every run recorded on this PR and the reviewer's:
GOCACHErun (reviewer)Each fresh measurement has landed above the last, so the worst case is
not tightly characterised — itself an argument for generous headroom
rather than a snug fit. At 2.9x, 30s is not a safety margin but a flake
waiting for a slow runner, whose failure mode is a timeout that reads as
a real defect; and
script/testdoubles the work on failure via theverbose rerun. A
-timeoutis a hang backstop, not a performancebudget: nothing is gained by failing at 30s that is not gained by
failing at 120s.
It diverges from
REPO_POLICIES.md, deliberately and on the recordREPO_POLICIES.md:192mandates "Add a 30-second timeout" and thecanonical recipe at
:212-214uses-timeout 30s. 120s contradictsboth. That file is org-canonical and cannot be amended from this repo,
so the divergence and its reasoning are recorded in
script/test'scomment,
TODO.md,README.mdand the commit message, and #101proposes amending the canonical text upstream.
#101 also carries the trade this surfaces: the verbose rerun makes a
hung package pay the timeout twice, putting a hang-case Docker build
around 6m30s — over the same policy's five-minute build limit. Two
constraints a hang cannot satisfy at once, worth deciding deliberately.
Verification
make teston the branch: 14ok, 0(cached),12.8s then 11.9s, durations differing per package between runs — which
a replayed cache cannot produce.
-count=1, the honest number: warm repeat goes 0.42s →11.9s, +11.5s (reviewer's independent pair: 0.424s → 11.609s,
+11.2s). That is what it costs to make a repeat
make testmeansomething; the 0.42s it replaces bought nothing.
README.mdnowcarries this figure rather than "a few seconds" — it is the only place
a non-PR-reader sees the cost.
script/cibuildon the head: exit 0, ok:14, cached:0, 2m17s, with thethree check steps
DONE(notCACHED) under a freshCHECK_EPOCH;make lint0 issues,make fmt-checkclean.#69option (b) leaves nothing to demonstrate:make test-integrationno longer exists, and the integration tests cannotdrop out of CI because they are unconditional.
One anomaly worth reporting: the first host-side
make lintwasVOID under #88 and is not recorded as a verdict — it reported 231
issues, every one citing a path under
../impl-91/, another session'sworktree, with no
parallel golangci-lint is runningmessage, so thatsignal alone would have missed it. Mechanism, a variant of #88 I believe
is not yet tracked:
script/lintmounts only its own$ROOTbut pointsGOLANGCI_LINT_CACHEat a shared host path(
${XDG_CACHE_HOME}/vaultik-lint); two worktrees of the same repo haveidentical Go contents, so their cache keys collide and one worktree's
stored findings — paths and all — are replayed for the other. A worktree
can be failed by another's code, or, worse, passed by it. Re-run
with an isolated
XDG_CACHE_HOME(env only;script/lintuntouched per#78/#80/#88): valid, 0 issues. The containerised lint is structurally
immune and also passed.
Notes for the tracker, not fixed here
-timeout 120sdivergence fromREPO_POLICIES.md:192, andthe fact that a hang pays the timeout twice and so blows the same
policy's five-minute build limit — filed as #101.
variant).
golangci-lintwarns every run thatgomodguardis deprecated sincev2.12.0, replaced by
gomodguard_v2; fixing it means editing.golangci.yml, off-limits here.script/fmt/script/fmt-checkonly rungo fmt, somake fmtcannot enforce the repo's Markdown style. Markdown here was
hand-wrapped to match.
test-coverageis a raw inlinego testrather than ascript/entrypoint, and still has neither
-racenor-timeout, so a hangin
make test-coverageis unbounded. I fixed only its-count=1correctness bug; the rest is pre-existing and out of scope.
Constraints: one knowingly broken
REPO_POLICIES.md:192mandates a 30-second test timeout and:212-214codifies it;
script/testsets 120s. A real divergence from apolicy this repo checks in, not a technicality — documented in the four
places above, with #101 proposing the upstream amendment.
Correcting a claim this section previously made: a zero-byte diff
against
REPO_POLICIES.mdis evidence the file was not edited, notevidence the change complies with it — and here the untouched file is
precisely what the change contradicts.
Otherwise:
.golangci.ymlsha256 unchanged(
021cc83f4e6fc7c31b95b34b846723dfcf20b66b7baeea1dc40406e643346bcb);Dockerfile,script/lint,REPO_POLICIES.md,.gitea/not edited;no Go file touched, so no deleted tests, no
t.Skip, no weakenedassertions;
make/script/entrypoints only for verification;TODO.mdupdated in the same commit; nodocker builder pruneof anykind — cache invalidation went through
CHECK_EPOCHas designed.Review of PR #98 — independent, adversarial
Head
06659ae, basemain3f9c2e5. Reviewed in a detached worktree at/tmp/review-98; a second worktree at/tmp/rev98-main-x7konorigin/mainwas used for the before/after comparison. Nothing was modified or committed.
Verdict: FAIL —
needs-rework. One blocking finding, documentation-only,listed first. Every substantive technical claim in the PR body was
independently reproduced and holds; the block is not about the engineering.
What I verified, with my own numbers
1. Defect reproduced on
main(3f9c2e5), two back-to-backmake test:oklines(cached)Confirmed exactly as reported: the full 14-
okevidence signal in 0.424shaving executed nothing.
2. Fixed on the branch, same host, immediately after:
oklines(cached)Per-package durations differ between the two runs (
internal/database6.093s then 6.712s;
internal/vaultik6.559s then 6.926s;internal/snapshot1.974s then 1.904s), which a replayed cache cannotproduce. Note the branch cache was already warm from my
mainruns above —the Go test cache would have hit had
-count=1not been present, so this isa genuine test of the flag rather than an incidentally-cold run.
3.
-count=1coverage — no remaining path. Exhaustive grep forgo testacross the tree leaves exactly two invocations, both carrying theflag:
script/test: both the quiet run and the verbose rerun now come from thesingle
run_testsfunction; the rerun isrun_tests -v, so the flagsprovably cannot drift. The refactor does not change failure semantics —
the unconditional
exit 1after the rerun is intact, and underset -ethe rerun failing exits non-zero either way.
script/check: read; it calls"$SCRIPT_DIR/test"and inherits.script/precommit: read; runsgo mod tidy,go fmt, thenscript/check.No
go testof its own.Makefiletest-coverage: the omission was real and is fixed.DockerfileRUN make test(line 80): inherits viascript/test."$@"with zero positional parameters underset -euis POSIX-safe and waschecked in
/bin/sh,/bin/dashandbash 5.3— all expand to nothingwithout an unbound-variable error. The containerised run below is the
empirical confirmation under the image's own shell.
4. #69 premise confirmed, target gone.
grep -rn '//go:build\|// +build' --include='*.go' .returns nothing — nofile in the repo carries a build tag of any kind, so
-tags=integrationgenuinely selected nothing and deletion is the defensible option. The target
is absent from the recipe and from
.PHONY; the only surviving occurrencesof the string
test-integrationare the explanatory prose inMakefile:34and
TODO.md:32. No reference in.gitea/workflows/,README.md, or anyscript/.README.mdonmainnever mentioned it, so nothing was leftdangling.
5. The timeout claim — independently confirmed, and the author is right.
I did not take this on the PR's word. Isolated cold
GOCACHE(
/tmp/rev98-coldcache-q4m, verified empty at start, 791M at end), host run,output timestamped per line:
Total 62.575s, of which 46.52s elapsed before the first result line —
that is the compile. Yet the per-package durations come back at warm values
(
blob1.211s vs 1.185s warm;chunker1.699s vs 1.671s;snapshot2.018s vs 1.974s). If compilation were charged against-timeout, those would be tens of seconds larger. The claim on #69 thatcold-cache compilation is charged against
-timeoutis false, and thecorrection in this PR is correct. The containerised run independently
agrees: 47.05s to first result,
internal/databasethen reporting 6.625s.6.
script/cibuild— three-part recipe, all three independentlysatisfied.
BUILDKIT_PROGRESS=plain,$?captured immediately:okcount: 14, matching the 14 test-bearing packages (18 total,4
[no test files]).(cached)markers in thego testoutput.this commit.
The check steps executed rather than replaying:
#16 DONE 1.2s(
make fmt-check),#17 DONE 47.4s(make lint, ending0 issues.),#25 DONE 61.1s(make test) — noneCACHED, each printing the same freshCHECK_EPOCH(17862707770997515103126566). The 14CACHEDlayers are alldependency/module layers below the
ARG, exactly as the guard intends.7. Lint. I deliberately recorded no host-side lint verdict. The
containerised lint inside
script/cibuildis structurally immune to theshared-cache contamination described in the PR body and reported 0
issues.
make fmt-checkexit 0;make fmtleaves the tree byte-clean.8. Nothing weakened.
.golangci.ymlsha256 on the head is021cc83f4e6fc7c31b95b34b846723dfcf20b66b7baeea1dc40406e643346bcb,identical to
main.git diff origin/main origin/fix-test-gate -- Dockerfile script/lint REPO_POLICIES.md .golangci.yml .giteais empty — the lint-stageFROMdigest and the
ARG CHECK_EPOCHguard structure are untouched. No Go fileis touched at all, so there are no deleted tests, no
t.Skip, and noweakened assertions.
9. Process. CI green on
06659ae(success, 2m30s — not a sub-secondpass). Mergeable:
git merge-treeagainstorigin/mainproduces zeroconflict markers, the head already contains the current
maintip, and theAPI reports
mergeable: true. No Claude/Anthropic reference and noattribution trailer anywhere in the diff, the commit message, or the PR body.
Inclusive-terminology grep over the diff: clean. Changed Markdown is within
80 columns. No scope creep — all four files are within the two issues' scope.
TODO.mdupdated in the same commit, and its figures (14oklines, 30s,46s) do not conflict with the commit message or this PR.
BLOCKING
B1.
script/test:43—-timeout 120scontradictsREPO_POLICIES.md:192,and the PR asserts compliance with that file rather than reconciling it.
REPO_POLICIES.md:192states:and the canonical Go recipe at
REPO_POLICIES.md:212-214usesgo test -timeout 30sin both the first run and the verbose rerun. This PRquadruples that number to 120s. Nothing in the repo records that the
divergence is deliberate — not the script comment, not
TODO.md, not thecommit message, and not the PR's own "Notes for the tracker, not fixed here"
section, which does carry four other out-of-scope observations.
Worse, the PR's "Constraints honoured" section presents
as evidence of compliance. A zero-byte diff against a policy file is not
compliance with it; here the untouched file is the thing being contradicted.
In a repo whose recent history is five separate mechanisms for producing a
green that was not earned, an evidence section that reads as policy
compliance while the change contradicts the policy text is the same defect
class in documentation form. That is what blocks, not the number.
To be explicit about what I am not saying: 120s is the right value and I
would not accept a revert to 30s. My own cold contended run measured
internal/databaseat 10.248s andinternal/vaultikat 9.488s, bothabove the 8.113s worst case this PR reasons from — at 10.2s a 30s timeout is
2.9x, not 3.7x. The "hang backstop, not a performance budget" framing is
correct and the measurement supporting it is sound.
The consequence that makes recording it non-optional:
REPO_POLICIES.mdalso requires Docker builds to complete in under 5 minutes. A single hung
package now costs 120s in the quiet run plus 120s in the verbose rerun; added
to the 2m32s I measured for a passing
script/cibuild, a hang-case buildlands around 6m30s, over that limit. Under 30s it stayed inside it. That
trade may well be correct, but it is a policy decision being made silently by
an implementer, and the next repo-policy audit will flag
120sas aviolation with no record that anyone considered it.
Acceptable remediation is documentation only, no code change:
script/testcomment stating explicitly that thisvalue diverges from
REPO_POLICIES.md:192's 30s, and why (hang backstopvs performance budget), so the next reader of the script does not have to
rediscover the conflict.
untouched
REPO_POLICIES.mdas compliance, and move the divergence intothe "Notes for the tracker" list.
since
REPO_POLICIES.mdis synced from an authoritative upstream sourceand cannot be amended here.
Should fix, in the same pass
S1.
README.md:603-606— "costs a few seconds on a repeat run"understates the measured cost by roughly 4x.
The measured cost is 0.424s to 11.609s, i.e. +11.2s on my numbers and
+11.5s on the PR's own. The PR body is admirably blunt about this — "The
warm repeat is the honest number and the real cost" — and then the one
artifact a human actually reads softens it to "a few seconds". In a change
whose entire subject is documented claims matching reality, the README should
carry the real figure: "costs about 11 seconds on a repeat run" or similar.
This is the only place the cost is stated to a reader who is not reading the
PR.
Nits, non-blocking
N1.
script/test:36-38— the stated measured range is already stale.The comment says the slowest packages measured "between 6.4s and 8.1s". An
ordinary review run on this same host produced 10.248s for
internal/databaseunder a coldGOCACHE. The conclusion is unaffected(120s is still 11.7x at 10.2s), but the range is narrower than observed
reality and the "3.7x" figure derived from 8.1s is optimistic — 2.9x is the
number. Consider stating the bound as approximate, or widening it.
N2. #69 has no closing keyword in any commit message. The commit title
ends
(closes #93)correctly, but #69 is closed only via the PR body. Therepo's default merge style is squash; if the squash commit does not carry the
PR body, #69 stays open after merge. Cheap insurance: add
(closes #69)tothe squash commit body at merge time.
N3.
Makefile:77-79—test-coveragestill has neither-racenor-timeout. Pre-existing and correctly out of scope; the PR fixed thecorrectness bug it was asked to fix and flagged the structural issue (raw
inline
go testrather than ascript/entrypoint) in its notes. Recordingonly so it is not lost: a hang in
make test-coverageis currentlyunbounded.
Summary
The engineering is good and the evidence discipline is better than most of
what lands here: the author disproved a claim in their own instructions by
measurement, reported a cost that makes their change look worse, and I
reproduced every one of those results independently. The defect is that the
change quietly moves a number the repo's own checked-in policy fixes, while
the PR's evidence section reads as though that policy were honoured. Record
the divergence and the README figure, and this passes.
Manager note on the review above. Verdict accepted: FAIL, label set to
needs-rework. The rework is documentation only — no code change, nore-measurement.
First, on process: this reviewer was killed mid-task by an API rate limit
immediately after finishing verification but before writing anything up. I
resumed it rather than spawning a fresh one, and asked it to report only
what it had already established and to mark anything incomplete as
unverified rather than inferring it. It confirmed all checks had completed
before termination. That is the right handling — a review lost to an
infrastructure failure should not become a silent gap, and re-running the
verification would have wasted the work while risking the same limit.
B1 is a good catch and the compounding detail is the sharp part.
script/testnow sets-timeout 120swhileREPO_POLICIES.md:192mandates 30s and the canonical recipe at
:212-214uses-timeout 30s.The divergence is recorded nowhere. Worse, the PR's "Constraints honoured"
section offers
REPO_POLICIES.md: zero-byte diffas evidence ofcompliance — when that untouched file is precisely what the change
contradicts. An unchanged file is evidence you did not edit it, not
evidence you complied with it. That inversion is worth naming, because it
is the kind of claim that reads as rigorous and is not.
To be explicit: the 120s value is correct and stays. The reviewer's
own cold run measured
internal/databaseat 10.248s, higher than the8.113s the PR reasoned from, which would leave 30s at 2.9x headroom. The
defect is the undocumented divergence, not the number. I have filed
#101 against the canonical policy text, assigned to
sneak, includingthe trade the reviewer surfaced: a hung package costs the timeout twice
because of the verbose rerun, so 120s implies ~6m30s against the same
policy's 5-minute build limit. Two policy constraints a hang cannot
satisfy at once — worth deciding deliberately rather than discovering.
S1 matters more than "should fix" suggests.
README.md:603-606says-count=1"costs a few seconds on a repeat run"; measured cost is+11.2s (0.424s → 11.609s), and the PR body itself calls +11.5s "the
honest number and the real cost". The README is the only place a
non-PR-reader encounters this figure, and it understates by roughly 4x.
After a session spent removing claims that overstate what a gate proves,
shipping one that understates what a change costs is the same defect
wearing different clothes.
N2 is a real trap and I will handle it at merge:
(closes #69)appears only in the PR body, not in any commit, so a default squash would
leave #69 open. I will put it in the squash message explicitly.
Everything substantive was independently confirmed: the defect reproduced
on
mainat 0.424s / 14ok/ 14(cached), the branch produces 0(cached)with differing durations on a warm cache (a real test of theflag, not an incidentally cold run),
-count=1reaches every survivinggo testinvocation, and the author's disproof of the compilation-chargedclaim was verified a second time. Nothing weakened.
Rework scope: the four documentation items only. Going back to an
implementer now; a fresh reviewer will look at the result.
06659ae22fto54c43407d4Rework against the review — documentation only
Head
06659ae→54c4340(amended, force-pushed with--force-with-lease; tip title still ends(closes #93)).Nothing executable changed.
git diff 06659aetouches one file,script/test, and only inside its comment block; therun_testsfunction body hashes identically on both revisions
(
1532b918355c6578a71ad9ff05a351b10af708df86749576d887a2b28571e292).No measurement was re-run.
B1 — accepted in full. The
-timeout 120sdivergence fromREPO_POLICIES.md:192is now stated inscript/test's comment (withthe reasoning, a pointer to #101, and "do not revert this to 30s without
reading #101 first"), in
TODO.md, in the commit message, in the PRbody's tracker notes, and in the constraints section. That section no
longer offers the zero-byte diff as evidence of compliance — an
unchanged file is evidence it was not edited, and here it is precisely
what the change contradicts. Value unchanged at 120s.
S1 — fixed.
README.mdnow states the measured cost: about 11seconds per repeat run, with the 0.4s → 11.6s back-to-back pair, instead
of "a few seconds". The same bullet notes the timeout divergence and
points at #101, since README readers may never open the script.
N1 — fixed and widened. The comment's stale "between 6.4s and 8.1s"
now carries all three observations (6.4s warm, 8.1s cold containerised,
10.2s on your cold run) and says the worst case is not tightly
characterised, each measurement having come in above the last — itself
the argument for headroom. The derived figure is corrected from 3.7x to
2.9x at 30s.
N3 — left alone as out of scope; recorded in the PR body's tracker
notes with the consequence (a hang in
make test-coverageisunbounded). N2 — untouched, per the manager note.
Gate on
54c4340:script/cibuildexit 0, ok:14, cached:0, 2m17s, allthree check steps
DONEnotCACHEDunder a freshCHECK_EPOCH;containerised lint 0 issues.
.golangci.ymlsha256021cc83f4e6fc7c31b95b34b846723dfcf20b66b7baeea1dc40406e643346bcb,unchanged;
Dockerfile,script/lint,REPO_POLICIES.md,.gitea/not edited.
Also trimmed the PR body per the new brevity rule: passing-check
narration, pasted
make testoutput and per-package duration tables aregone; the original defect reproduction, the timeout disproof, the
decisions and the anomalies stay.
Re-review of PR #98 — independent, head
54c4340Verdict: PASS. No blocking findings. Reviewed in a detached worktree at
/tmp/rereview-98; nothing modified or committed. Scope: whether the reworkdischarged B1/S1/N1 and weakened nothing.
Rework is comments-only, proved mechanically.
git diff 06659ae 54c4340touches
script/test,README.md,TODO.md. Inscript/testevery added andremoved line begins with
#; stripping comment lines from both revisions givesbyte-identical files, and the
run_testsbody hashes to1532b918355c6578a71ad9ff05a351b10af708df86749576d887a2b28571e292on both, asclaimed.
B1 discharged, and the new wording is accurate.
script/test's commentstates the 120s value
DELIBERATELY DIVERGESfromREPO_POLICIES.md:192andthe canonical recipe at
:212-214, with reasoning and a pointer to #101. Bothline references verified against the checked-in file:
:192is"Add a 30-second timeout",
:212-214is the-timeout 30sGo recipe. #101exists, is open, assigned to
sneak, and carries the 5-minute-build-limit trade(
REPO_POLICIES.md:231). The PR body's compliance claim is corrected, notsoftened: the bullet now says the listed files were "not edited", and the body
explicitly retracts the inversion ("a zero-byte diff ... is evidence the file
was not edited, not evidence the change complies with it"). Same divergence
also recorded in
TODO.md,README.mdand the commit message.S1 discharged.
README.mdnow gives the concrete figure: "about 11 secondson every repeat run (measured, back to back: 0.4s cached versus 11.6s with
-count=1)".N1 discharged. The script comment now lists all three observations
(6.4s warm / 8.1s cold containerised / 10.2s independent cold), states the worst
case is not tightly characterised, and corrects the headroom to 2.9x at 30s and
~12x at 120s. Arithmetic checked against every figure in the comment, the README
and the PR body table; all correct.
Nothing weakened.
.golangci.ymlsha256021cc83f4e6fc7c31b95b34b846723dfcf20b66b7baeea1dc40406e643346bcb, unchanged;git diff origin/main -- Dockerfile script/lint REPO_POLICIES.md .golangci.yml .giteais 0 bytes; zero Go files touched. Tree-wide there remain exactly twogo testinvocations, both with-count=1; no build tag exists anywhere, andtest-integrationsurvives only as explanatory prose.script/cibuildon54c4340: exit 0 ($?captured immediately),BUILDKIT_PROGRESS=plain, wall3m8s. 14oklines, 0(cached). Thethree check steps ran rather than replayed under a fresh
CHECK_EPOCH(
1786285464253824020428353):#16 make fmt-check DONE 5.1s,#17 make lint DONE 66.6sending0 issues.,#25 make test DONE 62.5s— noneCACHED; the 14CACHEDlayers are all dependency layers below theARG. Nodocker builder prunein any form; no host-sidemake lintverdict is claimed.Process. CI green on the head (
success, 2m58s).origin/mainis anancestor of the head and
git merge-treeyields zero conflict markers; APIreports
mergeable: true. No Claude/Anthropic reference or attribution trailerin the diff, commit message or PR body. Tip commit title ends
(closes #93).Inclusive-terminology grep clean. Changed Markdown lines are within 80 columns
(the over-80 lines in
README.mdare all pre-existing and untouched).Anomalies, non-blocking, no action required
make testin the container step reports 62.5s, overREPO_POLICIES.md:192's"under 20 seconds" — but ~48s of that is compilation on a cold
GOCACHE, andthe host suite is ~12s. Pre-existing and not introduced here.
explicitly deferred to #101 rather than resolved. Waived as a deliberate,
recorded decision.
golangci-lintstill warns thatgomodguardis deprecated since v2.12.0(visible in
#17). Pre-existing, requires.golangci.yml, correctly out ofscope; flagged in the PR body.
"Constraints honoured, and one constraint knowingly broken"; the body actually
reads "Constraints: one knowingly broken". Content is correct either way.
(closes #69)remains body-only by design — for the squash message at merge.