Skip to main content
You can run this draft v0.1 reference harness locally; it is not a completed study. The source README retains its historical step boundaries; the separate laser-removal pack is now available and remains unvalidated.

Public questionnaire research harness (PRD-013 / TAT-380 Step 3)

This is an offline, synthetic research harness, not a completed study or an Industry Pack. Read the study design and the codebook first. All unresolved execution gates in the design still apply. No live collection, model downloads, model inference, form submissions, contact, outreach, deployment or spending happened here.

Run locally — $0, no network in the harness

With repository development dependencies installed:
The runner accepts only --dry-run and reads the invented, CC0-1.0 HTML in fixtures/. It never resolves fixture URLs, fetches pages, executes JavaScript or CSS, opens a browser, follows links, authenticates or submits forms. It writes captures.json, frequency.json and frequency.csv under research/out/ (gitignored). JSON envelopes explicitly mark the results synthetic; the adjacent CSV is the same synthetic demonstration, not empirical frequencies. Delete that directory to remove the local output. No actual sampling targets, search settings, sample sizes, agreement quantities or evaluator prices are set.

Collection boundary and provenance

scraper/harness.ts exports the frozen study queries (tattoo first, then laser removal, agency websites and combined auto wraps / PPF / tint), a transient HTML extractor, a capture function, a deterministic tagger and frequency writers. There were no seed URLs in the design; no real provider URLs were invented. The fixture URLs are reserved .example identifiers, not discovery results. There is deliberately no live network transport or search integration. capture(source, html) processes already supplied, permission-reviewed transient HTML; it is not authorization to acquire a real page. Before any future transport is implemented or real material is supplied, Gavin must resolve the design’s sampling, retention, analysis and permission gates. A future transport must enforce public-only destinations (including DNS/redirect checks), robots.txt for its actual user agent/path, terms, bounded requests, and site objections before fetching. Do not retrofit this API into an unrestricted crawler. Each source must name an allowlisted discovery query, industry/subtype, provider/template references, and a permission-review reference with recorded source license, public status, service relevance, completeness, explicit robots and terms decisions and transient-processing permission. These are human review attestations, not an automated robots parser or proof of permission. Disallowed, unclear or missing permission means skip and log; no text hash/tags are produced. Fixture permission flags cover only our synthetic source, never any real site. Only sanitized public HTTPS identifiers without credentials, query parameters or nonstandard ports are accepted. Metadata must be reviewed and contain no personal information or tokens; URL validation alone cannot establish public access. Captures retain URL, Pacific capture time with UTC offset and timezone name, industry, review/license references, backend/codebook revisions, status, reason, and a SHA-256 of visible questionnaire text after NFC normalization, whitespace collapse and trim (nfc-whitespace-v1). Text exists only transiently. No HTML, verbatim prompt, screenshot or full text is written. Inputs/textarea answers, script/template content and navigation are omitted. Source licenses do not license models or authorize reuse by themselves. The static extractor supports form labels, legends, associated select choices, and explicit policy paragraphs inside forms. Generic free text, contact-only pages and marketing outside forms do not establish factor presence. Hidden/aria-hidden/inert elements are ignored. Dynamic scripts, CSS-dependent rendering and frames make completeness unresolved; they are not rendered or probed. This is intentionally conservative and not a browser visibility proof. A reviewer must establish that a static questionnaire is complete before absence can be asserted. Login/password and recognizable CAPTCHA flows are excluded; never attempt to reveal hidden steps. Unsupported/unreadable flows are missing. An objection immediately quarantines the new record without text processing. Aggregation removes prior captures for that same origin across industries from pending outputs too. Maintain objections when rerunning; do not drop objection records to resurrect captures. Stop acquisition and processing, pause publication, and let Gavin resolve retention/deletion. The harness does not contact the site or automatically delete previously written output; existing output must be treated as quarantined and withdrawn pending that review. Publish only reviewed aggregates.

Factor decisions and $0 backend

deterministic-keywords-v1 maps visible prompt cues to exact tattoo codebook IDs; style means color treatment, not an arbitrary art-style name. Evidence consists only of generated locators and non-verbatim rationales. Ambiguous cues and unknown variables require human review; the rules do not resolve semantic conflicts. other pricing cues abstain for human paraphrasing instead of forcing a tattoo id. No non-tattoo codebook is approved, so those inputs are excluded and their output has only an empty other placeholder. Laser-removal Pack #2 remains Step 4, outside this change. The experimental “Noul” field is explicitly uncalibrated rule strength on 0–1: matched cue = 0.9, complete/no cue = 0.5, unresolved/unmapped = 0. These are software heuristic constants, not approved study thresholds, calibrated probabilities, factor importance or pricing weights. No score cutoff filters observations. Incomplete records use uncertain instead of absent for unobserved factors and never enter a frequency denominator. Golden fixtures lock the deterministic behavior; they do not validate recall on real websites. False positives/negatives are possible; independent blinded human coding and the design’s agreement plan remain required before interpreting results. No verified model artifact or model license was supplied for offline inference. We therefore selected no model: no Kev/Laya/Decider/Apache license claim, no paid API, no paid download, no hosted inference. TaggerBackend is the future local interface; OfflineOpenWeightStub fails closed. Before implementing it, record artifact/revision, source, actual license text, weight/code coverage, restrictions, reviewer/date, and verify offline operation and Apache-2.0 suitability. Hosted TypeSafe Jev is forbidden without a CFA check plus Gavin’s explicit OK. Do not send page text to third parties or introduce hosted fallbacks.

Tables and limitations

The aggregator deduplicates canonical URLs and identical text hashes within each industry, conservatively retaining the first eligible capture in input order. That is a harness convention, not an approved provider-weighting study decision; record ordering/review amendments and provider/template dependence before analysis. Each factor reports present count, complete resolved denominator, present/denominator (or null for an empty denominator), plus uncertain, missing, excluded, duplicate and quarantined counts. Uncertain means eligible-but-unresolved for that factor; incomplete captures are counted separately as missing. Intervals are explicitly null with a reason: confidence level and dependence treatment have not been approved. No confidence interval, Cohen’s kappa or study quantity is invented. Search/public-page/language/geography/template selection biases remain. Output is not a representative provider census, and empty non-tattoo tables are not absence evidence. Review/suppression and agreement gates still block public study claims. Frequency must never set factor weights, multipliers, importance or evaluator prices. Those remain with the consented TAT-378 holdout. No pack, evaluator, site or Mintlify files are changed by this harness.

Laser-removal reference pack (PRD-014)

The separate laser-removal reference pack uses the supplied canonical evidence: an unvalidated convenience sample of eight sources, six with forms, not output from this synthetic harness. Its counts are descriptive, not pricing weights or study validation. Business-configured prices are required; no public observed price is a default. See the pack for intake, manual-review gates and modeling limitations.