# What Changes Hands — build journey

**Current state — 11 September 2026:** Supplemental purchase is verified and all eight tables are delivered. The complete company network now uses directly reported SAM revenue/share, direct and cumulative gross profit, English company names and source counterparty names. 572,625 reported nodes and 145,210 distinct inferred paths have passed validation after consolidating duplicate graph connections. `company-network-completion.json` records the final data receipt; `site-deployment.json` records publication. Earlier entries below are chronological and may describe then-pending steps.


## Current outcome

Purchase verified; all ten required source tables delivered and validated across the original nine-table export and a later taxonomy supplement. The complete official taxonomy arrived on 11 September 2026: 6,544 rows, with no structural disagreement against the recovered product hierarchy. The explorer is privately hosted at https://what-changes-hands-numinor.tyl835564.chatgpt.site . The original analytical vintage is retained. All product nodes needed by the explorer have official Chinese and English labels. Rankings and coverage results are unchanged; the completed title checks also reproduce the Matrix.

## Mission

Build an interactive Numinor marketing gadget from a reproducible construct: infer candidate products exchanged along disclosed company relationships. Demonstrate the full buyer journey from Matrix discovery and analysis to a reviewed field basket, user-facilitated purchase, API delivery, and a gadget built from that purchased data. Record successful steps, failures, and platform improvement opportunities for a reusable tutorial.

## 2026-09-10 — brief and access discovery

- Read the supplied `what_changes_hands.html` in full. Its numerical claims and worked example are hypotheses to verify, not results produced by this project.
- The design joins disclosed commercial relationships, company product segments, a product taxonomy, and directed product supply links. Tender titles are held out from construction for validation.
- Proposed default research setting: both products at depth 3 or greater, with sensitivity checks at depths 1–5. Deduplicate taxonomy ancestors, orient seller to buyer from relationship semantics, and preserve ambiguous/unresolved cases.
- Separate annual sales/purchases (flows), receivables/payables/prepayments (stocks), and interim versus full-year amounts. Do not allocate the entire relationship value to every candidate product.
- Reproduce the 603248/603092 worked example if available, then evaluate the wider eligible universe. Use seeded random controls and harder matched controls; preserve holdout independence before developing ranking.
- Found an existing Numinor MCP connection in Cursor's local configuration. Reuse that credential only against its configured Numinor endpoint; no new key or access grant is needed. It is not exposed in this log or copied into the project.
- Implemented a minimal MCP transport client because this task has no native Numinor connector tools. Next gate: obtain the live tool catalog and query the actual Matrix data inventory.

## Planned evidence and deliverables

1. Data inventory with exact table/field identities, join keys, grains, availability dates, and coverage.
2. Versioned Matrix scripts, aggregate diagnostics, held-out validation, uncertainty and abstention rules.
3. Minimal source-field bill of materials with each field's purpose; separate construction fields from validation-only fields and optional UI enrichment.
4. Named purchase basket with quoted price and user handoff. No payment until the user facilitates it.
5. API acquisition log, export manifest, schema checks, checksums, and reproducibility comparison. No raw-data extraction outside the platform's allowed export path.
6. Interactive gadget with evidence drilldowns, disclosure versus inference labels, coverage filters, and an honest representation of missing/ambiguous results.
7. Journey tutorial and concrete product friction log. Public release must use content permitted for redistribution; purchased access alone will not be assumed to grant publication rights.

## Matrix analysis completed — 2026-09-10

The live tool catalog and source Atlas were read before source discovery. The account already owns nine fields, including SAM segment revenue shares and tender bidder IDs/dates. Those are reused. The ordinary disclosed relationship aggregate starts in 2021 and is explicitly non-PIT, so the construct uses four PIT flow tables spanning 2017 onward.

The source inventory found 1,530,362 SAM calculation rows, 6,674 product-covered companies, 6,544 taxonomy nodes and 70,900 product-supply links (graph version 4). These counts differ from the supplied note. No explicit confidence-grade field was found in the source graph.

The successful construction (`14_construct.py`) selected annual positive CNY flows with resolved organisation IDs, 2017–2025. It orients customer disclosures and related sales forward, supplier disclosures and related purchases in reverse. The latest disclosure date is chosen per filer/year/source, retaining individual evidence lines. It joins SAM headers on ID, gates on publication dates, uses positive product revenue and never sums overlapping ancestors.

Result: **27,645 eligible relationship-years, 11,147 distinct ordered pairs, 5,014 companies**. Using customer disclosures alone covers 9,290 relationship-years; adding supplier disclosures covers 14,484; related sales increases this to 23,160; related purchases supplies the final 4,485. All four sources therefore materially contribute.

