{
  "service": "mandate-office",
  "version": "0.3.11",
  "build": {
    "id": "387f99a1289e",
    "time": "2026-10-31T10:24:47Z",
    "source": "sha256(src)"
  },
  "changelog": [
    {
      "version": "0.3.0",
      "date": "2026-10-30",
      "changes": [
        "Template fixes (HammerMap v2); a principal with kind 'legal' needs 'country' (see the template changelogs)."
      ]
    },
    {
      "version": "0.3.1",
      "date": "2026-10-30",
      "breaking": true,
      "changes": [
        "Build id in /api/health and the X-Mandate-Build header.",
        "Template download links use a random id; the fill data is stored encrypted for 1 hour. Links issued before 0.3.1 no longer work.",
        "Later deploys under 0.3.1 (see deploys): template wording fixes, Croatian (sudreg) and Danish (CVR) company lookups."
      ]
    },
    {
      "version": "0.3.2",
      "date": "2026-10-30",
      "changes": [
        "Service version and changelog: /api/changelog lists service versions and recorded deploys with build ids; /api/health shows last_change and version_full (version+build).",
        "Template changelogs: breaking entries are separate (breaking: true, at the version where they took effect, with recorded_in) and listed in breaking_changes.",
        "de_zvg_bid_poa 1.3.2: statements that are not powers are separate paragraphs after the list of powers.",
        "get_company HR: postcode field (when the register gives it), MB as an 8-digit string, NKD version not guessed (names_by_version).",
        "Privacy Notice section 7: last updated 30 October 2026."
      ]
    },
    {
      "version": "0.3.3",
      "date": "2026-10-30",
      "changes": [
        "Anonymous aggregate usage counts: each MCP message (tools/call per tool), REST request and A2A call adds 1 to a daily counter (day, channel, tool or route, country, client name or user-agent family, partner id hash). No IP addresses, no query contents, no personal data; kept 400 days. Written after the response; a failure never affects the request.",
        "GET /api/stats?days=30 (admin key only): totals per day, channel, tool, country, client and partner, plus unique clients.",
        "Privacy Notice draft 0.2 (30 October 2026): section 3 describes the anonymous usage counts."
      ]
    },
    {
      "version": "0.3.4",
      "date": "2026-10-30",
      "changes": [
        "Home page rewritten for people deciding whether to connect Mandate to their agent: MCP endpoint with a copy button, the live tools grouped by job, register and law coverage with sources and licences, Claude Desktop / Cursor / Claude Code / generic MCP config, limits and operator details. No API or MCP behaviour changed.",
        "Site CSP allows same-origin scripts (script-src 'self') for the copy button; still no third-party scripts, fonts or tracking."
      ]
    },
    {
      "version": "0.3.5",
      "date": "2026-10-30",
      "changes": [
        "Static agent landing pages: /registries/ and /registries/{cc}/ for the 12 live company registers (CZ, DK, EE, FI, FR, HR, IE, LT, LV, PL, SE, SI), /guides/ and /guides/{country}-{form}/ for the 31 company forms in get_formation_guide (27 states). Data from the production API (site_src/gen_agent_pages.py), with a short MCP and REST call example on each page; listed in sitemap.xml and llms.txt; footer links. No API or MCP behaviour changed."
      ]
    },
    {
      "version": "0.3.6",
      "date": "2026-10-31",
      "changes": [
        "First operations (free beta): ready document packages from standard templates, ordered by an agent. MCP tools list_operations and order_operation; REST GET /api/operations, GET /api/operations/{id} (input schema, example), POST /api/operations/{id} ({input, formats}; ?format=pdf|docx&document=<id> for one file).",
        "es_auction_poa 1.0.0: bilingual ES/EN special power of attorney to bid in one BOE Portal de Subastas auction + checklist (signing before a notary/consul or abroad with apostille and translation, Portal registration, deposit rules, 3-day proof of representation).",
        "de_gmbh_formation 1.0.0: German GmbH/UG with the statutory Musterprotokoll (GmbHG Annex 1) as a draft for the notary, English courtesy translation, shareholder-list data sheet and checklist (in person or video notarisation, register application, transparency register, trade notice, GNotKG fee formula).",
        "Every checklist statement carries a mark (K checked in the original source, J our reading, KM not verified) and source URLs checked 2026-10-31. No case assessment, no filing, signing or payment; the notary or consul authorises the final document."
      ]
    },
    {
      "version": "0.3.7",
      "date": "2026-10-31",
      "changes": [
        "get_company NL: live from the free KVK open dataset (Basisbedrijfsgegevens, EU high-value dataset, CC BY 4.0, no key). By KVK number (8 digits): legal form code, status, start date, insolvency flag, postcode region, SBI activities; BV and NV only, no names, addresses or persons, not a legal extract. A name search, or a number not in the dataset, returns the official kvk.nl search link plus GLEIF LEI holders (matched on registered_as).",
        "find_law adds FI, CZ, HR, LV and SI. CZ: 902 acts and constitutional acts in the Sbírka zákonů with no recorded repeal or end of effect, from the e-Sbírka open dataset (amending acts left out) (Ministry of the Interior, NKOD terms), by number (90/2012 Sb.), abbreviation or title; links https://e-sbirka.gov.cz/eli/cz/sb/{year}/{number}/. FI: 22 core company, civil, notarial, family and tax acts with titles from the Finlex open data API (CC BY 4.0), by number (624/2006) or title. HR, LV, SI: curated core lists (company, obligations/civil, notaries, court register, VAT, corporate and income tax, insolvency) linking to Narodne novine (original publication), likumi.lv and PISRS; titles checked at the source, in_force not stated.",
        "find_law with no results in a link-only country returns the official portal and its link patterns in the same answer."
      ]
    },
    {
      "version": "0.3.8",
      "date": "2026-10-31",
      "breaking": true,
      "changes": [
        "find_law and get_law_link: every law item (EU and all national indexes) has status (in_force | repealed | unknown), status_detail, consolidated_url (current consolidated version, null where the source has none), checked_at (ISO date of the last check at the source) and status_source {name, url}. in_force is stated only where the official source gives it; otherwise status is unknown.",
        "Status sources: EU CELLAR in-force flag + latest consolidated CELEX; FR Légifrance etat (VIGUEUR / ABROGE ...); FI Finlex consolidated isInForce (new, checked nightly); CZ e-Sbírka repeal and effect dates; SE rkrattsbaser SFS (Upphävd); LU Legilux inForceStatus; DE listing in the gesetze-im-internet.de table of current federal law; EE, ES, AT, LT, PL, DK and NL from their existing source flags (a DK or NL historical-version flag gives unknown, not repealed). IT, IE, HR, LV, SI: unknown.",
        "CZ index now also holds repealed acts (status repealed, with the repeal date); they are left out with in_force_only=true (default) and ranked last otherwise.",
        "Breaking: PL items renamed the old source field status to source_status; status now carries the common value above.",
        "Nightly refresh: Finlex status for the FI acts and sentinel checks (known in-force and repealed acts); a failed check keeps the previous index.",
        "FR codes: state from Légifrance /list/code (etat with end date), because the /search hit can say VIGUEUR for a repealed code; get_law_link fr:LEGITEXT… now returns the code title and state."
      ]
    },
    {
      "version": "0.3.9",
      "date": "2026-10-31",
      "changes": [
        "New operation apostille_translation 1.0.0 (all 27 EU states): for a document type, issuing state and destination state, whether Regulation (EU) 2016/1191 exempts it from the apostille and whether a multilingual standard form replaces the translation; otherwise the competent apostille authority (HCCH page, fee as published there), e-Apostille and e-Register, whether a sworn or certified translation is needed and the destination's official translator register, and a step checklist. Data in server/src/data/apostille/eu27.json (HCCH status table, HCCH authority pages, e-APP chart, e-Justice), checked 2026-10-31.",
        "New operation it_srls_formation 1.0.0: Italian SRL semplificata formed by videoconference on the Ministry of Justice standard model (DM 155/2022 Annex 2), Italian deed draft + English courtesy translation + checklist (codice fiscale, capital paid by transfer to the notary's dedicated account, fee limit, filing). The notary receives the deed.",
        "New operation fr_eurl_formation 1.0.0: French SARL whose sole shareholder is the manager, on the statutory model articles (Code de commerce Annex 2-1), French text + English courtesy translation + checklist (capital deposit, one fifth paid up, legal notice, guichet unique). No notary needed.",
        "es_auction_poa 1.1.0 (HammerMap test of 31.10.2026): the auction ID is checked against subastas.boe.es; an ID that does not exist gives draft_incomplete with an 'AUCTION NOT FOUND' warning (verify_auction: false skips the check). The deposit, managing authority code, cuenta de expedientes and BOE-B announcement are taken from the Portal (new optional inputs for each), and the power refers to the deposit shown on the Portal instead of a fixed 20%. Refund to the depositor (LEC 652.2) with an account-holder field, optional reservation of bid and post-award powers, a ratification clause, 'en nombre de tercero', expanded court name with article, nationality adjective in lower case, Spanish NIF for a company grantor, representative contact, certificate and bank fields.",
        "es_auction_poa checklist: signing routes (Spanish notary by video on portalnotarial.es with a qualified certificate and Autofirma, consulate in person, notary at home + apostille + translation), a warning that the court clerk may reject a privately signed QES power, the AEAT branch (RGR 103 and 103 bis, LGT 46), the 3-day proof (LEC 647.1), why cesión de remate is excluded (LEC 647.3), Estonian apostille facts, PAdES rather than ASiC. Unverified points stay marked [KM].",
        "Every order_operation result has a unique order_id and ordered_at next to operation_id; binary downloads send X-Order-Id.",
        "es_auction_poa (action and template es_auction_poa_v2) is public for all agents (decision M32), as the operation already was; the spec now says so. es_aeat_auction_poa stays partner-only."
      ]
    },
    {
      "version": "0.3.10",
      "date": "2026-10-31",
      "changes": [
        "es_auction_poa 1.1.1 (HammerMap retest of 1.1.0): the checklist item on accepting the title on record and the earlier charges now cites LEC art. 669.2 (it cited 669.1, which sets the deposit); the cesión de remate item says 'el ejecutante y los acreedores posteriores' (LEC art. 647.3). Both checked on the BOE consolidated text (LO 1/2025 version, in force since 3 April 2025).",
        "Property description in the power built from the Portal fields: property type, address, finca registral and land registry, with normal casing and 'n.º' (for example 'vivienda sita en Calle Miguel Ángel, n.º 15, 03184 Torrevieja (Alicante), finca registral n.º 28.299 del Registro de la Propiedad n.º 2 de Torrevieja, ...'), plus an English version. The raw Portal text stays in auction_check.asset_raw, the parts in auction_check.asset_parts. The same clean text is used when es_auction_poa_v2 is prefilled from the Portal; when the asset is not real estate or the registry line cannot be read, the raw text is used as before.",
        "es_auction_poa checklist: the Spanish notarial fee base for a general power (EUR 30.050605, RD 1426/1989 Annex I, number 1.1.a; EUR 6.010121 per extra grantor above two) is now marked checked, the total stays not verified; the Estonian apostille rule cites the Minister of Justice regulation no. 38 of 27.11.2009, § 2(2) (a notary does not apostille their own document; another notary, also in the same office, does); the VALIDe format list (XAdES, CAdES, PAdES; no ASiC) is marked checked and the PAdES advice stays our reading."
      ]
    },
    {
      "version": "0.3.11",
      "date": "2026-10-31",
      "changes": [
        "es_auction_poa 1.1.2 (HammerMap test 3 of 1.1.1): the BOE Portal can contradict itself (for SUB-JA-2026-267707 the 'Dirección' field says 'Nº15' while the registry description in 'Información adicional' says 'calle Miguel Ángel, número veinte'). The power keeps using the Dirección field. New checklist item [J] (Spanish + English): if the address or description data on the Portal conflict, order a nota simple from the Registro de la Propiedad (sede.registradores.org) before bidding.",
        "es_auction_poa: automatic address check. The house number in the Dirección field is compared with a number (digits or Spanish words up to cien) written right after the same street name in the registry description. A mismatch adds an 'ADDRESS MISMATCH ON THE PORTAL' warning (in warnings and auction_check.warnings), auction_check.address_check with both numbers, and a checklist item naming the detected conflict. Text that cannot be parsed gives no warning."
      ]
    }
  ],
  "deploys": [
    {
      "version": "0.3.10",
      "build": "0963269334de",
      "time": "2026-10-31T09:47:57Z",
      "branch": "main",
      "deployment": "3bc12eb9"
    },
    {
      "version": "0.3.9",
      "build": "710ddf8af242",
      "time": "2026-10-31T09:34:46Z",
      "branch": "main",
      "deployment": "a30b13bb"
    },
    {
      "version": "0.3.8",
      "build": "193551d8d120",
      "time": "2026-10-31T06:12:52Z",
      "branch": "main",
      "deployment": "da0b38b9"
    },
    {
      "version": "0.3.8",
      "build": "193551d8d120",
      "time": "2026-10-31T02:19:57Z",
      "branch": "main",
      "deployment": "3c9925df"
    },
    {
      "version": "0.3.8",
      "build": "193551d8d120",
      "time": "2026-10-31T02:19:26Z",
      "branch": "refresh-check",
      "deployment": "7a6a6b8f"
    },
    {
      "version": "0.3.8",
      "build": "feefdf4c1a33",
      "time": "2026-10-31T02:12:48Z",
      "branch": "refresh-check",
      "deployment": "f9e4c045"
    },
    {
      "version": "0.3.8",
      "build": "ad62224328f8",
      "time": "2026-10-30T23:56:53Z",
      "branch": "main",
      "deployment": "0c7075e3"
    },
    {
      "version": "0.3.8",
      "build": "9f6094bb1c82",
      "time": "2026-10-30T23:56:25Z",
      "branch": "refresh-check",
      "deployment": "79143c67"
    },
    {
      "version": "0.3.8",
      "build": "53c80fad9807",
      "time": "2026-10-30T23:53:34Z",
      "branch": "main",
      "deployment": "b30965aa"
    },
    {
      "version": "0.3.7",
      "build": "3945c1d52453",
      "time": "2026-10-30T23:28:33Z",
      "branch": "main",
      "deployment": "cde0eaec"
    },
    {
      "version": "0.3.7",
      "build": "3945c1d52453",
      "time": "2026-10-30T23:26:19Z",
      "branch": "main",
      "deployment": "1c00cc78"
    },
    {
      "version": "0.3.6",
      "build": "1f9135b744d2",
      "time": "2026-10-30T23:06:53Z",
      "branch": "main",
      "deployment": "e992cdd6"
    },
    {
      "version": "0.3.5",
      "build": "0ae0c525b2fb",
      "time": "2026-10-30T22:00:10Z",
      "branch": "main",
      "deployment": "984bf01a"
    },
    {
      "version": "0.3.4",
      "build": "c7ef60523acc",
      "time": "2026-10-30T21:47:59Z",
      "branch": "main",
      "deployment": "9b114130"
    },
    {
      "version": "0.3.3",
      "build": "ea89fbd6a435",
      "time": "2026-10-30T21:19:43Z",
      "branch": "main",
      "deployment": "9f17c61a"
    },
    {
      "version": "0.3.2",
      "build": "be42f2ca90cb",
      "time": "2026-10-30T19:02:36Z",
      "branch": "main",
      "deployment": "f88a908e"
    },
    {
      "version": "0.3.1",
      "build": "725158cb4a69",
      "time": "2026-10-30T18:55:10Z",
      "branch": "main",
      "deployment": "47726ae7",
      "note": "backfilled: Denmark company lookup"
    },
    {
      "version": "0.3.1",
      "build": "ff883af88201",
      "time": "2026-10-30T18:26:43Z",
      "branch": "main",
      "deployment": null,
      "note": "backfilled: build seen in /api/health, deployment id not recorded"
    },
    {
      "version": "0.3.1",
      "build": "7d655878ef4a",
      "time": "2026-10-30T18:05:49Z",
      "branch": "main",
      "deployment": null,
      "note": "backfilled: build seen in /api/health, deployment id not recorded"
    },
    {
      "version": "0.3.1",
      "build": "4a92cc11c227",
      "time": "2026-10-30T18:05:06Z",
      "branch": "main",
      "deployment": null,
      "note": "backfilled: build seen in /api/health, deployment id not recorded"
    },
    {
      "version": "0.3.1",
      "build": "5e49a50ae72c",
      "time": "2026-10-30T18:03:27Z",
      "branch": "main",
      "deployment": "5c58dde9",
      "note": "backfilled from deploy log"
    },
    {
      "version": "0.3.1",
      "build": "87705a142fd5",
      "time": "2026-10-30T17:58:29Z",
      "branch": "main",
      "deployment": "b8d90f09",
      "note": "backfilled from deploy log"
    },
    {
      "version": "0.3.1",
      "build": "df9d9aa4f49c",
      "time": "2026-10-30T17:46:47Z",
      "branch": "main",
      "deployment": "26257029",
      "note": "backfilled from deploy log"
    }
  ]
}