# Changelog of EU TED Tenders & Public Procurement Leads (`arclay-tn/eu-ted-procurement-intelligence`) Actor

- **URL**: https://apify.com/arclay-tn/eu-ted-procurement-intelligence/changelog.md
- **Full Actor documentation**: https://apify.com/arclay-tn/eu-ted-procurement-intelligence.md

### \[unreleased]

#### 🚀 Features

- *(01-01)* Initialize uv project scaffold, deps, and tooling config
- *(01-01)* Package skeleton, structlog config, root Typer app
- *(01-01)* Shared disclaimer + attribution module (LEGAL-05)
- *(01-02)* SourceConfig/SourcesRegistry models and YAML loader
- *(01-02)* Ship config/sources.yaml with verified TED metadata
- *(01-03)* CanonicalModel base + Notice (SCHEMA-01) + Lot (SCHEMA-02)
- *(01-03)* Buyer (SCHEMA-03), Supplier (SCHEMA-04), Award (SCHEMA-05)
- *(01-03)* CPVReference (SCHEMA-06), SourceManifest (SCHEMA-07), package exports, cross-model invariants
- *(01-05)* Add doctor command for environment/config diagnostics (CLI-01)
- *(01-05)* Add sources list/verify sub-app and httpx dependency (CLI-02)
- *(02-01)* Implement PrivacyConfig model, loader, and shipped privacy.yaml
- *(02-01)* Implement recursive structured-field suppression (Mechanism 1)
- *(02-02)* Implement free-text email/phone/name detection (Mechanism 2)
- *(02-02)* Implement recursive record-level free-text redaction
- *(02-03)* Implement suppress\_record single entry point
- *(03-01)* Implement common source-connector interface (TED-06)
- *(03-02)* Implement SQLite state db connection factory (RELY-04)
- *(03-02)* Implement StateRepository checkpoints and run manifests (RELY-04)
- *(03-02)* Implement append-only raw JSONL storage (STORE-01)
- *(03-03)* Raw TED response models and expert-query builder (TED-03)
- *(03-03)* TedSearchClient with retry, throttle, and timeout (TED-01, TED-04, RELY-02)
- *(03-03)* Iteration-token pagination with empty-notices termination (TED-02)
- *(03-05)* Implement TedConnector satisfying SourceConnector (TED-06)
- *(03-05)* Implement source-neutral ingestion runner (RELY-04)
- *(03-05)* Implement ingest ted Typer command (CLI-03)
- *(03-04)* Record real TED fixtures (corrigendum pair, French notice, search/exhaustion pages)
- *(03-04)* Live-network verification suite (TED-01) and dated documentation review
- *(04-01)* Normalization package skeleton, warning vocabulary, TED date parser
- *(04-01)* Decimal-only paired money parsing (NORM-02)
- *(04-01)* Text normalization and NORM-08 language selection
- *(04-02)* Add CPV reference build script and generated cpv\_codes.json
- *(04-02)* Add NUTS + country reference build script and provenance record
- *(04-03)* Live-probe TED valid notice-field list
- *(04-03)* Extend DEFAULT\_NOTICE\_FIELDS with place-of-performance + 5 lot fields
- *(04-03)* Pin fixture recorder to connector field list, re-record fixtures live
- *(04-04)* Reference-table loaders and country normalization
- *(04-04)* CPV dedup, validation, and parent-chain hierarchy
- *(04-04)* Place-of-performance classification into NUTS/country codes
- *(04-05)* Implement map\_notice composing every field-level normalizer
- *(04-06)* Implement map\_lots() and map\_record()
- *(04-06)* Real-batch normalization run with warning histogram
- *(05-01)* Bump canonical schema to 1.1.0 with Phase 5 additive fields
- *(05-01)* Add identity package with deterministic IDs and payload hashing
- *(05-01)* Wire identity/ids.py into the mapper (NORM-05)
- *(05-02)* Live-probe TED organisation-identifier field shape and population rate
- *(05-02)* Extend DEFAULT\_NOTICE\_FIELDS with organisation-identifier fields
- *(05-02)* Re-record all 5 TED contract fixtures with organisation-identifier fields
- *(05-04)* Resolve\_amendments() batch-scoped corrigendum linkage (NORM-06)
- *(05-03)* OrganizationRegistry with identifier-first, no-fuzzy-merge resolution
- *(05-03)* Resolve\_buyers() builds the Buyer dimension with currency-safe totals
- *(05-05)* Dedup\_records() -- idempotent replay collapse keyed on record\_id (NORM-07)
- *(05-05)* Resolve\_batch() -- compose map -> dedup -> amendments -> buyers
- *(05-05)* Real-batch identity-resolution verification script
- Add safety actor dataset schema
- Add dataset schemas to sellable actors
- *(industrial)* Add current EEA site register (2007-latest)