At minimum product depths 1–5, real coverage is 69.79%, 57.84%, 37.82%, 18.40%, 6.33%. Ordinary same-year shuffled controls produce 32.07%, 17.99%, 7.42%, 2.55%, 0.65%. The harder buyer-product-category control yields 62.83%, 47.15%, 23.97%, 8.73%, 2.41%. Seeds and exclusions are in the scripts. These are coverage comparisons, not accuracy estimates; accepted control trials do not perfectly preserve the observed sample after exclusions.

The document's example reproduces 17 seller products, five buyer products, one depth-5 candidate, and all three stated amounts: FY2024 sales 38,653,900 yuan; FY2024 aged receivable balance 23,622,200 yuan; H1 2025 sales 65,871,400 yuan. The amounts were found in `equity_customer_pit`, not the initially checked related-party sale table. Interim evidence stays separate from the annual study.

At depth 3, 46,924 candidate rows shrink to 25,973 after removing dominated ancestor candidates within the same graph category. There are 10,455 relationship-years with candidates. Ranking uses specificity then segment relevance; ten top candidates have invalid revenue shares and must show relevance unavailable.

## Held-out validation

The ranking rule was written before inspecting tender titles. The tender codebook was found through the website after Trinity could not retrieve it. Confirmed stages are typ=2 and stagetype 21/22/23; 24 and unknown stages remain separate. Both issue-date fallback and zero prices require care: issue_date is entirely absent in this vintage, while result_date is complete.

There are 367 confirmed-stage same-year award records across 145 relationship-years. Fifty relationship-years also have a depth-3 candidate; literal top-product-name matching finds four notices across two relationship-years. This small selected intersection supports example-level corroboration only. It cannot validate general product inference, and exact-name absence is not a contradiction.

## Saved evidence and purchase composition

A private Matrix report was saved with a server-minted numeric table: https://numinor.io/r/Qmv53TCM_3G3LQ . It is not published.

Basket ID: `3d6e1fd9-6e33-4f99-b502-0a6e546c7f63`.
Name: **What Changes Hands — disclosed trade → product candidates → interactive evidence explorer**.
The reviewed composition contains **30 priced fields and 87 free fields, across 10 tables and five datasets**. The field plan and full basket manifest retain the reason for every selection. Existing entitlements are separate and reused.

The Numinor page shows USD 3,368/month or USD 32,336/year paid up front. A false stale-basket warning appears because Reference is free; a local two-field reproduction isolates that issue. The basket nevertheless successfully reached Stripe. The untouched Stripe checkout currently shows **HKD 27,466.28 per month**, with a USD option; the user chooses billing/payment. No payment was submitted.

The API status endpoint was verified with the existing credential and returned HTTP 200. `acquire.py` prepares the documented export/poll path and refuses to start an export until all required paid grants are active. No licensed source-row export for this project has been initiated. Signed manifests and delivery files will remain under ignored private/data directories.

## Pre-purchase handoff (historical)

**At the pre-purchase handoff, awaiting user-facilitated purchase.** Matrix feasibility, source-field composition, candidate construction, controls, a first held-out check, private analysis report and checkout preparation are complete. The interactive gadget is not yet built because its source data has not been purchased and delivered.

After purchase: verify grants; run API export; inspect the actual signed manifest; download licensed files; validate schema, replay grain and deletion semantics; compare a vintage-aligned replay with Matrix aggregates; build the interactive evidence explorer; exercise filters, source drilldowns and empty/ambiguous cases; record publication/integration instructions and the completed tutorial.

See `PRODUCT_FRICTION.md` for observed platform issues and separate agent/client mistakes. No Numinor code was changed and no report or gadget was published.

Final checks: relationship and top-candidate keys are unique, self-links are excluded, depth gates and confirmed tender stages are enforced. The acquisition guard was exercised: all 30 required paid fields remain unavailable and **no export started**. Private report content and its five-source provenance footer were verified in the browser. Checkout and report tabs are retained for the user.


## Purchase activation and licensed delivery — 2026-09-10

The user confirmed checkout had finished. All 30 required paid grants were then verified active using `my_data`; no new credential was needed. `acquire.py` requested the documented field export. Job `d08a790f-9d88-484e-93a3-e4f87d901b8f` was ready in about 24 seconds. The manifest included nine of the ten required tables, all with complete declared grains, and explicitly skipped Taxonomy with “no exportable data published.” Existing unrelated entitlements were not pulled into the gadget.

This exposed an important post-payment gap: active grants and a ready job do not guarantee that every required dependency has been delivered. `DELIVERY_ISSUE.md` records the exact failure, likely shared-panel routing cause, and proposed acceptance checks. The platform team was asked whether it can enable the missing delivery; no Numinor code or account configuration was changed.

Bulk downloads were slow locally. Ordinary Python package transfers were similarly slow, so the cause is not attributed to Numinor. A resumable, bounded range downloader improved throughput, checked each response's byte range and length, and hashed completed files. Signed URLs and raw licensed files remain in ignored private/data directories. They are never included in the site.

## Reconstructing the delivered panel

