SKILL.md v1 compliance

Organisation ISO Collect

Download ISO certificates and write certifications.json per supplier.

No reviews yet 0 installs
Use to discover and download ISO certificates for each ready supplier in the enumerate manifest, writing certificates/ and certifications.json beside identity.json. MUST run bundled lib/iso_collect.py — never regenerate the collector. Manifest.suppliers is an array (not a map). Uses Talos via qonstrue_broker and wine2o2. Repairs unusable websiteUrl values and falls back to name + accreditation-registry search (BSI/LRQA/UKAS). Skips skip_fresh / skip_no_website. No cortex_search.
isosupplierscertificatescollectcompliance

Versions

  • v1 # Changelog ## 1.7.0 - Single-record mode now derives its write root the same way as the three writer skills: `ORGANIZATION_ROOT` joined with `collection_root_for_slug(resourceTypeSlug)`, rather than a hardcoded `SUPPLIERS_ROOT`. `supplier` aliases to `suppliers`, so a supplier run's `certifications/` and `certifications.json` land exactly where they did before; a customer record's artefacts would now land under `/organization/local/customer/{id}/`. - `--resource-type-slug` is now required **whenever `--reference` is given** — single-record mode needs it to resolve the write root, and a record read with no root to write under is not a usable run. It stays optional at the grammar level otherwise: manifest mode and shard mode (`RUN_ID`-driven) still call `main()` with no CLI arguments at all, and are unaffected. - Blueprint-side only: the marketplace writers (`partnerIdentitySourceBuilder`, `cortexProfile`) remain supplier-rooted, so customer records still have no upstream provisioning path. This change alone does not make customers work. ## 1.6.0 - Single-record mode (`--resource-type-slug` / `--reference` / `--resource-id`) now reads the record from `{collection_root}/{resource_id}/resource.json` on the cortex mount when `--resource-id` is given (as `supplier-iso-certification-service` always supplies it) — `qb.get_resource` (Postgres) is no longer consulted on that path, so a run no longer reads both stores in one turn. A missing or unreadable `resource.json` fails the run explicitly rather than falling back. Shard mode (`RUN_ID`, manifest-driven) is unaffected: it never read `get_resource` or `resource.json` — manifest rows already carry `supplierDir`. - **Deployment precondition:** `commit_ingest` does not yet write `resource.json` (only `identity.json` and `data.json`, and it publishes no `Sources.ResolveResource`), so a record created by `resource-import` or `pcf-commit` has no projected file yet. The marketplace fix for that (spec §9.1) must deploy before this read switch reaches production. ## 1.5.0 - Adds a single-record entry point for the Supplier ISO certifications action: `python lib/iso_collect.py --resource-type-slug '<slug>' --reference '<ref>'` resolves the partner folder from the record (same rule as supplier-financials-write), builds one manifest-shaped row, and collects for that supplier alone — no manifest, no enumerate step. Shard mode and the manifest path are unchanged; an explicit record wins over an inherited `RUN_ID` environment. - Evidence files are written to `certifications/` rather than `certificates/`, matching `certifications.json` beside them; each row's `path` follows. The JSON's shape is unchanged. - The record fallback reads the country from `address.countryCode` as well as the top level — the built-in supplier type keeps it there. ## v1.5 - Repair unusable manifest `websiteUrl` values (qa1: `3m` for 3M UK - WINTERTHUR TECHNOLOGY UK → zero certificates while a name-based sandbox search found them on 3m / BSI): bare domains are scheme-repaired; otherwise the corporate domain is derived from an "official website" search on the company name (including the trading-as alias after ` - `), and when that fails too, discovery searches the name against accreditation-registry hints (ISO 9001/14001/45001, OHSAS 18001, BSI, LRQA, UKAS, capped at 8 searches). The manifest row `reason` records which path ran. - Download with a browser-like `User-Agent` — corporate sites (e.g. 3m.com) 403 the old `QonstrueISOCollector/1.0` agent. ## v1.4 - Report each shard item to the agent-control-plane via `qb.batch_item_done` instead of writing a `shard-<i>.json` file ledger. ## v1.3 - Bound `qb.talos_search` with `timeout_sec=60`. It was the only Talos call in the per-supplier discovery without a timeout, so a slow/degraded Talos hung the whole shard on one supplier (every item in the shard stalled). ## v1.2 - Hard requirement: agents must execute bundled `lib/iso_collect.py` only — never regenerate/rewrite the collector. - Document that enumerate manifesto `suppliers` is a **JSON array** (not a map); `.items()`-style collectors are invalid. ## v1.1 - Parse Talos search payloads via `companies[].urls` (not only top-level `results`/`urls`). - Accept wine2o2 extract returns as JSON array, object, or markdown-fenced string (fixes `'list' object has no attribute 'get'`). - Prefer certificate-like PDFs; demote 20-F / investor filings; cap downloads/extracts per supplier. - Use 180s wine2o2 timeout (mesh-aligned). If `wine2o2_extract` is unavailable or fails, fall back to `wine2o2_to_text` + `llm_chat_text` structured JSON. - Only write rows with a non-empty `standardNumber` into `certifications.json`. ## v1 - Initial release: Talos discover + download + wine2o2 summarize into per-supplier certificates/ and certifications.json. 11/3/2026