#### 🐛 Bug Fixes

- *(03)* Correct plan 02 wave/depends\_on to eliminate race on connectors/base.py
- *(04)* Force LF line endings on reference-data JSON to prevent Windows checkout drift
- *(04)* Re-add reference-data JSON with normalized LF line endings
- *(05)* Filter to is\_latest notices before buyer aggregation to prevent double-counting amended notices
- *(05)* Update 16 normalization tests for multilingual\_french fixture re-recording drift
- Prevent raw upstream payload leakage in actors
- Make safety actor prefilled run resilient
- Make industrial actor example return rows
- Make Actor QA audit CI safe
- *(funding)* Stop duplicate rows, sort newest first, retry outages
- *(safety-gate)* Stop duplicate rows and add public alert details
- *(buyer-supplier)* Use TED iteration paging without duplicates
- *(ted-actor)* Clean failures, spend cap, batched pushes
- *(safety-gate)* Never time out during detail enrichment

#### 📚 Documentation

- Initialize project
- Research findings
- Define v1 requirements
- Create roadmap (18 phases)
- *(01)* Auto-generated context (discuss skipped)
- *(01)* Research phase domain
- Persist verbatim canonical schema spec (section 5)
- *(phase-1)* Add validation strategy
- *(01)* Create phase 1 plans (5 plans, 3 waves)
- *(01-01)* Complete foundations scaffold plan
- *(01-02)* Complete source registry plan
- *(01-04)* Add LEGAL\_AND\_DATA\_USE.md citing Commission Decision 2011/833/EU
- *(01-04)* Add SOURCE\_PROVENANCE.md documenting the v3 Search API contract
- *(01-04)* Complete legal/provenance/privacy documentation plan
- *(01-03)* Complete canonical schema models plan
- *(01-05)* Complete CLI doctor + sources plan
- *(01-05)* Complete CLI doctor + sources plan
- *(phase-1)* Complete phase execution
- *(phase-1)* Evolve PROJECT.md after phase completion
- *(02)* Auto-generated context (discuss skipped)
- *(02-privacy-suppression-engine)* Research phase domain
- *(phase-2)* Add validation strategy
- *(02)* Create phase 2 plan 01 (structured suppression)
- *(02-privacy-suppression-engine)* Plan free-text detection and PRIV-04 pitfall gate
- *(02-01)* Complete privacy config + structured suppression plan
- *(02-02)* Complete free-text personal-data detection plan
- *(02-03)* Record resolved free-text tooling decision and close Phase 2 privacy design
- *(02-03)* Complete privacy suppression engine plan
- *(phase-2)* Complete phase execution
- *(phase-2)* Evolve PROJECT.md after phase completion
- *(03)* Auto-generated context (discuss skipped)
- *(03)* Research TED connector API contract and pagination pitfalls
- *(phase-3)* Add validation strategy
- *(03)* Create phase 3 plans 01-02 (base connector, state/storage)
- *(03)* Plan TED client, contract gate, and ingest CLI (plans 03-03..03-05)
- *(03-01)* Complete test-infra and source-connector-interface plan
- *(03-02)* Complete state-store and raw-jsonl-storage plan
- *(03-03)* Complete TED retrieval core plan
- *(03-05)* Complete TED connector, ingestion runner, and CLI plan
- *(03-04)* Complete TED contract-test pitfall gate plan
- *(phase-3)* Complete phase execution
- *(phase-3)* Evolve PROJECT.md after phase completion
- *(04)* Auto-generated context (discuss skipped)
- *(04)* Research phase domain
- *(04)* Resolve research open questions in context
- *(phase-4)* Add validation strategy
- *(04)* Create phase 4 plans (6 plans, 4 waves)
- *(phase-4)* Sync validation table with final 6-plan structure
- *(04-01)* Complete normalization primitives plan (dates, money, text, warnings)
- *(04-02)* Complete CPV/NUTS/country reference-data plan
- *(04-03)* Complete TED connector field extension plan
- *(04-04)* Complete reference-table normalization plan
- *(04-05)* Complete map\_notice integration plan
- *(04-06)* Complete lot mapping and real-batch verification plan
- *(phase-4)* Complete phase execution
- *(phase-4)* Evolve PROJECT.md after phase completion
- *(05)* Auto-generated context (discuss skipped)
- *(05)* Research identity resolution, dedup, and amendment handling
- *(05)* Resolve research open questions in context
- *(phase-5)* Add validation strategy
- *(05)* Create phase 5 identity-resolution plans
- *(05-01)* Complete identity foundation plan
- *(05-02)* Complete TED organisation-identifier field extension plan
- *(05-04)* Complete amendment resolution plan
- *(05-03)* Complete organization identity resolution plan
- *(05-05)* Complete identity-resolution-dedup-amendment-handling plan 5
- *(phase-5)* Complete phase execution
- *(phase-5)* Evolve PROJECT.md after phase completion
- *(06)* Auto-generated context (discuss skipped)
- *(06)* Research data quality, quarantine, reliability hardening
- *(06)* Adopt research recommendations in context
- *(phase-6)* Add validation strategy
- *(06)* Create phase plan (6 plans, 3 waves)
- *(marketing)* Add measurable 90-day demand plan
- Record TED CPV wildcard incident and regression
- Record API activation status
- Refine launch channel guidance
- Record LinkedIn launch result
- Add data APIs marketing asset
- Refresh activation evidence
- Correct promotion channel status
- Refresh pricing benchmark references
- Record live production audits
- Record confirmed reddit promotion
- Verify linkedin cover branding
- Add organic promotion compliance guardrails
- Record current apify quality and revenue audit
- Record safety actor deployment verification
- Add public task landing pages
- Record industrial task smoke test
- Record TED task failure root cause
- Record public examples conversion update
- Record live Store discount state
- Refresh live TED quality evidence
- Record catalog Store health audit
- Add customer support guidance
- Add support guidance to actor catalog
- Record public examples release
- Record TED QA prefill fix
- Add non-expiring first-run example
- Record Apify Store indexing gap
- Record live portal rollout
- Record Apify quality audit
- Add sales execution runbook
- Record catalog example input audit
- Record saved Actor example inputs
- Record fresh TED reliability run
- Record acquisition funnel snapshot
- Record procurement CTA deployment
- Record live demo CTA deployment
- Record date-safe public onboarding
- Record current social funnel evidence
- Prepare LinkedIn legacy link cleanup
- Record current examples cleanup
- Record campaign attribution deployment
- Add tracked promotion links
- Record fresh Apify acquisition baseline
- Distinguish historical and current Actor health
- Consolidate promotion execution queue
- Record product landing deployment evidence
- Record examples conversion links
- Record scheduled catalog audit
- Record catalog conversion deployment
- Record current monetization and deployment
- Record fresh catalog QA sweep
- Point examples links to Arclay organization
- Record Arclay examples repo transfer
- Record catalog homepage conversion update
- Record green Store audit run
- Record public use-case guide
- Record public support guide
- Record public examples CI
- Record public examples release
- Add technical launch channel drafts
- Record first-run chooser
- Record discovery surface checkpoint
- Add five-Actor campaign drafts
- Record support conversion handoff
- Record v0.1.2 examples release
- Record public output example
- Record workflow request intake