The API exports version history, not just the resolved Matrix snapshot. The local reader checks the complete grain and rejects duplicate grain/date versions, keeps the latest `_known_date` per grain, and only then removes `D` rows. SAM calculations use `(id, product_code)`; the other required delivered tables use `id`. The raw-to-current counts and SHA-256 values are recorded in `delivery-validation.json`.

The purchased `product_path` field contains hierarchy codes without names. Those paths reconstruct a consistent taxonomy parent/depth map. A separate aggregate-only Matrix check found zero parent or depth mismatches across 5,296 represented product codes. The newer API snapshot contains 5,302 such nodes. This recovers the analytical structure through the paid export, without moving raw source rows through the Matrix's research-output tools. It cannot recover the missing official product names.

The worked example's two product labels come from the user-supplied brief and are corroborated by the delivered graph's English description. All other labels remain codes until the official table arrives, with a prominent delivery notice. The local build automatically prefers the official taxonomy when delivered.

## First useful preview and full-universe build

The first interactive preview used the paid-data flange/gearbox example, with 17 seller products, five buyer products and one depth-5 path. The annual sales flow of 38,653,900 yuan and the receivable balance of 23,622,200 yuan remain separate. The later H1 2025 sales amount of 65,871,400 yuan is contextual evidence, outside the annual construction.

The full current-data construct subsequently produced 27,795 relationship-years, 11,209 ordered connections and 5,030 labelled companies. There are 142,285 unpruned candidate rows and 26,133 depth-3 rows after ancestor pruning, across 10,543 relationship-years. At depth 3 the coverage is 37.93%, compared with 23.997% in the harder buyer-category control and 7.409% in the same-year random control. These are coverage results, not accuracy estimates.

The interface allows search, year/depth/category filtering, candidate selection, product hierarchy and segment-share inspection, exact disclosure lineage, separate accounting meanings, tender corroboration and coverage comparisons. JavaScript ordering matched the Python reference for all 27,795 relationship-years. The supported browser WebMCP interface registered both intended tools; representative searches and visible selection updates succeeded, invalid inputs failed intentionally, and the selected depth remained intact after failure. No broader visual/screenshot QA was requested or claimed.

The original Matrix snapshot and the API have different source vintages. `31_snapshot_vintage.py` records the Matrix's actual per-table latest delivery date. A separately reconstructed vintage-aligned panel is used to distinguish changed source data from a construction error. The source row counts matched for all tables checked before the tender download completed; final parity and tender validation are recorded below once complete.


## Delivery totals and operational boundary

The nine required delivered tables total 327,345,719 bytes. Every Parquet row count matches its manifest and every grain/date version key is unambiguous. Latest-version deletion handling is applied before constructing the current snapshot. The same process aligned to the Matrix's recorded vintage reproduces each source-table row count exactly.

The Taxonomy table remains absent. No new payment, raw Matrix export bypass, product-repository change or public release was performed. This is a functional private prototype with an explicit label-delivery limitation, not yet the final fully labelled marketing release.


## Final analytical verification

The vintage-aligned local replay exactly matched the Matrix's 27,645 relationship-years, 11,147 pairs, 5,014 companies, 141,379 candidate rows, 25,973 pruned depth-3 candidates and 367 confirmed-stage tender notices. `check_parity.py` also compared all five depth rows and both control series directly against the recorded Matrix output: exact equality.

The current delivered vintage has 368 confirmed-stage notices across 146 relationship-years; 50 also have a depth-3 candidate. Universe-wide literal product-name matching was deliberately marked unevaluated because official taxonomy labels were not delivered. The browser labels product-name checks unavailable for code-only nodes.

The completed gadget includes all 27,795 current relationship-years. `check_gadget.mjs` verifies all Python/JavaScript rankings, the three supplied example amounts, category and depth filters, empty search, source evidence and confirmed tender stages. The source package contains no API key, raw Parquet file, signed delivery URL or private export manifest. A user-facing build-journey article accompanies the explorer; `INTEGRATION.md` records the repeatable procedure and website integration path.


## Private publishing outcome

The exact verified source was saved as Sites version 1. Its private deployment failed because the hosting service timed out waiting for the HTTPS certificate for its assigned hostname. This is a separate Sites hosting dependency, not a Numinor purchase/API issue. No public-access change was made. The working local preview remains open, and the saved source/archive can be reused after certificate provisioning is resolved.

The exact project, version, deployment, source revision and failure are retained in `site-deployment.json`. The transient source credential was passed in memory through a non-echoing input, used only as a per-command Git authorization header, then discarded. Neither source nor archive contains credentials or the signed Numinor manifest.


## Live recheck — 11 September 2026

At the user's request, a new licensed export was created after the reported fix. Job `2e1179ee-8e7c-4b7a-ae33-ed8b8ccdb18c`, created at 2026-09-10 17:35:09 UTC (11 September 01:35 Shanghai time), finished ready at 17:35:33 UTC. Its manifest still omitted `taxonomy.dict_product_rs` and reported “taxonomy: no exportable data published.” It offered 11 other tables from the account's current recipe. No replacement data or labels were fabricated.

