You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Grouped Nice-to-have findings from the whole-codebase review (Med findings: #198, Low findings: #199). None of these block anything; pick up opportunistically.
internal/transport/client.go (flood gate) — the gate enforces a delay floor but does not serialise concurrent Do calls; irrelevant for the single-flight CLI today, worth revisiting only if concurrent calls ever appear.
internal/cli/audit.go (redaction) — the exact key session is in auditSecretParams, but a future session_id-style parameter would only be caught by the substring fragments if it contains one of them; purely latent.
internal/cli/run.go (dry-run) — --dry-run requires a resolvable credential profile although no API call is made; a preview without credentials could be allowed.
internal/auth/errors.go:17 — CodeGotNoLoginData is the only exported code without an Is… helper (asymmetric with the other codes).
testdata/mailinglist/update_mailinglist_request.xml:16 — trailing comma makes the request fixture invalid JSON; harmless today, but it is the declared request contract.
testdata/ various — get_<singular>-named fixtures (e.g. get_account_*, get_domain_*, get_mailaccount_*) encode filter-views of plural actions; optional rename to get_<plural>_*_single.xml for consistency with the fix: address Low-severity findings from the whole-codebase review #199 renames.
internal/kasread / internal/kaswrite — soap.Value is used as a deliberate cross-boundary DTO; recorded here so a future review does not reclassify it as a layering violation. No action.
Second-pass additions (2026-07-18 re-review)
The get_<singular> fixture-rename bullet above also applies to testdata/{cronjob,ddns,ftpuser,sambauser}/get_<singular>_* — note these files are referenced by test paths, so a rename must be paired with the test updates.
New Nice-to-have findings from the re-review:
internal/cli/audit.go:83 — the 256-byte elision threshold will elide legitimate long single-line values (DNS TXT/DKIM records) in the --dry-run preview once the DNS write slice lands; revisit the threshold or key it on secrecy then.
internal/cli/audit.go:19 + docs/usage/destructive-writes.md (audit-log example) — the canonical examples reference add_dns_settings/delete_dns_settings, which are not wired yet; switch to a wired action.
testdata/**/*_request.xml (~81 files) — no request fixture is referenced by any test; builder<->fixture alignment was verified manually once but is not anchored. Optionally add a round-trip pin per write module, or declare request fixtures documentation-only.
internal/session/store.go:113 — the withLock comment says flock.LockContext but the code uses TryLockContext (polling).
internal/soap/envelope.go:69 — "soap: empty document" is misleading for non-empty non-SOAP payloads; also compares err == io.EOF instead of errors.Is, inconsistent with the auth decoder.
internal/soap/value.go:248 — classifyType("") maps to KindNil, a dead branch (UnmarshalXML has no KindNil case); returning KindUnknown would be honest.
internal/api/errors.go + internal/auth/errors.go — IsCode(err, "") returns true for any non-fault error; guard code != "".
internal/kasread/kasread.go:46,80 — a comment calls the api fault predicates "transport-error helpers"; Get errors (not-found / ambiguous) carry no sentinels (latent — no caller branches on them yet).
docs/usage/destructive-writes.md — does not mention that the write-success output honours --output (it renders through the same pipeline as the read commands).
CHANGELOG.md — the released [0.1.0-alpha.1] block contains duplicated section headers; decide whether to consolidate or keep as history.
Grouped Nice-to-have findings from the whole-codebase review (Med findings: #198, Low findings: #199). None of these block anything; pick up opportunistically.
internal/transport/client.go(flood gate) — the gate enforces a delay floor but does not serialise concurrentDocalls; irrelevant for the single-flight CLI today, worth revisiting only if concurrent calls ever appear.internal/cli/audit.go(redaction) — the exact keysessionis inauditSecretParams, but a futuresession_id-style parameter would only be caught by the substring fragments if it contains one of them; purely latent.internal/cli/run.go(dry-run) —--dry-runrequires a resolvable credential profile although no API call is made; a preview without credentials could be allowed.internal/auth/errors.go:17—CodeGotNoLoginDatais the only exported code without anIs…helper (asymmetric with the other codes).testdata/mailinglist/update_mailinglist_request.xml:16— trailing comma makes the request fixture invalid JSON; harmless today, but it is the declared request contract.testdata/various —get_<singular>-named fixtures (e.g.get_account_*,get_domain_*,get_mailaccount_*) encode filter-views of plural actions; optional rename toget_<plural>_*_single.xmlfor consistency with the fix: address Low-severity findings from the whole-codebase review #199 renames.internal/kasread/internal/kaswrite—soap.Valueis used as a deliberate cross-boundary DTO; recorded here so a future review does not reclassify it as a layering violation. No action.Second-pass additions (2026-07-18 re-review)
The
get_<singular>fixture-rename bullet above also applies totestdata/{cronjob,ddns,ftpuser,sambauser}/get_<singular>_*— note these files are referenced by test paths, so a rename must be paired with the test updates.New Nice-to-have findings from the re-review:
internal/cli/audit.go:83— the 256-byte elision threshold will elide legitimate long single-line values (DNS TXT/DKIM records) in the--dry-runpreview once the DNS write slice lands; revisit the threshold or key it on secrecy then.internal/cli/audit.go:19+docs/usage/destructive-writes.md(audit-log example) — the canonical examples referenceadd_dns_settings/delete_dns_settings, which are not wired yet; switch to a wired action.testdata/**/*_request.xml(~81 files) — no request fixture is referenced by any test; builder<->fixture alignment was verified manually once but is not anchored. Optionally add a round-trip pin per write module, or declare request fixtures documentation-only.internal/session/store.go:113— the withLock comment saysflock.LockContextbut the code usesTryLockContext(polling).internal/soap/envelope.go:69— "soap: empty document" is misleading for non-empty non-SOAP payloads; also compareserr == io.EOFinstead oferrors.Is, inconsistent with the auth decoder.internal/soap/value.go:248—classifyType("")maps toKindNil, a dead branch (UnmarshalXMLhas no KindNil case); returningKindUnknownwould be honest.internal/api/errors.go+internal/auth/errors.go—IsCode(err, "")returns true for any non-fault error; guardcode != "".internal/kasread/kasread.go:46,80— a comment calls the api fault predicates "transport-error helpers";Geterrors (not-found / ambiguous) carry no sentinels (latent — no caller branches on them yet).docs/usage/destructive-writes.md— does not mention that the write-success output honours--output(it renders through the same pipeline as the read commands).CHANGELOG.md— the released[0.1.0-alpha.1]block contains duplicated section headers; decide whether to consolidate or keep as history.