carlos / platform Public
Reviewed 856767d8 against the working tree and rev 5.4. Seven findings:
- P1 — Task 8, Steps 2–4: the prescribed cleanup breaks the next validation. Step 2 removes
.terraform/and.terraform.lock.hcl; Step 4 runstofu validate && tofu testwithout initializing again (plan:3538, plan:3631). I reproducedMissing required providerwithtofu validatein the uninitialized module. Fix: retain initialization through Step 4, or repeattofu init -backend=false -input=falsebefore validation.
- P2 — Task 6, Step 4: aliases and wildcard homes lose the installation stamp. The new call stamps primary routes before alias construction, but existing constructors create fresh entries without
Stamp(edgesfile.go:458, edgesfile.go:542). After failover, both the dead box’s alias and its successor’s alias therefore have stamp zero.dialBeatsretains the first sorted box on that tie, potentially routing custom-domain traffic to the dead box indefinitely. The proposed test checks withholding only. Fix: copy the primary’s stamp into exact aliases and served wildcard entries; test both against a stale predecessor’s file.
- P2 — Task 7, Steps 3–4: participation refusal permanently suppresses that release.
beginExecutableChangereturnserrSystemRefused, which is recorded asrefused(plan:3385). That outcome is terminal to the agent (systemstate.go:75); both observation and pending-request processing stop retrying it (systemleg.go:121). Removing.hostexecrecords consequently does not resume the update, contrary to §5.10 and the plan’s retry claim. Fix: record participation as a retryable deferral and test refusal → participation cleared → same promote applied through the agent.
- P2 — Task 6, Step 3: failed reads can starve healthy claims indefinitely. Failed reads leave both entry existence and
readAtunchanged (plan:2920). With 256 permanently unreadable claims first in the ordering, every pass selects those same claims; later healthy claims are never read or refreshed. Fix: track attempts separately from successful decisions and rotate or back off failures while retaining their last decisions. Add a test with 256 failing claims followed by a readable claim.
- P2 — Task 6, Steps 3–4: the publisher cannot sustain the stated ten-minute refresh. Reads are capped at 256 per pass, but the unchanged scheduler normally runs only every five to six minutes when the registry is stable (plan:2916, edgesfile.go:740). The plan’s 2,000-host example needs eight passes: roughly 40–48 minutes per refresh cycle. Existing tests call the cache directly and bypass this scheduling constraint. Fix: schedule additional bounded passes while claim reads remain due, independently of registry changes, and test the combined scheduler/cache behavior.
- P2 — Task 5, Step 3: incomplete records can authorize discharge.
Listchecks JSON syntax, whileDischargenever validatesInstanceStateor the presence of mapping evidence (plan:2446, plan:2513). A record containing only matching version, enrollment, cloud and an in-window timestamp passes: both volume loops are empty. Aterminatedrecord with empty mappings also passes despite the recording prohibition. Unknown versions are silently skipped, potentially hiding adverse history. Fix: validate same-enrollment records before evaluating discharge; incomplete, non-recordable or unsupported evidence must leave chores open. Add persisted-record tests, beyondObservetests.
- P2 — Task 8, Step 1: the policy test does not establish create-only or never-deleted behavior. Its sole assertion compares resource sets (plan:3517). Changing either statement to
Allow, removing a delete action, or breaking the conditional-write condition still passes. Fix: assert effect, principal, actions and conditions as well as exact resources; verify that mutations disabling each protection fail the test.
All 15 complete Go file blocks passed syntax parsing with gofmt. Full compilation and proposed tests were not run because the sandbox is read-only. No files changed.
Verdict: not ready.