Both the documented `https://api.numinor.io/v1/field-export/status` endpoint and the website alias `https://numinor.io/v1/field-export/status` returned HTTP 200 with `unavailable: ["taxonomy"]` and the same vintage `76701719e9de`. This confirms the issue remains on the live export path at the time checked; it does not establish whether the proposed fix is undeployed or whether another issue remains.

The new signed manifest is stored separately from the original study delivery. `taxonomy-recheck-20260911.json` is a sanitized receipt suitable for forwarding to the platform team. The original nine-table data and gadget remain unchanged.


## Hosting recovered — 11 September 2026

The previously failed hostname passed ordinary TLS certificate and hostname validation. The unchanged saved version was redeployed with owner-only access verified, and deployment `appgdep_6aa2ead05fac81918f00266caa46ac65` succeeded at 17:37:38 UTC. No source rebuild, duplicate Site creation, or access widening was needed. The existing browser view now points to the hosted explorer. The separate Numinor taxonomy issue remains unresolved by the live feed recheck above.


## 2026-09-11 — official taxonomy delivered

- The user first clarified that the fix had not shipped and asked us to wait; work paused. On their subsequent “try it again,” we requested a separate fresh licensed export rather than reusing the earlier completed partial job.
- The status feed no longer reports an unavailable dataset. Job `a08cf5d2-4fa3-47a6-9d6c-134301b59f2c` includes 12 tables with no skips and delivers `taxonomy.dict_product_rs` with complete `[id]` grain and 6,544 rows.
- Downloaded only the missing taxonomy supplement (273,828 bytes). Validated its SHA-256, exact row count, version uniqueness, unique codes and all required Chinese/English names. Every represented code is present; depth and nonroot-parent comparisons have zero mismatches for both the 5,302 current and 5,296 Matrix-aligned hierarchy nodes.
- Preserved the original nine source tables and original manifest. A new raw supplement directory and `taxonomy-delivery-validation.json` record the two delivery identities, source dates and checksums. This prevents a labels-only improvement from silently changing the study universe.
- Installed official taxonomy for both replay vintages. The prior code-path reconstruction remains recorded as a successful structural workaround with an explicit limitation: it could not recover names.
- Both replays passed. The current universe remains 27,795 relationship-years and all candidate rankings, coverage rates and controls are unchanged. The Matrix-aligned replay matches its original universe, all five depth/control series and every held-out/ranking metric exactly, now including literal product-name checks.
- The current held-out set contains 368 confirmed-stage tender records across 146 relationship-years; 50 relationship-years also have a depth-3 candidate. Four title records across two relationship-years literally contain the selected product name. This is limited corroboration, not an estimate of product-level accuracy.
- JavaScript/Python ranking comparisons passed for all 27,795 relationship-years. All 2,895 displayed product nodes carry official bilingual names; Chinese and English product search checks passed. The published build journey records both the earlier friction and the verified resolution.
- Published the validated official-taxonomy update privately to the existing explorer URL, preserving its audience and browser view. The exact source, archive hash and successful delivery are recorded in `site-package-verification-v2.json` and `site-deployment.json`.


## 2026-09-11 — English company names for the demo

- Changed the connection directory, selected relationship heading and source filer names to lead with English and show Chinese second. Long names wrap in the existing responsive layout, and search remains bilingual.
- Found 166 of 5,030 company records contain Chinese in the delivered `abbr_en` field. For the worked example, verified Jiangsu Xihua New Energy Technology Co., Ltd. in its issuer-filed prospectus and used the shorter display label “Xihua New Energy Technology.” The source is linked in the hosted journey. Remaining 165 records fall back to their Chinese names; no translations are presented as supplied data.
- This change only affects display and the example’s English search alias. Purchased data, company identities and analytical results are retained.
- Published the English company-name update privately to the same explorer URL. Static asset and JavaScript checks passed; the source dataset and analytical model were unchanged.


## 2026-09-11 — English product labels throughout the demo

- At the user’s request, product cards, candidate paths, taxonomy breadcrumbs and agent-tool product results now use official English labels only. All 2,895 displayed taxonomy nodes have nonempty English names with no Chinese text.
- Company presentation retains English primary and Chinese secondary. Source product names and tender titles remain intact for the original-language title-matching check; only the presentation changed. No analytical replay or new purchase was needed.
- Published the English-only product presentation to the same private explorer URL after successful JavaScript syntax and static asset checks.


## 2026-09-11 — resolve product strands automatically

- The user clarified that hierarchy levels locate a graph connection; the final demo should resolve the most detailed supported connection automatically. Removed the minimum-depth toggle from the main interface and agent tool. Company language preferences are preserved; products remain English only.
- Audited 237,296 positive-revenue SAM memberships over 22,148 covered company-years. Expanded the complete ancestor closure, filling eight omitted memberships. No new graph candidates or newly supported relationship-years resulted. The original 142,285 candidate rows and study controls remain intact.
- Derived 84,725 most-detailed SAM coverage nodes across company-years. The delivered calculation table does not identify literal filing labels separately from rolled-up nodes, so the UI calls this SAM coverage and does not invent direct-disclosure provenance.
- Replaced global ancestor pruning in the demo with per-strand-pair resolution. Deeper matches remove broader ones only for the same supported branches and link type. Incomparable endpoint depths and independent branches remain separate possibilities. The display retains 80,677 connections across 19,426 of 27,795 relationship-years; 50,910 connections have unequal endpoint depths.
- Added “How this connection was found,” tracing each most-detailed SAM coverage node only up to the matched node. The worked example still returns just Flanges → Wind Turbine Gearboxes.
- Compared independent Python and JavaScript resolution, including edge order and supported strand pairs, across all 27,795 relationship-years. All passed. Additional semantic cases verify sibling-branch preservation, unequal-depth alternatives, category handling, no-support results and suppression only when a genuinely deeper connection exists on that branch. The frozen research replay checks also passed unchanged.
- The headless interface contract check passed with the new relationship/year-only agent tool, English product results, invalid-input rejection and optional path provenance. Published the verified automatic-resolution update privately to the same explorer URL.


## 2026-09-11 — path badges, superseded before publication

- Added a linked-node badge and inferred-path count to each connection card. Empty results show a neutral “No inferred path”; a category-specific empty result says “No matching path.”
- Counts use the same branch resolver as the detail view and follow the selected reporting year and link type. Loading/failed data is not presented as zero paths. Results are cached per loaded year, pair and category; selecting a new year clears the old detail while its data loads.

- The user replaced the list-badge request with a company-centred network before publication. The badge-only edits were withdrawn; the published pair explorer remains the last validated release.

## 2026-09-11 — company-centred supplier/customer network (in progress)

- New requested interaction: search by company full/short name or stock code; centre that company; display all disclosed suppliers on the left and customers on the right for each reporting period. Hover/focus/tap on a company opens its reported SAM mix. Bright edges open a trace from the reported products, through any necessary ancestors, to the actual directed SAM edge. Source categories, descriptions, amounts, accounting meanings and dates remain visible.
- Data audit exposed a material distinction: the original purchased `product_income` and `product_income_ratio` on the calculation table describe cumulative subtrees. Their most-detailed frontier cannot identify all explicitly reported nodes. In the Matrix, 20,209 positive direct-revenue rows differ from their rolled-up revenue; 564,897 rows have a direct revenue value, including 7,869 negatives and 1,191 zeros. Reported ancestor nodes must remain even if a reported child is also present.
- Verified the Atlas and precise field dictionary. The calculation table already contains direct fields `product_b_income` and `product_b_income_ratio`, so buying those two is a smaller dependency than licensing the separate original-product key plus a revenue denominator. Supplied shares will be shown as-is, not reconstructed or renormalised. Negative adjustments remain in the mix, while inference starts from positive-revenue nodes.
- Prepared and proposed supplemental basket `99b580a5-f5b8-479f-b4a5-e4652e0ffb14`: “What Changes Hands — company network, reported SAM mix and full-name search.” It adds the two direct SAM metrics and four free full-name fields (company/company_en, org/org_en), plus automatic plumbing. The human's unrelated “test 001” basket was preserved. The portal determines the checkout total; no purchase was performed by the agent.
- Rebuilt the C2C network locally from licensed data, selecting latest disclosure per filer/exact period/source/type before counterparty filtering. Retained all resolved organisations, including counterparts without SAM, all currencies, null/zero/negative disclosed amounts, and separate flow/balance categories. Result: 2,082,954 source records, 1,753,242 directed pair-periods, 305,752 company identifiers and 38 exact period definitions. Nonstandard period end dates are retained explicitly rather than silently called a normal quarter.
- Implemented a separate local network route with period controls, independent supplier/customer columns, company search, SAM popovers, edge dialogs, reported-to-ancestor trace rendering, C2C source details and company/period agent tools. Initial preview uses real Xihua records: 18 companies, 70 pair-periods, 90 disclosures over nine reporting periods. It explicitly marks reported SAM mix and path inference as pending the supplemental API delivery; no calculated node is passed off as directly reported.
- Prepared a guarded API acquisition and full-network compiler. Acquisition checks ownership, complete grain and required columns, preserves export manifests privately, validates row versions, and never reuses an incomplete original-product grain. New SAM period headers come from the same supplemental export as its direct metrics. Original research and C2C files remain intact. The network is compressed and sharded for on-demand loading. Full quick selects will rank actual resolved path counts; the preview has no fabricated quick-select rankings.
- Functional checks passed for preview data integrity, ancestor/direct tracing, reported parent-plus-child preservation, sibling branches, category handling, missing-period coverage, negative adjustments, company search, network direction and supplied percentage display. Headless app initialization, search, period switching and invalid-input contracts passed. No browser visual QA was performed. The full supplemental build remains unrun because the two fields are not yet owned. No new site version has been published.


## 2026-09-11 — CATL search and complete C2C preview

- The user searched CATL and received a misleading empty result. Root cause: the local preview indexed only the 18 Xihua-sample companies. This was a demo integration limitation, not an absent company in the purchased data.
- Verified CATL's canonical company `CSF0000005767` in licensed Reference: mainland ticker 300750 supplies “Contemporary Amperex”; Hong Kong ticker 03750 supplies “CATL”; both supply 宁德时代. Multiple listings need merged search aliases instead of discarding the names attached to the nonpreferred listing.
- Extended the main network compiler with `--disclosures-only`. This builds the complete purchased C2C network independently of the pending SAM supplement: 1,753,242 pair-periods, 2,082,954 source disclosures and 38 exact reporting periods. All 33,003 canonical companies represented in the purchased stock reference are searchable, including those without a C2C connection in the chosen period. Counterparties retain their stable identifier when no name has been delivered. Total addressable IDs: 327,303.
- Merged every delivered listing abbreviation/ticker/code into company search aliases and retained one canonical company result. CATL, Contemporary Amperex, 宁德时代, 300750 and 03750 all resolve to the same company. Restored the existing issuer-verified Xihua English label.
- The complete source query and rebuilt app both show CATL FY2024 with 21 disclosed suppliers, 5 customers and 32 underlying source rows. The full topology and every disclosure passed consistency checks. Headless interaction checks verify all five CATL lookup forms, canonical deduplication, correct supplier/customer counts, period switching and pending-vs-missing SAM states.
- Removed misleading “No SAM mix this period” and zero-inference counts while the new direct fields are pending. A visible notice distinguishes the complete company/C2C coverage from pending reported mix and product tracing. No fabricated product matches or rankings are shown.
- Updated the existing local preview. The published pair explorer remains unchanged while the full reported-SAM redesign awaits its required supplement.

## 2026-09-11 — full SAM map, English names and relationship scale

- The user requested the entire dataset, English company names, reported SAM mix, visible inferred paths and a scale comparison: supplier amounts divided by the central product's COGS (revenue minus gross profit); customer amounts divided by its revenue. Calculations apply only where a product inference exists and retain each source accounting category independently.
- Returned to the Matrix and inspected precise table fields and aggregate coverage. Confirmed direct and cumulative product gross profit are supplied in RMB and can support COGS at reported and ancestor nodes respectively. Added them to the existing supplemental basket, plus the four original-counterparty-name fields needed outside the limited stock/company master coverage and the free survivor-pointer field. Basket now has eight paid fields and 49 free fields; the human reviews and pays in the portal.
- The new map's all-zero SAM state was an unfinished integration: the original purchase already supplies calculation metrics and the graph. Added an explicit `--available-sam` mode so the entire purchased SAM history works now, while clearly distinguishing calculated coverage from directly reported nodes awaiting delivery. Expanded the timeline to 58 reporting-period definitions, including SAM-only history from 2007; no company/period sample filter remains.
- Available-data build: 2,082,954 original C2C disclosures, 1,753,242 directed pair-periods, 542,962 most-detailed calculated coverage nodes, 162,037 retained graph paths and 40,468 supported pair-periods. Quick selects now rank actual calculated-path richness: Huatian Technology, Hikvision, Sinopec, Jointown Pharmaceutical, Foton Motor and China Telecom, each at its strongest period. Their calculated metric basis is explicit.
- Implemented exact-period, compatible-currency, inference-only customer/revenue and supplier/COGS comparisons. Positive denominators are required; missing gross profit is not assumed zero. Balances/flows remain separate; signed and over-100% percentages are preserved. Tested the real flange example: 23.8833% sales/revenue and 14.5956% receivable/revenue. Supplier COGS percentages explicitly await gross-profit delivery.
- Found an additional preview integrity risk: catalog/period files previously reused numeric company indices across builds, so an open tab could fetch a newer period against its older company list. Replaced mutable release data with immutable release directories and version/identity-hash checks. The current source maps CSF0000045462 to Harmontronics Automation (688022); Xihua is ICN5048712804 (603248). No similar-name or guessed identity merger was made.
- Retained actual supplied English names and the issuer-confirmed Xihua name. Additional source names will be acquired through the basket. Prepared labelled English renderings for cases with a supplied Chinese name but no English name; these are not represented as verified official English names. No identity is invented from an identifier alone.
- Semantic trade-scale/version checks passed (21 cases). Independent Python/JavaScript equality passed for every retained edge and supporting strand pair over all 58 periods. Headless app checks passed, including CATL aliases/counts, the real flange trace, actual customer revenue percentages, pending supplier COGS and period switching. Full reported-mix/name/COGS completion still depends on the supplemental checkout and licensed API delivery; no new hosted version has been published.

