The task-level review rated the split PASS with notes and found that the
architecture guard did not cover one of the three purposes spec D-J states for
it. Six places are corrected here before the branch review reads the spec, so
the reviewer works against a frozen target rather than a moving one.
- D-J is amended from three assertions to seven. The original three each have
teeth (verified by mutation) but together they missed an entire dimension:
nothing enumerated the composition root's own method set, so adding a method
there left all three assertions PASS, go build/vet clean, and the full
11-package suite green. The god object could regrow silently.
- The mutation list gains d through h, and mutation (a) is annotated with the
bypass the review found in my own positive control: (a) turns red because it
REMOVES CoverURL from CatalogService, not because anything detects the extra
root method. Rewritten as a copy that keeps the original — the shadowing form
(e) — mutation (a)'s design would have passed green.
- Two fixes the review proposed are recorded as rejected, with the spike
measurements, so they are not retried: asserting NumMethod()==0 on the value
type is unsatisfiable because embedding *T puts its methods in both method
sets (the legal tree already reports 22 — vacuously false, the mirror image of
P13's vacuously true assertion), and Method.Func identity cannot detect
shadowing because promoted methods are forwarding wrappers that already differ
on the legal tree (5153408 vs 5148192 unshadowed, 5148288 vs 5148192
shadowed).
- Line counts are pinned to the wc -l convention, verified against the same
convention used for the 856 baseline and auth.go's 234. The metrics table gains
a measured column: content.go 82, largest of the six files 298 (moderation.go,
not submission.go as the spec predicted).
- D-D records that ErrSubmissionConflict is also used by AccountService at
account.go:136, outside the submission and moderation lines, which makes the
SHARED ruling necessary rather than merely correct.
- The risk table gains two Route C properties that were previously only in
controller notes: the root has no named fields so s.objects is an ambiguous
selector (a compile-time barrier earlier than the guard, and the reason the
guard is the ONLY barrier against adding a concrete field), and go vet stays
silent on a root method shadowing a promoted one (vet_exit=0 measured), which
is why assertion 5 cannot be replaced by a reflect-based check.