Skip to content

trooth 0.16.4

Choose a tag to compare

@trooth-eng trooth-eng released this 13 Oct 02:53
· 15 commits to main since this release

A company's Trust Profile, section by section

  • New trooth profile <domain|slug> [--section <name>[,<name>...]] [--json | --markdown], the CLI part of serializing every category of the Trust Profile (with the API and the MCP tool). It sends one request, GET https://trooth.co/api/network/profile?q=<domain>&contract=2 (TROOTH_WEB overrides the base), with the same deadline, size limit, retry, slug resolution, NO_COLOR handling and error documents as check, and prints every section the record carries in the page's order: overview, identity, history, funding, product, pricing, stack, security, privacy, ai, hosting, infrastructure, procurement, relationships, proof, people, documents, evidence, cards and faq (twenty on trooth.co today). Each section shows its state and who said it; each fact its value, who said it and its date when Trooth recorded one. A fact the record does not date prints "date unknown", never a date taken from the record's update time, a reading or another fact. A section the company left empty prints "not published"; one shared on request only, hidden by the company or unreadable on that load says which. Notes, groups and items are kept, and a contested fact lists every account without choosing one.
  • Section names are the MCP tool's, which are the record's own profile.sections[].id. The typed facts (facts[], the only facts with dates) are joined to profile rows by section, label and value, and shown in the section their category belongs to: identity and registration in identity, hosting and recovery in hosting, pricing and pricing-add-ons in pricing, privacy and privacy-roles in privacy, ai-practices in ai, security in security. Those categories are also accepted by --section. A typed fact no row shows is added to its section, so nothing the record carries is dropped; facts that run past one page are read to the end from the same record version, or the command exits 3. The mapping is documented in the README and in bin/lib/profile.mjs.
  • The output says at the top, in text, JSON ("signed": false, verify_with) and Markdown, that the profile is the company's own declared record and is not signed: Trooth signs only the witness statement for a reading it took, which trooth verify <domain> checks.
  • --json prints {subject, query, contract, read_at, found, ..., sections: [{name, title, state, provenance, said_by, meaning, url, facts, notes}]}, described by the new schemas/profile-output.v1.schema.json; the generated TypeScript, Pydantic and Go types include ProfileOutput, ProfileRecordRef, ProfileSection, ProfileFact, ProfileAccount and ProfileNote. scripts/gen-types.mjs now writes an integer literal as int in Go (it wrote string). --markdown prints the same profile as Markdown.
  • Exit codes: 0 found and printed; 1 no published record, an honest absence, with the claim link when the API gives one; 2 usage (including an unknown section and --json with --markdown); 3 network or contract error; 6 withheld; 7 output not delivered. trooth profile --help lists them, and the README, trooth --help and the source's header say the same.
  • New tests/profile.test.mjs in npm test, against a loopback server serving a live response for trooth.co saved unedited on 2026-10-09 (tests/fixtures/profile/trooth.co-2026-10-09.json): every section in order, every typed fact exactly once with its own date and no other, "not published", --section and its aliases, --json against the schema, --markdown, a slug, an absence with and without a claim link, a withheld record, paging and a stale page, a contested fact, a body with no profile, and exits 2 and 3. tests/schemas.test.mjs validates profile --json output against the schema, and tests/cli-0163.test.mjs covers profile --help.

Install: npm install -g trooth@0.16.4 or run npx trooth@0.16.4. Published to npm with provenance from this repository.