- Final available-data release: `v49e83dc898414677`. All 33,003 named stock-reference companies retain source names; 442 receive explicitly labelled English renderings because no usable English name was supplied, while 29 lack a usable name even for rendering. Unnamed counterparties outside the purchased name coverage remain identifiable by their stable ID until the licensed original-name supplement arrives. Fresh acquisition preflight still found the supplemental fields unowned and started no export.


## 2026-09-11 — supplemental purchase verified and complete reported-SAM network integrated

- The user confirmed checkout and asked that this remain one continuous project with its journey and platform issues recorded. Verified all eight supplemental paid field grants, then created licensed export `1b15c725-fd62-45e1-a539-24f610eb2b73`. Downloaded the eight required tables, validated SHA-256 and manifest row counts, checked complete grains and version uniqueness, resolved latest `_known_date` per grain and only then removed deletion records. API credentials and signed download URLs remained outside the Site and public logs.
- Delivery resolved 1,582,821 SAM calculation rows, 152,600 period headers, 60,244 company master rows, 40,190 stock-reference rows and all four C2C source tables with original counterparty names. The calculation table supplies 583,713 direct-revenue values, 542,260 direct gross-profit values and 1,483,520 cumulative gross-profit values before report selection. No redirected survivor pointers were present. The newly delivered original C2C analytical fields agree with the retained original source at the disclosure cutoff; the original research files were preserved.
- Rebuilt the complete company map: **327,303 addressable/searchable company identities, 58 exact reporting periods, 2,082,954 source disclosures, 1,753,242 directed pair-periods, 572,625 reported product nodes and 166,139 retained graph paths across 40,468 supported pair-periods**. The 2017–H1 2026 C2C coverage and 2007–H1 2026 SAM history are both included. No company sample or both-endpoints-SAM filter restricts the relationship map. Natural persons, unresolved parties and self-links are outside this organisation graph. Periods use only their own available metrics.
- English naming now uses the full master, every stock-listing alias, and the licensed original disclosure names. 49,319 companies have supplied Latin/English labels, 277,969 have explicitly labelled English/Latin renderings of Chinese source names, and 15 retain an identifier as the primary label because only other-script source names are supplied. Those original names remain visible and searchable. Latin abbreviations such as H&M and G.A.S. are retained even without two adjacent letters. Renderings are not claimed to be official registered English names. CATL still resolves through CATL, Contemporary Amperex, 300750, 03750 and 宁德时代 to one company.
- Reported SAM mix uses `product_b_income`, `product_b_income_ratio` and `product_b_profit`. Parent and child reported rows both remain; negative and zero disclosures are retained in the mix. Positive reported revenue defines inference strands. The graph resolver keeps the most detailed supported edge separately for every strand pair/category and preserves sibling and incomparable alternatives. Products display official English names only.
- Supplier comparisons use the central matched product's revenue minus gross profit. Customer comparisons use the central matched product's revenue. Direct matches use direct metrics; ancestor matches use that ancestor's cumulative revenue/profit. Currency and exact-period guards, positive denominator checks and individual flow/balance labels apply. Missing gross profit is a true source-coverage gap, never zero-filled and no longer labelled as an unpurchased field.
- Worked FY2024 edge: **Xihua Flanges → Delijia Wind Turbine Gearboxes**. Sales CNY 38,653,900 / Xihua Flanges revenue CNY 161,845,100 = **23.8833%**. The receivable CNY 23,622,200 is independently **14.5956%**. With Delijia central, gearbox COGS = CNY 3,677,653,300 revenue − CNY 907,230,000 gross profit = **CNY 2,770,423,300**; the same sales and receivable compare at **1.3952%** and **0.8527%**, respectively. These compare company-level amounts with an inferred product denominator, not an allocation of those amounts to the product. Xihua's Flanges gross profit itself is not disclosed; its supplier-side denominator correctly remains unavailable.
- Quick selects are recomputed from the actual reported-node paths, rather than curated unsupported examples:

| Company | Exact reporting period | Paths | Linked counterparties |
|---|---|---:|---:|
| Huatian Technology | 2020-12-31-12 | 368 | 33 |
| Hikvision | 2021-12-31-12 | 257 | 26 |
| Sinopec | 2021-12-31-12 | 245 | 24 |
| Foton Motor | 2017-12-31-12 | 223 | 18 |
| Jointown Pharmaceutical | 2020-12-31-12 | 214 | 28 |
| China Telecom | 2019-12-31-12 | 202 | 22 |

