Skip to content

Nice-to-have bundle from the 2026-07-18 whole-codebase review #200

Description

@chmmou

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:17CodeGotNoLoginData 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/kaswritesoap.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:248classifyType("") maps to KindNil, a dead branch (UnmarshalXML has no KindNil case); returning KindUnknown would be honest.
  • internal/api/errors.go + internal/auth/errors.goIsCode(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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions