Directory company contact evidence¶
Status: proposed implementation design Date: 2026-09-12 Issue: #503
Context¶
Krak and De Gule Sider can publish work contacts for a company that has no website. Their pages cannot enter a bundle for a verified company domain. ADR-0016 decision 6 and ADR-0020 keep that bundle restricted to one domain. This design adds a separate evidence class. It does not change domain verification or enable a directory adapter in the current release.
The person mention and contact stores from #505–#507 now exist. The original
154 dependency has been met.¶
Decisions¶
Evidence and company identity¶
A directory observation belongs to a target CVR, provider, exact retrieval,
and source URL. Its evidence class is directory-company-page. It remains
outside web_evidence_bundle. Neither a directory URL nor a link on a
directory page creates a verified company website.
Accept only a public company detail page from krak.dk or degulesider.dk.
The company section must state the target CVR. A company name or search
snippet alone is not enough. Reject private person listings, search pages,
and pages that cannot separate the target company from nearby businesses,
adverts, or other listings. Validate the final URL after redirects too.
Each retained observation names the exact page receipt, artifact digest, projection version, source URL, fetch time, and quoted text range. Extraction keeps name, source-stated role, and work phone only as permitted by ADR-0015. A person phone requires an explicit link from that person to that number. A number next to a board member's name is not sufficient evidence. A general company number remains a company contact. Private-only data does not enter the derived stores. Suppression checks apply before publication, including re-extraction. Registry person resolution uses the existing deterministic rules and does not treat a directory name as a person identifier.
Request and runtime¶
Add an explicit directory_contacts collection goal. It can run without any
website goals. It uses the stored company CVR and name to plan one bounded
organic directory search through the existing search module. Acquire at most
one eligible company page per provider. Do not add directory calls to the
default website goals.
web-control owns search planning and durable work transitions.
web-acquisition owns directory page fetches through the existing page
acquisition module, proxy, and browser. Its URL controls, attempt receipts,
pacing, deadlines, budgets, and retries apply. web-llm owns extraction from
retained evidence. There is no new runtime or separate paid-service adapter.
Directory failure must not discard a successful website result.
Freeze the directory selection and extractor versions at admission. Retain a separate directory selection manifest with its provider and target CVR. Re-extraction selects exact retained directory evidence, makes no network request, and cannot accept a website bundle in its place. Missing, deleted, or expired input gives an explicit unavailable result.
Outcomes and public reads¶
A directory result does not make a website resolved. Existing website
outcomes retain their meaning. A directory-only run has no website
resolution claim. Report directory goal status separately as done,
unavailable, or failed, with a reason, provider, input coverage, cost,
and output counts. A complete extraction with no permitted contacts is
done with zero contacts; a blocked fetch is failed.
Publish evidence_class on directory-derived company contacts and person
mentions. The detail read and run report expose directory coverage and exact
source provenance. Website-specific filters exclude directory evidence.
Directory contacts do not imply contact permission or verified ownership.
The campaign completes only when all requested goals have terminal results.
Retention¶
Apply the current ADR-0015 amendments: fetched page Markdown and HTML are retained for 365 days from retrieval, including deletion of noncurrent object versions. Re-extraction does not extend that deadline. An objection or operator deletion takes precedence. Raw model requests, raw model responses, and screenshots are not retained. Derived contact suppression and deletion use the existing person/contact controls.
Source check and implementation gates¶
The Krak company search help describes company information and its update sources. A bounded read of the public DETALJEN DENMARK company page on 2026-09-12 showed both a company phone and management names, plus nearby company listings. It did not establish a direct person-to-phone link. This is why neither page-wide contact extraction nor proximity attribution is acceptable. A direct HTTP acquisition returned 403; successful production browser acquisition has not been proved.
Before implementing the adapter, demonstrate an allowed company-page fetch through the existing acquisition runtime and record how the target company section is isolated. Then build one end-to-end goal through request, search, acquisition, evidence retention, extraction, publication, and report. Its acceptance tests must cover a company with no website, wrong-CVR and private pages, unrelated listings, explicit and absent phone attribution, suppression, blocked fetches, independent website success, replay without fetching, expiry, and operator deletion. These are implementation gates, not completed checks.