- Validation passed: all 1,753,242 pair-periods and 2,082,954 disclosure records; independent Python/JavaScript agreement for every retained edge and supporting strand pair; complete ancestor traces; 21 trade-scale and identity-version cases; headless application initialization, company search, period changes, complete CATL network, and the actual revenue/COGS edge dialogs. No browser visual QA was performed. Text sizes for controls and evidence were raised for readability.
- The main page is the completed company network; `network.html` retains existing deep links and `research.html` preserves the frozen pair-study explorer and its held-out controls. The hosted journey includes this expanded build and an observed-issues table, with full chronological and issue logs linked. Old local generated preview releases are archived outside the Site; the active release uses immutable paths and identity checks. Local tabs on a retired preview need a refresh rather than mixing their old company index with a new period.
- Supplemental purchase and licensed delivery succeeded without another missing-table incident. The earlier paid-taxonomy omission remains documented as resolved. Exact dictionaries were still necessary to establish direct-versus-cumulative semantics. The small preview, discarded listing aliases, blank SAM integration and stale company-index risk are explicitly recorded as agent/demo errors, not missing Numinor data.


## 2026-09-11 — complete company network published privately

The existing Site successfully published the reported-SAM company map at https://what-changes-hands-numinor.tyl835564.chatgpt.site at 2026-09-11T00:05:22.927305+00:00. It is still owner-private. Main and network deep-link routes use the same completed map; the original pair study and expanded hosted journey remain available. Site version 6, exact source `14a2037bca4198027f04015a82ab7c61494663f5`, and deployment `appgdep_6aa34533a16c819187df0a7b73131141` are recorded in `site-deployment.json`. The browser handoff was queued to the existing Site tab; no browser visual QA was performed. The task-owned local preview server was stopped after successful hosting.

A further hosting issue occurred after all Numinor data was delivered and validated: the 133,023,957-byte local deployment archive timed out twice at the native upload client's approximately 60-second ceiling, before a Site version was saved. The verified source had already been pushed successfully. Version history confirmed no duplicate save; a remote build from that exact source then published successfully. The local archive still matches every committed asset and its checksum is retained in `site-package-verification-v6.json`; it was not the artifact consumed by the successful remote build. This is a Sites/upload-path limitation, not a Numinor export failure. The exact two request IDs and recovery are retained privately in `private/network-hosting-attempts.json`. No purchase, data export or source rebuild was repeated to recover publication.

The hosted full journal reflects the pre-publication record committed with this release. This final publication receipt is appended locally so that recording a deployment does not require recursively deploying its own receipt.


## 2026-09-11 — verify and consolidate duplicate product graph edges

The user noticed repeated product-path cards with different descriptions and requested verification before keeping just one for the demo. We checked the licensed, version-resolved source, not just the displayed labels. `FA00706438` (Integrated Circuit Packaging and Testing Equipment) → `EC0010100201` (Chip Packaging and Testing), category `CAPEQ`, has **six distinct active source IDs in the same graph version 4**, containing **three distinct English descriptions**. Four rows have exactly the same description. Their creation/update timestamps fall within 49 seconds on 13 April 2026. These are repeated directed product/category identities, not different product strands or graph versions. The generating cause is not established.

Across the active source graph, 70,900 records represent 66,053 distinct `(primary_code, related_code, relation_category)` connections. There are 3,122 duplicate groups and 4,847 excess records; 2,764 groups contain differing English wording. All active source records use version 4. The full duplicate audit preserves all original IDs, versions and descriptions in `graph-duplicate-audit.json`.

The demo now keeps one source representative per exact upstream code, downstream code and relationship category: prefer a nonblank English description, then the lexically smallest source ID. This deterministic tie-break is for display consistency and does not claim one description is more accurate. The screenshot group keeps `2b6e5299-d4b2-4808-8132-fd0e5c95e90d` and its original wording. No description is synthesized. Different categories, reversed directions, distinct codes with similar labels, and separate supported product branches remain separate. This rule runs in the compiler before inference and defensively in the company-map resolver; the frozen research resolver is unchanged.

Recompiled all 58 periods. Demo path instances fall from **166,139 to 145,210**, removing **20,929** repeated instances across company pairs and periods. Huatian Technology FY2020 changes from 368 to **287** paths across the same 33 supported counterparties. Every edge badge, central total and quick-select rank now uses the same consolidated result. All **40,468** previously supported pair-periods remain supported. The 327,303 company identities/names, 1,753,242 company pair-periods, 2,082,954 C2C source disclosures and 572,625 reported SAM nodes remain intact. Every SAM mix asset matches the preceding release byte for byte.

Validation passed: the actual six-to-one source example; stable representative selection under input reordering; preservation of categories, direction and distinct same-label codes; no duplicate identities in the shipped graph; complete network/source and Python/JavaScript path agreement; and headless company search, period changes and real revenue/COGS dialogs. No browser visual QA was performed. Data release: `v5005d9bbfe394ead`. No new purchase/export or platform-source modification was required. The original raw data and frozen research explorer retain their original records for reproducibility.