#### 🎨 Styling

- Sort cli test imports

#### 🧪 Testing

- *(01-04)* Add PRIVACY\_AND\_FIELD\_EXCLUSIONS.md + enforcing test\_docs.py
- *(02-01)* Add failing tests for PrivacyConfig loader
- *(02-01)* Add failing tests for recursive structured suppression
- *(02-02)* Add failing tests for free-text email/phone/name redaction
- *(02-02)* Add failing tests for recursive record-level free-text redaction
- *(02-03)* Add failing tests for suppress\_record entry point
- *(02-03)* PRIV-04 pitfall gate over nested Parquet-row and API-payload fixtures
- *(03-01)* Add failing test for common source-connector interface (TED-06)
- *(03-02)* Add failing tests for SQLite state db connection factory
- *(03-02)* Add failing tests for StateRepository (RELY-04)
- *(03-02)* Add failing tests for append-only raw JSONL storage (STORE-01)
- *(03-05)* Add failing tests for TedConnector Protocol conformance
- *(03-05)* Add failing tests for source-neutral ingestion runner
- *(03-05)* Add failing tests for ingest ted CLI command (CLI-03)
- *(03-04)* Fixture-based contract tests for TED-05 drift and ROADMAP SC5 pitfall gate
- *(04-02)* Pin reference-data structure and byte-reproducible regeneration
- *(04-05)* End-to-end map\_notice tests against real TED fixtures
- *(04-06)* Lot mapping tests against real recorded fixtures
- *(05-02)* Add failing tests for organisation-identifier field typing
- *(05-04)* NORM-06 pitfall gate against the real recorded corrigendum pair
- Support rich cli help streams
- Verify cli options structurally
- *(actors)* End-to-end runs, shared-helper drift guard, strict typing

