Migration Guide: Log Args v1.1
This guide is for users who consume gonemaster JSON results and are upgrading from pre-coherency output to the v1.1 log-args contract.
Scope:
- CLI JSON outputs (
--json,--json-stream) - Server result payloads (
raw.entries[].args)
The entry envelope is unchanged:
timestamp,module,testcase,tag,level,args
The migration affects keys and value shapes inside args.
Biggest Changes
nsno longer containsname/ip.
- Old:
ns: "ns1.example/192.0.2.53" - New:
ns: "ns1.example",address: "192.0.2.53"
- Packed list strings were replaced by typed lists.
- Old:
ns_list,ns_ip_list,mailtarget_list,parent_addresses,zone_addresses - New:
servers,addresses,mail_targets,parent_servers,zone_servers
- ASN fields are normalized.
- Old: mixed usage (
asnas string/int/list-like,asn_listas packed text). - New:
asnis singular (int) andasnsis a collection (array<int>).
- Query identity keys are canonical.
- New standard:
query_name,query_type,query_class - Legacy query aliases are not part of current runtime inventory.
- Legacy generic aliases were removed from current runtime inventory.
- No longer emitted as runtime keys:
name,server,ip,type,class,rrtype
- Contract versioning is documentation-based.
arg_schemais not emitted in runtime output.- v1.1 is documented in specs, not carried as an
argsfield.
- Date/time string arguments are RFC3339.
- If a tag emits a date/time string argument (for example
RRSIG_EXPIRATION.date), it uses UTC RFC3339 (ISO 8601 profile).
Key Mapping (Old -> New)
| Old key | New key | New type |
|---|---|---|
ns (endpoint name/ip) | ns + address | string + string |
ns_list | servers | array<object> |
ns_ip_list | addresses | array<string> |
mailtarget_list | mail_targets | array<string> |
parent_addresses | parent_servers | array<object> |
zone_addresses | zone_servers | array<object> |
asn_list | asns | array<int> |
asn (collection semantics) | asns | array<int> |
asn (singular semantics) | asn | int |
type / rrtype | query_type | string |
class | query_class | string |
name (query context) | query_name | string |
server | address (or ns + address, tag-specific) | string |
ip | address | string |
servers-like object shape:
{"ns":"ns1.example","address":"192.0.2.53"}Example Migration
Old:
{
"Tag": "DS07_SIGNED_ON_SERVER",
"Args": {
"ns_list": "ns1.example;ns2.example"
}
}New:
{
"Tag": "DS07_SIGNED_ON_SERVER",
"Args": {
"servers": [
{"ns":"ns1.example"},
{"ns":"ns2.example"}
]
}
}Old:
{
"Tag": "WRONG_SOA",
"Args": {
"ns": "ns1.example/192.0.2.53",
"name": "example.com.",
"owner": "wrong.example."
}
}New:
{
"Tag": "WRONG_SOA",
"Args": {
"ns": "ns1.example",
"address": "192.0.2.53",
"query_name": "example.com.",
"owner": "wrong.example."
}
}Consumer Update Checklist
- Update deserializers to read typed collections:
serversasarray<object>addressesasarray<string>- role-specific lists like
parent_servers,zone_servers
- Stop splitting semicolon-delimited identity strings.
- Use typed fields directly.
- Treat
nsas name-only.
- Read IP from
address.
- Use canonical query keys.
query_name,query_type,query_class
- Normalize ASN handling in your consumer.
- Read
asnsfor multi-ASN outputs. - Treat
asnas singular-only.
Remove dependency on
arg_schema.Add a temporary compatibility shim only if you must ingest historical data.
- Map old keys to new keys at ingest time.
- Prefer writing downstream state only in v1.1 key format.
References
- Coherency contract: docs/specifications/log-args-coherency.md
- Canonical key glossary: docs/specifications/log-args-key-glossary.md
- Current runtime key inventory (human): docs/specifications/log-args-inventory.md
- Current runtime key inventory (machine): docs/specifications/log-args-inventory.json