Conversation
Use kmsg.ControlRecordKey and kmsg.EndTxnMarker types instead of manual kbin parsing for transactional control records. Add support for newer fields in __consumer_offsets (OffsetCommitValue v4 TopicID, ConsumerMemberMetadata v2 Generation, v3 Rack, fix OwnedPartitions to v1+ instead of only v1) and __transaction_state (TxnMetadataValue v1 PreviousProducerID, NextProducerID, NextProducerEpoch, ClientTransactionVersion). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- configs: "inlcude" -> "include" in --with-docs and --with-types flag descriptions - misc: "incompatable" -> "incompatible" in probe-version short description - txn: "Describe producers quotas." -> "Describe active producers." Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add --type-filter flag (mapped to ListGroupsRequest.TypesFilter) to filter groups by type (Classic, Consumer; Kafka 3.0+). Add GROUP-TYPE column to the table output. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
When the metadata response version is >= 7 (Kafka 2.1.0+), print the leader epoch after the leader ID in the detailed partition output. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add list (ListTransactions) and describe (DescribeTransactions) commands to the txn subcommand group. - list: sharded request to all brokers, with --state and --producer-id filter flags - describe: takes transactional IDs as args, shows state, producer info, timeout, start timestamp, and involved topics/partitions Also fix typo in describe-producers short description. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- describe: uses ApiVersionsRequest to print supported and finalized feature version ranges (Kafka 3.3+) - update: uses UpdateFeaturesRequest to update finalized feature flags; requires --run safety flag, supports --validate-only Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- describe-cluster: DescribeClusterRequest with --include-authorized-ops flag, prints cluster ID, controller, and broker table - describe-quorum: DescribeQuorumRequest for __cluster_metadata:0, prints leader/epoch/high-watermark and voter/observer replica states - Register features subcommand Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…subcommands Add share group support (KIP-932, Kafka 4.0+) with subcommands: - list: list share groups (alias for group list --type-filter share) - describe: describe share groups via ShareGroupDescribe (API key 77) - delete: delete share groups (alias for group delete) - describe-offsets: describe share group start offsets (API key 90) - alter-offsets: alter share group start offsets (API key 91) - delete-offsets: delete share group offsets for topics (API key 92) Registered under both "admin share-group" and top-level "share-group" / "sg". Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add --consumer-protocol flag to group describe for KIP-848 consumer groups (Kafka 4.0+), using ConsumerGroupDescribe API (key 69). Shows member epochs, target assignments, subscribed topics, and assignor. - Filter listGroups to ["classic", "consumer"] so bare "group describe" doesn't try to describe share groups with the wrong API. - Add listGroupsByType helper for type-filtered group listing. - Update --type-filter help text to include Share. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
shardFail already increments *failures, so the extra failures++ caused each shard error to be counted twice. This meant the "all N requests failed" guard never triggered when all shards failed. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Switch from RequestWith to RequestSharded so that multi-group requests with different coordinators are handled correctly, and partial shard failures show results from successful coordinators instead of dying. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Shared parser for offset specifications used by consume --offset, group seek --to, share-group seek --to, and topic trim-prefix --offset. Offset syntax: start, end, start+N, end-N, +N, -N, N, N:M, :N, N:end, :end, :end+N, :end-N. Timestamp syntax (@-prefixed): numeric (ns/ms/s by digit count), YYYY-MM-DD, RFC3339, -duration, +duration. Ranges via @t1:T2 with positive durations relative to T1. Custom duration parser supports 'd' (days) in addition to Go's standard units. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add global --format flag (text, json, awk) to replace --dump-json/-j. The old flag is marked deprecated but still works by mapping to json. - text: current tabwriter output (default) - json: structured JSON with _command and _version metadata - awk: tab-separated values without headers Add FormattedTable helper in out/ that buffers rows and flushes in the requested format. Add MarshalJSON for commands with non-tabular output. Wire into group list (tabular pattern) and describe-cluster (mixed pattern with structured JSON) as proof of concept. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Flatten the admin namespace by promoting all subcommands to top-level: acl, config, quota, dtoken, logdirs, reassign, user, txn. Renames with backward-compatible aliases: - partas → reassign (alias: partas) - user-scram → user (alias: user-scram) - client-quotas → quota (alias: client-quotas) - configs → config (alias: configs) - acl describe → acl list (aliases: ls, describe, d) Create cluster command with info (metadata), describe-cluster, describe-quorum, elect-leaders, and features subcommands. Mark admin as hidden+deprecated. Mark top-level metadata as hidden+deprecated in favor of cluster info. All old command paths continue to work. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace the hand-written offset parser with the shared offsetparse package. This adds support for all new offset formats: - @timestamp: unix timestamps (ns/ms/s), YYYY-MM-DD, RFC3339, durations - @t1:T2: timestamp ranges with relative-to-T1 durations - +N/-N: relative offsets (forward from start, backward from end) - N:M, :N, N🔚 offset ranges with colon separator - :end+N, :end-N: until-end with delta Timestamp start offsets are resolved via kadm.ListOffsetsAfterMilli and applied using kgo.Client.SetOffsets. Timestamp end offsets use the existing untilOffsets/PauseFetchPartitions mechanism. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
New `group seek GROUP --to VALUE` command that adjusts committed offsets for a consumer group. The group must be Empty or Dead. Supports all offset specifications via the shared parser: - start/end: earliest/latest offsets - +N/-N: relative to current committed offset - N: exact offset - @timestamp: resolved via ListOffsetsAfterMilli Includes approval phase: preview table shown before committing. Flags: --dry-run (preview only), --execute (skip prompt), --topics (filter to specific topics). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
New `share-group seek GROUP --to VALUE --topics TOPICS` command that adjusts start offsets for a share group via AlterShareGroupOffsets. Supports start, end, exact offset N, and @timestamp specifications. Does not support +N/-N relative offsets (share groups have start offsets, not committed offsets). Includes the same approval phase as group seek: preview table, --dry-run, --execute, and interactive confirmation. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add -G FILTER / --grep FILTER flag (repeatable) for filtering consumed records. Multiple filters are AND'd. Filter DSL: k:REGEX match record key v:REGEX match record value hk:REGEX match any header name hv:REGEX match any header value h:NAME=REGEX match a specific header's value t:REGEX match topic name Prefix with ! to negate: !v:warning excludes records matching "warning". Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Overhaul group describe to always fetch offsets and show lag in the
default output. The previous non-verbose output (broker, state, proto)
is redundant with group list.
New flags:
- -s/--summary: show only summary section
- -m/--members: show only members section
- -l/--lag: show only lag section
- --lag-per-topic: aggregate lag per topic
- --lag-filter EXPR: filter by lag (>N, >=N, <N, <=N, =N)
Other improvements:
- Show total lag in summary section
- Include committed-but-unassigned partitions in lag output
- Also list offsets for partitions with commits (not just assignments)
- Replaced interface{} closure chain with struct-based describeRow
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
New `topic describe TOPICS...` showing unified topic information: - Summary: topic name, ID, partition count, replication factor - Partition table: leader, epoch, replicas, ISR, offline replicas - Configs (with -c or -a): key, value, source, sensitivity Health filters for ops: - --under-replicated: ISR < replicas - --unavailable: no leader - --under-min-isr, --at-min-isr: ISR vs min.insync.replicas Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Consume: - --print-control-records: include transaction markers in output - --fetch-max-partition-bytes: per-partition byte limit for fetches - --timeout: exit if no message received for the given duration Produce: - --delivery-timeout: per-record delivery timeout - --max-message-bytes: max record batch size - --allow-auto-topic-creation: auto-create missing topics - -o/--output-format: replaces --verbose-format (renamed) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
topic create: --if-not-exists suppresses TOPIC_ALREADY_EXISTS error. topic delete: --if-exists suppresses UNKNOWN_TOPIC_OR_PARTITION error. topic list: -i/--internal includes internal topics, --regex filters by pattern. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add --help-json global flag that dumps the entire command tree as JSON, including command names, descriptions, aliases, flags (type, default, description), and nested subcommands. Hidden/deprecated commands are included with a deprecated field. An LLM agent can call "kcl --help-json" once to ingest the full CLI surface without recursively running --help on every subcommand. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Extend the config file format to support named profiles: current_profile = "production" [profiles.production] seed_brokers = ["kafka-prod:9092"] [profiles.local] seed_brokers = ["localhost:9092"] Old flat configs (no [profiles] section) continue to work unchanged. Add global --profile/-C flag to override the active profile for a single command (e.g., kcl -C staging group list). New myconfig subcommand: profile (use, list, current, rename, delete). Also add lag filter parser tests for group describe. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Group seek tests (kfake): - TestSeekResolveStartEnd: verify ListStartOffsets/ListEndOffsets - TestSeekCommitAndVerify: produce, commit, seek to start, verify - TestSeekRelativeOffset: parse -5, compute relative from committed Consume grep test (kfake): - TestGrepFilterWithKfake: produce records with keys/headers, verify key filter, value filter, combined AND filter, header filter Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add --from-file flag to load topic/partition pairs from a JSON file:
[{"topic": "foo", "partition": 1}, {"topic": "bar", "partition": 0}]
Can be combined with the existing -t flag syntax.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
New commands for managing KRaft quorum voters: - cluster add-controller: add a voter with --controller-id, --directory-id, and --listeners flags - cluster remove-controller: remove a voter with --controller-id and --directory-id flags Uses AddRaftVoter/RemoveRaftVoter APIs (Kafka 4.0+). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add -v/--verbose flag to share-group describe that joins with DescribeShareGroupOffsets to show start offsets and lag per partition alongside the member assignment table. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
topic alter-config: new porcelain using IncrementalAlterConfigs with clean --set, --delete, --append, --subtract flags and --dry-run. user: rename describe to list (with describe/d aliases for compat). share-group describe -v: show start offsets and lag per partition by joining with DescribeShareGroupOffsets. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Group describe kfake tests: - TestDescribeLagComputation: produce records, commit offset, verify lag = end - committed - TestParseLagFilterIntegration: verify lag filter with computed values Topic describe kfake tests: - TestTopicDescribeMetadata: create 3-partition topic, verify metadata - TestTopicDescribeConfigs: create topic, verify config fetching works - TestInt32sToString: unit test for helper function Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…Reader Replace kcl's custom format/parse_out.go and format/parse_in.go with kgo.NewRecordFormatter and kgo.NewRecordReader from franz-go. These APIs support many more features: attributes, unpack, base64raw, hex numbers, bool, regex input, json input, etc. - Remove --escape-char / -c flag (always uses % now, matching kgo) - Remove --max-delim-buf flag (kgo handles buffering internally) - Replace format.ParseWriteFormat with kgo.NewRecordFormatter - Replace format.NewReader with kgo.NewRecordReader - Replace static ParsesTopic() check with runtime r.Topic == "" check - Delete the entire format/ package (parse_out.go, parse_in.go, common.go) - Update consume and produce help text to document kgo formatter capabilities - Remove go-strftime dependency (now handled inside kgo) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Reformat unpack syntax into a clean categorized layout. Expand number formatting to list each hex/big/little variant on its own line. Add output-format documentation to produce with cross-reference to consume. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Rename 'kcl cluster info' to 'kcl cluster metadata' as the primary name, keeping 'info' as a backwards-compatible alias. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Always fetch and display the last stable offset (LSO) alongside start and end offsets. The stable offset shows how far read_committed consumers can read; when it differs from end, there is an open transaction. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add hidden `kcl topic consume` and `kcl topic produce` subcommands as aliases for the top-level `kcl consume` and `kcl produce` commands. This aids discoverability for users exploring the topic subcommand tree. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add %D (delivery count) and %A (acquisition deadline) to consume help text — these are new share group format verbs added to franz-go. Add -t/--topic flag to produce as an alternative to the positional topic argument, matching kafkacat/kcat conventions. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Rewrite format documentation for both consume and produce to closely
follow the franz-go RecordFormatter and RecordReader godoc. Each format
option is on its own line. All modifiers are documented with concrete
examples.
Consume additions:
- %d also accepts number formatting in braces (e.g., %d{big64})
- Delimiter rules for strftime/go (pounds, braces, brackets)
- Time is always in UTC
- Unpack error behavior documented
- %a ";number" suffix accepts any number format
- %a{timestamp-type} explains pre-0.10 records
Produce additions:
- Sized verbs must occur before what they size
- JSON values are compacted after reading
- Concrete examples for hex/base64/json text decoding
- Regex text matching documented
- Timestamps can only be read as numbers (not strftime/go)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…nt for -o end Add two missing config resource types to config alter/describe: g, group group configuration (Kafka 4.0+) cm, client-metrics client metrics subscription (Kafka 3.7+) This enables e.g. kcl config alter my-share -tg -s share.auto.offset.reset=earliest Also update config examples to use new --set/--delete flags instead of deprecated --kv syntax, and add examples for the new entity types. Print a stderr hint when consuming from end of topic so users know the command is not hung while waiting for new records. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- sg describe: always show offsets/lag (was behind --verbose), add --summary flag with TOTAL LAG line, remove -v flag - sg delete: add --dry-run and --regex flags (matching group delete) - sg seek: add --to-file for per-partition offsets from JSON file (matching group seek), make --topics optional with --to-file - sg offset-delete: rename from delete-offsets to match group's offset-delete naming - Delete describe-offsets command (folded into describe) - Delete alter-offsets command (redundant with seek --to-file) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace out.Die/out.MaybeDie with returned errors across all commands. Commands now use cobra RunE instead of Run, and return fmt.Errorf instead of calling out.Die. Helper functions that previously called out.Die now return errors to their callers. The out package gains: - ExitCodeError type for errors with specific exit codes - Errf() to create ExitCodeError values - HandleError() for format-aware error output (JSON when --format json) main.go calls out.HandleError on the error from root.Execute(), which formats the error as JSON or plain text depending on --format. out.Die and out.MaybeDie remain (marked deprecated) for use in goroutines and callbacks where returning an error is not possible: - consume goroutine and EachPartition callbacks - produce Produce callback - transact/transactMirror goroutines - client bootstrap code - voter/admin DieJSON callbacks 68 RunE conversions across 33 files, ~290 out.Die/MaybeDie calls converted to returned errors. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Parse cmd.Example into an array of non-empty lines and include it in the --help-json output. This makes examples programmatically accessible for LLM-assisted usage and documentation generation. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- consume_test.go: handle new (Offset, error) return from parseOffset - describe_test.go: handle new (map, error) return from fetchTopicConfigs - consume.go: defer cancel() to prevent context leak on early error returns after context.WithCancel Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Convert ~90 error returns to use out.Errf with appropriate exit codes: - ExitUsage (2): bad flags, missing required args, invalid combinations, unrecognized option values, mutually exclusive flags - ExitNotFound (4): profile not found, group not found, no groups to describe, no topics to seek All other errors remain as plain fmt.Errorf (defaulting to exit code 1). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Remove ExitAuth (3), ExitNotFound (4), ExitTimeout (5) — these aren't useful enough to justify. An LLM reads error messages, not exit codes. Shell scripts just need success/failure/bad-usage: 0 success 1 runtime error (Kafka, network, etc.) 2 usage error (bad flags, missing args) Convert all ExitNotFound calls back to plain fmt.Errorf (exit code 1). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Delete transact command entirely (unused, niche) - Delete admin delete-records (superseded by topic trim-prefix which supports symbolic offsets and timestamps) - Delete topic alter-config (use 'config alter -tt' instead, which handles all resource types uniformly) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Flag consistency fixes: - Rename --dry to --dry-run in config alter and topic create - Remove --run from elect-leaders, features update, quota alter; replace with --dry-run (execution is now the default, --dry-run previews without applying) - features update: merge --run + --validate-only into single --dry-run - Add --topic/-t flag to consume (matches produce, kafka scripts, rpk) - consume now accepts topics via both positional args and -t flag Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
KIP-1071 isn't released yet (Kafka 4.1+). Remove the premature streams-group list/describe/delete commands. Can be re-added when the KIP ships and stabilizes. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Standardize all tab-writer table headers to use hyphens: LEADER EPOCH → LEADER-EPOCH END OFFSET → END-OFFSET OFFSET LAG → OFFSET-LAG IS FUTURE → IS-FUTURE GROUP ID → GROUP-ID TOTAL LAG → TOTAL-LAG ASSIGNMENT EPOCH → ASSIGNMENT-EPOCH TOPIC ID → TOPIC-ID This matches the convention already used by NewTable/NewFormattedTable headers (e.g., CURRENT-OFFSET, LOG-END-OFFSET, MEMBER-ID). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
… format - Add --version flag to root command (set via ldflags -X main.version) - Add -t/-g short flags to all ACL subcommands (list, create, delete) - Add --header/-H to produce for attaching static headers to records - Convert topic describe partition table to format-aware output (supports --format json|awk) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace raw BeginTabWrite/NewTable with FormattedTable across all commands that output tabular data, so --format json|awk works everywhere: - misc list-offsets, offset-for-leader-epoch - logdirs describe (both aggregate and detailed paths) - metadata brokers and topics tables - group delete, group describe (lag and member tables) - share-group list, delete, describe (members and offsets tables) - topic trim-prefix result table - topic list (via metadata.PrintTopics) Remaining BeginTabWrite usage is in non-data contexts: - consumer_offsets/transaction_state (internal topic decoders writing to buffers, not stdout) - admin describe-cluster/describe-quorum (already have format switching; BeginTabWrite is in the text-only path) - acl create/delete (informational pre/post output, not the main table) - topic describe error lines Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Move all non-data output (dry-run messages, confirmation prompts, "no results" notices, error diagnostics) from stdout to stderr across all commands. This ensures stdout contains only structured data when using --format json or --format awk, making output safe for jq/awk. Files updated: acl, admin, configs, features, group describe/seek, share-group seek/sharegroup, topic, trim-prefix. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- misc: broker error messages in list-offsets and offset-for-leader-epoch - misc: verbose "trying" message in errtext - myconfig: all confirmation messages (Switched, Renamed, Deleted, linked, unlinked, no symlink, no profiles, no profile set) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- configs: remove trailing period from "aborting." error message - consume: print fetch errors to stderr via EachError (was silently swallowed with a TODO comment) - main: remove stale TODO about removing cobra Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add unified --section flag to control which output section is displayed.
This replaces per-command section flags (--summary, --lag, --members,
--cluster, --brokers, --topics, --all).
Behavior per format:
text: all sections by default, --section filters to one
awk: default "main" section, --section selects which
json: always all sections (--section ignored)
Commands updated:
group describe (sections: summary, lag, members)
- Delete --summary, --lag, --members, --lag-per-topic, --lag-filter
- JSON now includes lag/offset data (was missing entirely)
- AWK defaults to lag section
share-group describe (sections: summary, members, offsets)
- Delete --summary
- TOTAL-LAG moved to summary section
- JSON now includes offsets/lag data (was missing)
- AWK defaults to offsets section
topic describe (sections: summary, partitions, configs)
- AWK now supports --section configs and --section summary
- AWK defaults to partitions
cluster metadata (sections: cluster, brokers, topics)
- Delete --cluster, --brokers, --topics, --all
- AWK now supports all three sections
- AWK defaults to topics
describe-cluster (sections: cluster, brokers)
- AWK now supports --section cluster
- AWK defaults to brokers
describe-quorum (sections: voters, observers)
- AWK/text now filterable by section
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Run gofmt -w across all source files. Remove redundant --configs/-c and --all/-a flags from topic describe (replaced by --section configs). Update help text to reflect --section usage. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
consume: "output format" -> "record output format" produce: "record only delimiter" -> "record input format" Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
ExitJSON calls os.Exit(0) directly, bypassing cobra's RunE error handling. Replace with DumpJSON (prints JSON, no exit) followed by return nil, letting cobra handle the clean exit. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Delete ExitJSON, ExitErrJSON, ExitCode, Exit, ErrAndMsg, MaybeExitErrMsg. None of these are called anywhere in the codebase. Remove the kerr import that was only needed by the deleted functions. Remaining public API: Die, MaybeDie (deprecated, for goroutines/callbacks), DumpJSON, HandleError, Errf, ExitCodeError, BeginTabWrite/To, NewTable, NewTabWriter, NewFormattedTable, MarshalJSON, DieJSON. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace the two DumpJSON callers (misc raw-req, acl create error path) with MarshalJSON for consistent _command/_version metadata in all JSON output. Delete DumpJSON and its encoding/json import from the out package. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.