agent-first-data 0.17.0

A naming convention that lets AI agents understand your data without being told what it means.
Documentation
{
  "$schema": "https://cmn.dev/schemas/v1/spore-core.json",
  "id": "agent-first-data",
  "name": "Agent-First Data",
  "version": "0.17.0",
  "domain": "agentfirstkit.com",
  "key": "ed25519.BwbSzqdDYyMN1pPW5snRk3afrJAovHn8aueMvDpfNKVw",
  "synopsis": "A naming convention that lets AI agents understand your data without being told what it means.",
  "intent": [
    "Encode all semantic information in the field name itself so agents parse structured data without external schemas, documentation, or type systems — _ms/_s/_epoch_ms for time, _msats/_sats/_usd_cents for currency, _bytes for size, _secret for auto-redaction",
    "Define a JSONL output protocol where every line carries a code field (startup for config state, tool-defined for status/progress, ok/error for results) plus a trace object for execution context (duration, token counts, cost, data source) — same structure whether the transport is CLI stdout, HTTP response body, MCP tool result, or SSE stream",
    "Provide three output formats via --output json|yaml|plain: JSON is the canonical lossless format, YAML preserves structure with quoted strings and --- separators, plain applies suffix-driven human formatting (epoch_ms → RFC 3339, _bytes → human-readable, _secret → ***, _ms ≥ 1000 → seconds)"
  ],
  "license": "MIT",
  "mutations": [
    "Remove the _size config suffix and the parse_size/ParseSize/parseSize helper from all four SDKs — byte sizes are now always an integer _bytes field, in config and output alike, keeping the unit in the key instead of a parseable string in the value (breaking)",
    "Add is_valid_rfc3339 and validate complete _rfc3339 date-times in afdata lint, requiring the mandatory RFC 3339 offset and rejecting a missing offset, a space separator, or a trailing timezone name",
    "Add is_valid_bcp47 and validate _bcp47 language-tag structure in afdata lint, rejecting the POSIX underscore form (zh_CN) and other malformed tags while still allowing well-formed-but-unregistered tags",
    "Complete strict-string format linting for _utc_offset, _rfc3339_date, and _rfc3339_time, which were previously type-checked only",
    "Enforce single-URL structure for _url fields in afdata lint — reject internal whitespace and bare user:pass@host credential strings while allowing scheme-prefixed and relative URLs",
    "Type-check numeric suffixes in afdata lint — durations must be numbers and minor-unit currency (_cents/_micro/_jpy) must be integers",
    "Pin _percent as a value in units of percent (recategorized from ratio to percentage), and clarify integer-vs-string encoding across the _epoch_, _sats, and _msats siblings"
  ],
  "bonds": [],
  "tree": {
    "algorithm": "blob_tree_blake3_nfc",
    "exclude_names": [
      ".git",
      ".cmn",
      "node_modules",
      "target",
      "dist",
      "build",
      "__pycache__",
      ".venv"
    ],
    "follow_rules": [
      ".gitignore"
    ]
  }
}