#### ⚙️ Miscellaneous Tasks

- Add project config
- Begin phase 1 execution tracking
- Begin phase 2 execution tracking
- Begin phase 3 execution tracking
- *(03-01)* Add tenacity, register live pytest marker, add TED test fixtures
- Begin phase 4 execution tracking
- Begin phase 5 execution tracking
- Begin phase 6 execution tracking
- *(governance)* Add agent and release standards
- Update changelog \[skip ci]
- Update changelog \[skip ci]
- *(marketing)* Add branded LinkedIn cover asset
- Update changelog \[skip ci]
- Update changelog \[skip ci]
- Update changelog \[skip ci]
- Schedule weekly public Actor storefront audit
- Update changelog \[skip ci]
- Update changelog \[skip ci]
- Update changelog \[skip ci]
- Update changelog \[skip ci]
- Update changelog \[skip ci]
- Update changelog \[skip ci]
- Update changelog \[skip ci]
- Add repository ownership policy
- Add repository manifest
- Add release artifact delivery workflow
- Use portable Python test entrypoint
- Audit Python dependencies
- Audit Python release dependencies
- Automate dependency updates
- Update organization ownership references
- Update changelog \[skip ci]
- Update changelog \[skip ci]
- Update changelog \[skip ci]
- Update changelog \[skip ci]
- Monitor source and Actor health
- Update changelog \[skip ci]
- Update changelog \[skip ci]
- Update changelog \[skip ci]
- Update changelog \[skip ci]
- Update changelog \[skip ci]
- Update changelog \[skip ci]
- Update changelog \[skip ci]
- Update changelog \[skip ci]
- Audit canonical marketing links
- Update changelog \[skip ci]
- Update changelog \[skip ci]
- Upgrade Store audit checkout action
- Update changelog \[skip ci]
- Update changelog \[skip ci]
- Update changelog \[skip ci]
- Update changelog \[skip ci]
- Update changelog \[skip ci]
- Update changelog \[skip ci]
- Update changelog \[skip ci]
- Update changelog \[skip ci]
- Update changelog \[skip ci]
- Update changelog \[skip ci]
- Update changelog \[skip ci]
- Update changelog \[skip ci]
- Run Store audit daily
- Update changelog \[skip ci]
- Update changelog \[skip ci]
- Update changelog \[skip ci]
- Update changelog \[skip ci]
- Build Apify Actors after the quality gate on main
- Update changelog \[skip ci]
- Run every Store Actor on Apify in the daily audit
- Update changelog \[skip ci]

#### 💼 Other

- Integrate plan 01-01 completion into master
- Integrate plan 01-04 completion into master
- Integrate plan 01-03 completion into master
- Integrate plan 03-03 completion into master
- Integrate plan 03-04 completion into master, complete Phase 3
- Integrate plan 04-02 completion into master
- Integrate plan 04-03 completion into master, complete Wave 1
- Integrate plan 05-02 completion into master, complete Wave 1
- Integrate plan 05-03 completion into master, complete Wave 2
- Monitor QA status across full Actor catalog
- Version Store listing metadata and sync it on deploy
- Track public Store search visibility daily
- Manage public example tasks as code; unpin stale dates
