diff --git a/README.md b/README.md index bafb3b7..9861d57 100644 --- a/README.md +++ b/README.md @@ -78,6 +78,16 @@ Details: [PAYPAL_STATUS.md](PAYPAL_STATUS.md). The exact code that made the five Full dependency map with revisions and licenses: [docs/DEPENDENCY_MAP.md](docs/DEPENDENCY_MAP.md). +### Industrial Sourcing (preview) + +The header button **Industrial Sourcing** opens a read-only panel that applies the same approach to manufactured parts: + +- buyer requests are grouped only when the specification digest, revision, process and material match exactly; +- four routes are compared: direct purchase, single additive build, split supply and collective procurement; +- the result is a Federation **proposal** (not an admitted contract), an evidence passport and an **unsent** draft RFQ. + +It ships three synthetic scenarios (coalition chosen at $2,300 vs $3,850 direct; direct chosen when it costs $2,000; a revision mismatch that leaves 80 of the required 100 units and is held). Supplier entries are 87 public discovery links, not quotations. Engineering verification stays unproven until an independent ZTL Engineering receipt is supplied. No supplier is contacted and no payment is made. Details: [docs/INDUSTRIAL_SOURCING.md](docs/INDUSTRIAL_SOURCING.md). + ## 6. Installation and use **A. Explore the recorded runs.** Any OS, Python 3.11+, no credentials. diff --git a/deal_rescue/industrial/__init__.py b/deal_rescue/industrial/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/deal_rescue/industrial/core.py b/deal_rescue/industrial/core.py new file mode 100644 index 0000000..79145f0 --- /dev/null +++ b/deal_rescue/industrial/core.py @@ -0,0 +1,266 @@ +"""LEGION Industrial: read-only sourcing + demand matching + proposal gate. + +A source listing is not a quote; an opted-in demo identity is not a real buyer; +a ZTL theorem for a supported model is not a certificate of physical manufacture. +No network, accounts, payments, mutations or model calls are performed here. +Python 3.11+ standard library only. All money in exact integer US cents. +""" +from __future__ import annotations + +import hashlib +import json +from collections import Counter +from datetime import date +from pathlib import Path + +T, F, Z = "T", "F", "Z" +DATA = Path(__file__).parent / "data" + + +def digest(obj): + raw = json.dumps(obj, sort_keys=True, ensure_ascii=False, separators=(",", ":"), allow_nan=False) + return hashlib.sha256(raw.encode("utf-8")).hexdigest() + + +def read_json(name): + if not name.endswith(".json") or "/" in name or "\\" in name: + raise ValueError("untrusted data name") + return json.loads((DATA / name).read_text(encoding="utf-8")) + + +def source_registry(): + records = read_json("sources.json")["records"] + seen = set() + for r in records: + if r["id"] in seen or not r["official_source"].startswith("https://"): + raise ValueError("duplicate or invalid source") + seen.add(r["id"]) + return { + "total": len(records), + "by_type": dict(sorted(Counter(r["type"] for r in records).items())), + "coverage": "DISCOVERY_SEED_ONLY_GLOBAL_COMPLETENESS_Z", + "records": [ + {"id": r["id"], "name": r["name"], "kind": r["type"], + "url": r["official_source"], "capability_claim": r["observed_capability"], + "quote_verdict": Z, "capacity_verdict": Z, "api_access_verdict": Z, + "supplier_commitment_verdict": Z} + for r in records + ], + } + + +def valid_demand(d, *, demonstration=False): + """Returns screening truth, never cryptographic owner authorization.""" + keys = ("id", "buyer_id", "spec_digest", "spec_revision", "process", "material", + "qty", "budget_cents", "due_date", "consent_scope") + missing = [k for k in keys if k not in d or d[k] in (None, "")] + if missing: + return {"verdict": Z, "why": "missing_fields", "fields": missing} + if type(d["qty"]) is not int or d["qty"] <= 0 or type(d["budget_cents"]) is not int or d["budget_cents"] < 0: + return {"verdict": F, "why": "invalid_qty_or_budget"} + if not isinstance(d["spec_digest"], str) or len(d["spec_digest"]) != 64: + return {"verdict": F, "why": "invalid_spec_digest"} + try: + date.fromisoformat(d["due_date"]) + except (ValueError, TypeError): + return {"verdict": F, "why": "invalid_date"} + if d.get("revoked") is True or d.get("consent_scope") != "coalition_discovery": + return {"verdict": F, "why": "no_current_discovery_consent"} + if d.get("source_scope") == "SYNTHETIC_TEST_ONLY": + return {"verdict": T if demonstration else Z, "why": "synthetic_opt_in_not_live_authority"} + # Never trust an input record asserting that it verified its own signature. + # The read-only demo has no independent CRM or signature verifier. + return {"verdict": Z, "why": "independent_buyer_opt_in_verifier_not_connected"} + + +def group_demand(demands, *, demonstration=False): + accepted, rejected = [], [] + seen = set() + for d in demands: + v = valid_demand(d, demonstration=demonstration) + if d.get("id") in seen or d.get("buyer_id") in seen: + rejected.append({"id": d.get("id"), "verdict": F, "why": "duplicate_buyer_or_request"}) + continue + seen.update([d.get("id"), d.get("buyer_id")]) + if v["verdict"] != T: + rejected.append({"id": d.get("id"), **v}) + else: + accepted.append(d) + groups = {} + for d in accepted: + # Equality is deliberately strict: same exact CAD/spec hash, revision, + # material and process. An LLM label may not merge distinct parts. + k = (d["spec_digest"], d["spec_revision"], d["process"], d["material"]) + groups.setdefault(k, []).append(d) + return {"groups": [ + {"spec_digest": k[0], "spec_revision": k[1], "process": k[2], + "material": k[3], "buyers": [d["buyer_id"] for d in bs], + "units": sum(d["qty"] for d in bs), "budget_cents": sum(d["budget_cents"] for d in bs), + "member_count": len(bs), "demands": bs, "test_only": demonstration} + for k, bs in groups.items()], "excluded": rejected} + + +def shortlist_sources(process, *, n=18): + registry = source_registry()["records"] + # Conservative broad discovery only. No process-specific capability is proven + # by a generic marketing page; never silently classify it as a verified shop. + candidates = [r for r in registry if r["kind"] in + ("contract_manufacturer", "manufacturing_network", "manufacturing_marketplace", "supplier_directory")] + return [{**r, "requested_process": process, "exact_process_capability": Z} for r in candidates[:n]] + + +def verify_ztl_binding(request, receipt=None, verifier=None, *, expected_verifier_pin=None): + """Truth from external independent verifier only; fields in an untrusted receipt cannot attest themselves. + + verifier is injected from an independently validated ZTL Engineering adapter. + None means Z. Test stubs must not be used in real deployments. + """ + h = digest(request) + if not receipt or verifier is None or not expected_verifier_pin: + return {"verdict": Z, "why": "ztl_independent_verifier_not_connected", "request_sha256": h} + mandatory = ("request_sha256", "model_id", "theorem_id", "engine_pin", "epoch", "verifier_pin") + if any(not receipt.get(k) for k in mandatory) or receipt["request_sha256"] != h: + return {"verdict": F, "why": "ztl_receipt_missing_or_wrong_request", "request_sha256": h} + if receipt["verifier_pin"] != expected_verifier_pin: + return {"verdict": F, "why": "unrecognized_external_verifier"} + try: + verified = verifier(request, receipt) + except Exception: + return {"verdict": Z, "why": "independent_verifier_error"} + if verified is not True: + return {"verdict": F if verified is False else Z, + "why": "independent_verifier_rejected_or_unknown"} + return {"verdict": T, "why": "externally_verified_supported_ztl_model_only", + "model_id": receipt["model_id"], "theorem_id": receipt["theorem_id"], + "engine_pin": receipt["engine_pin"], "epoch": receipt["epoch"], + "request_sha256": h} + + +def evaluate_quote(q, group, *, demonstration): + """Fixture quote T is *comparative fixture arithmetic*, never a genuine offer.""" + for k in ("route", "spec_digest", "spec_revision", "process", "material", "capacity_units", + "moq_units", "landed_cents", "due_date", "source_scope"): + if k not in q: + return {"verdict": Z, "why": f"quote_missing_{k}"} + if (q["spec_digest"], q["spec_revision"], q["process"], q["material"]) != ( + group["spec_digest"], group["spec_revision"], group["process"], group["material"]): + return {"verdict": F, "why": "quote_scope_mismatch"} + if (type(q["capacity_units"]) is not int or type(q["moq_units"]) is not int or + type(q["landed_cents"]) is not int or q["landed_cents"] < 0): + return {"verdict": F, "why": "invalid_quote_amount_or_capacity"} + if q["moq_units"] > group["units"] or q["capacity_units"] < group["units"]: + return {"verdict": F, "why": "moq_or_capacity_failure"} + if q["due_date"] > min(x["due_date"] for x in group["demands"]): + return {"verdict": F, "why": "late_delivery"} + if q["source_scope"] == "SYNTHETIC_TEST_ONLY": + return {"verdict": T if demonstration else Z, "why": "simulated_quote_comparison_only"} + # External signature verification, supplier identity and fresh capacity + # must be witnessed by an independent adapter (not installed here). + return {"verdict": Z, "why": "external_supplier_quote_verifier_not_connected"} + + +def choose_route(group, offers, *, demonstration=False): + quotes = [] + denied = [] + for q in offers: + v = evaluate_quote(q, group, demonstration=demonstration) + if v["verdict"] == T: + quotes.append(q) + else: + denied.append({"route": q.get("route"), **v}) + quotes.sort(key=lambda q: (q["landed_cents"], q["route"])) + best = quotes[0] if quotes else None + # Allocation: integer cents; distribute remainder deterministically. + allocation = [] + if best: + total_units = group["units"] + base = 0 + for i, d in enumerate(group["demands"]): + val = best["landed_cents"] * d["qty"] // total_units + allocation.append({"buyer_id": d["buyer_id"], "qty": d["qty"], + "allocated_cents": val, "cap_cents": d["budget_cents"]}) + base += val + # Distinct buyers may have unequal quantities; distribute fractional-cent + # remainder by buyer ID and ensure each individual cap is rechecked. + remainder = best["landed_cents"] - base + for row in sorted(allocation, key=lambda x: x["buyer_id"])[:remainder]: + row["allocated_cents"] += 1 + if any(x["allocated_cents"] > x["cap_cents"] for x in allocation): + denied.append({"route": best["route"], "verdict": F, "why": "buyer_individual_budget_exceeded"}) + best = None + return {"verdict": T if best else Z, "route": best["route"] if best else None, + "landed_cents": best["landed_cents"] if best else None, + "allocation": allocation if best else [], "alternatives": [ + {"route": q["route"], "landed_cents": q["landed_cents"]} for q in quotes], + "rejected": denied, "comparison_scope": "SYNTHETIC_TEST_ONLY" if demonstration else "SUPPLIER_VERIFIED", + "coalition_needed": bool(best and best["route"] == "COALITION")} + + +def run_case(case_id): + cases = read_json("cases.json") + if case_id not in cases: + raise ValueError("unknown case") + case = cases[case_id] + demo = case.get("test_scope") == "SYNTHETIC_TEST_ONLY" + gathered = group_demand(case["demands"], demonstration=demo) + group = gathered["groups"][0] if gathered["groups"] else None + if group: + decision = choose_route(group, case["offers"], demonstration=demo) + eng_request = {"spec_digest": group["spec_digest"], "spec_revision": group["spec_revision"], + "process": group["process"], "material": group["material"], + "obligation": "engineering_suitability_for_manufacture"} + eng = verify_ztl_binding(eng_request) + shortlist = shortlist_sources(group["process"]) + else: + decision = {"verdict": Z, "route": None, "why": "no_permissioned_compatible_demand"} + eng = {"verdict": Z, "why": "no_valid_spec_to_verify"} + shortlist = [] + # Even an attractive numerical candidate is not an admitted contract. + gates = {"demand_discovery": T if group else Z, + "route_comparison": decision["verdict"], + "ztl_engineering": eng["verdict"], + "cad_dfm": Z, "real_supplier_quote": Z if demo else decision["verdict"], + "buyer_signatures": Z, "seller_commitment": Z, + "federation_admission": Z, "paypal_authority": Z, + "provider_readback": Z} + proposal = { + "schema": "legion.industrial.federation-proposal.v1", + "contract_proposal_hash": digest({"case":case_id,"group":group["spec_digest"] if group else None, + "decision":decision.get("route")}), + "source_case": case_id, "epoch": 0, "proposed_route": decision.get("route"), + "buyer_ids": group["buyers"] if group else [], + "source_scope": "SYNTHETIC_TEST_ONLY" if demo else "REAL_RECORDS", + "reliance": "NOT_ADMITTED_TO_EXISTING_FEDERATION", + "external_effects": 0, "paypal_captures_on_this_new_contract": 0, + } + return {"case_id": case_id, "title": case["title"], "test_scope": case["test_scope"], + "source_registry_count": source_registry()["total"], "candidate_suppliers": shortlist, + "demand": {"group": {k:v for k,v in (group or {}).items() if k != "demands"}, + "excluded": gathered["excluded"]}, + "route_decision": decision, "engineering": eng, "gates": gates, + "federation_proposal": proposal, + "outcome": "SYNTHETIC_ROUTE_CHOSEN_NOT_ADMITTED" if decision.get("route") and demo + else "HOLD_MISSING_EVIDENCE", + "claim": "No real customer orders, provider quotations, manufacturing, or new PayPal payments.", + "passport_sha256": digest({"proposal":proposal,"gates":gates,"decision":decision})} + + +def cases_index(): + return [{"id": k, "title": v["title"], "scope": v["test_scope"]} for k,v in read_json("cases.json").items()] + + +def supplier_rfq(case_id): + case = read_json("cases.json")[case_id] + group = group_demand(case["demands"], demonstration=True)["groups"] + if not group: + return "NO VALID DISCOVERY-CONSENTED GROUP — NOTHING TO SEND\n" + g = group[0] + return ("REQUEST FOR BUDGETARY QUOTE — NOT SENT / NO CONTRACT / NO PURCHASE\n" + f"Reference: {case_id}\nSpec revision: {g['spec_revision']}\n" + f"Specification digest: sha256:{g['spec_digest']}\n" + f"Process: {g['process']} | material: {g['material']} | quantity: {g['units']}\n" + f"Latest delivery: {min(d['due_date'] for d in g['demands'])}\n" + "Please specify actual CAD/DFM feasibility, all-in cost, MOQ, capacity, earliest ship date," + " applicable certifications, payment terms, quote expiry, and technical exceptions.\n" + "No private CAD file or buyer contact is disclosed. Buyer identities and requirements" + " are synthetic fixtures. No order is authorized.\n") diff --git a/deal_rescue/industrial/data/cases.json b/deal_rescue/industrial/data/cases.json new file mode 100644 index 0000000..59cf922 --- /dev/null +++ b/deal_rescue/industrial/data/cases.json @@ -0,0 +1,392 @@ +{ + "coalition": { + "title": "Five independently opted-in (synthetic) industrial orders: collective SLS procurement vs direct/AM/split", + "test_scope": "SYNTHETIC_TEST_ONLY", + "demands": [ + { + "id": "demo-lost-quote-1", + "buyer_id": "DEMO-BUYER-1", + "spec_digest": "45fb81e09beb1bff53d8519b84cdbed21291af89a197a41f760471fd54248182", + "spec_revision": "REV-C", + "process": "SLS", + "material": "PA12", + "qty": 20, + "budget_cents": 78000, + "due_date": "2026-12-10", + "consent_scope": "coalition_discovery", + "source_scope": "SYNTHETIC_TEST_ONLY", + "revoked": false + }, + { + "id": "demo-lost-quote-2", + "buyer_id": "DEMO-BUYER-2", + "spec_digest": "45fb81e09beb1bff53d8519b84cdbed21291af89a197a41f760471fd54248182", + "spec_revision": "REV-C", + "process": "SLS", + "material": "PA12", + "qty": 20, + "budget_cents": 78000, + "due_date": "2026-12-10", + "consent_scope": "coalition_discovery", + "source_scope": "SYNTHETIC_TEST_ONLY", + "revoked": false + }, + { + "id": "demo-lost-quote-3", + "buyer_id": "DEMO-BUYER-3", + "spec_digest": "45fb81e09beb1bff53d8519b84cdbed21291af89a197a41f760471fd54248182", + "spec_revision": "REV-C", + "process": "SLS", + "material": "PA12", + "qty": 20, + "budget_cents": 78000, + "due_date": "2026-12-10", + "consent_scope": "coalition_discovery", + "source_scope": "SYNTHETIC_TEST_ONLY", + "revoked": false + }, + { + "id": "demo-lost-quote-4", + "buyer_id": "DEMO-BUYER-4", + "spec_digest": "45fb81e09beb1bff53d8519b84cdbed21291af89a197a41f760471fd54248182", + "spec_revision": "REV-C", + "process": "SLS", + "material": "PA12", + "qty": 20, + "budget_cents": 78000, + "due_date": "2026-12-10", + "consent_scope": "coalition_discovery", + "source_scope": "SYNTHETIC_TEST_ONLY", + "revoked": false + }, + { + "id": "demo-lost-quote-5", + "buyer_id": "DEMO-BUYER-5", + "spec_digest": "45fb81e09beb1bff53d8519b84cdbed21291af89a197a41f760471fd54248182", + "spec_revision": "REV-C", + "process": "SLS", + "material": "PA12", + "qty": 20, + "budget_cents": 78000, + "due_date": "2026-12-10", + "consent_scope": "coalition_discovery", + "source_scope": "SYNTHETIC_TEST_ONLY", + "revoked": false + } + ], + "offers": [ + { + "route": "DIRECT", + "spec_digest": "45fb81e09beb1bff53d8519b84cdbed21291af89a197a41f760471fd54248182", + "spec_revision": "REV-C", + "process": "SLS", + "material": "PA12", + "capacity_units": 120, + "moq_units": 1, + "landed_cents": 385000, + "due_date": "2026-12-05", + "source_scope": "SYNTHETIC_TEST_ONLY", + "provider": "DEMO-SUPPLIER-NOT-REAL" + }, + { + "route": "ADDITIVE_SINGLE", + "spec_digest": "45fb81e09beb1bff53d8519b84cdbed21291af89a197a41f760471fd54248182", + "spec_revision": "REV-C", + "process": "SLS", + "material": "PA12", + "capacity_units": 120, + "moq_units": 1, + "landed_cents": 410000, + "due_date": "2026-12-05", + "source_scope": "SYNTHETIC_TEST_ONLY", + "provider": "DEMO-SUPPLIER-NOT-REAL" + }, + { + "route": "SPLIT_SUPPLY", + "spec_digest": "45fb81e09beb1bff53d8519b84cdbed21291af89a197a41f760471fd54248182", + "spec_revision": "REV-C", + "process": "SLS", + "material": "PA12", + "capacity_units": 120, + "moq_units": 1, + "landed_cents": 340000, + "due_date": "2026-12-05", + "source_scope": "SYNTHETIC_TEST_ONLY", + "provider": "DEMO-SUPPLIER-NOT-REAL" + }, + { + "route": "COALITION", + "spec_digest": "45fb81e09beb1bff53d8519b84cdbed21291af89a197a41f760471fd54248182", + "spec_revision": "REV-C", + "process": "SLS", + "material": "PA12", + "capacity_units": 120, + "moq_units": 100, + "landed_cents": 230000, + "due_date": "2026-12-05", + "source_scope": "SYNTHETIC_TEST_ONLY", + "provider": "DEMO-SUPPLIER-NOT-REAL" + } + ] + }, + "direct": { + "title": "Same demand, direct procurement objectively beats coalition", + "test_scope": "SYNTHETIC_TEST_ONLY", + "demands": [ + { + "id": "demo-lost-quote-1", + "buyer_id": "DEMO-BUYER-1", + "spec_digest": "45fb81e09beb1bff53d8519b84cdbed21291af89a197a41f760471fd54248182", + "spec_revision": "REV-C", + "process": "SLS", + "material": "PA12", + "qty": 20, + "budget_cents": 78000, + "due_date": "2026-12-10", + "consent_scope": "coalition_discovery", + "source_scope": "SYNTHETIC_TEST_ONLY", + "revoked": false + }, + { + "id": "demo-lost-quote-2", + "buyer_id": "DEMO-BUYER-2", + "spec_digest": "45fb81e09beb1bff53d8519b84cdbed21291af89a197a41f760471fd54248182", + "spec_revision": "REV-C", + "process": "SLS", + "material": "PA12", + "qty": 20, + "budget_cents": 78000, + "due_date": "2026-12-10", + "consent_scope": "coalition_discovery", + "source_scope": "SYNTHETIC_TEST_ONLY", + "revoked": false + }, + { + "id": "demo-lost-quote-3", + "buyer_id": "DEMO-BUYER-3", + "spec_digest": "45fb81e09beb1bff53d8519b84cdbed21291af89a197a41f760471fd54248182", + "spec_revision": "REV-C", + "process": "SLS", + "material": "PA12", + "qty": 20, + "budget_cents": 78000, + "due_date": "2026-12-10", + "consent_scope": "coalition_discovery", + "source_scope": "SYNTHETIC_TEST_ONLY", + "revoked": false + }, + { + "id": "demo-lost-quote-4", + "buyer_id": "DEMO-BUYER-4", + "spec_digest": "45fb81e09beb1bff53d8519b84cdbed21291af89a197a41f760471fd54248182", + "spec_revision": "REV-C", + "process": "SLS", + "material": "PA12", + "qty": 20, + "budget_cents": 78000, + "due_date": "2026-12-10", + "consent_scope": "coalition_discovery", + "source_scope": "SYNTHETIC_TEST_ONLY", + "revoked": false + }, + { + "id": "demo-lost-quote-5", + "buyer_id": "DEMO-BUYER-5", + "spec_digest": "45fb81e09beb1bff53d8519b84cdbed21291af89a197a41f760471fd54248182", + "spec_revision": "REV-C", + "process": "SLS", + "material": "PA12", + "qty": 20, + "budget_cents": 78000, + "due_date": "2026-12-10", + "consent_scope": "coalition_discovery", + "source_scope": "SYNTHETIC_TEST_ONLY", + "revoked": false + } + ], + "offers": [ + { + "route": "DIRECT", + "spec_digest": "45fb81e09beb1bff53d8519b84cdbed21291af89a197a41f760471fd54248182", + "spec_revision": "REV-C", + "process": "SLS", + "material": "PA12", + "capacity_units": 120, + "moq_units": 1, + "landed_cents": 200000, + "due_date": "2026-12-05", + "source_scope": "SYNTHETIC_TEST_ONLY", + "provider": "DEMO-SUPPLIER-NOT-REAL" + }, + { + "route": "ADDITIVE_SINGLE", + "spec_digest": "45fb81e09beb1bff53d8519b84cdbed21291af89a197a41f760471fd54248182", + "spec_revision": "REV-C", + "process": "SLS", + "material": "PA12", + "capacity_units": 120, + "moq_units": 1, + "landed_cents": 410000, + "due_date": "2026-12-05", + "source_scope": "SYNTHETIC_TEST_ONLY", + "provider": "DEMO-SUPPLIER-NOT-REAL" + }, + { + "route": "SPLIT_SUPPLY", + "spec_digest": "45fb81e09beb1bff53d8519b84cdbed21291af89a197a41f760471fd54248182", + "spec_revision": "REV-C", + "process": "SLS", + "material": "PA12", + "capacity_units": 120, + "moq_units": 1, + "landed_cents": 340000, + "due_date": "2026-12-05", + "source_scope": "SYNTHETIC_TEST_ONLY", + "provider": "DEMO-SUPPLIER-NOT-REAL" + }, + { + "route": "COALITION", + "spec_digest": "45fb81e09beb1bff53d8519b84cdbed21291af89a197a41f760471fd54248182", + "spec_revision": "REV-C", + "process": "SLS", + "material": "PA12", + "capacity_units": 120, + "moq_units": 100, + "landed_cents": 230000, + "due_date": "2026-12-05", + "source_scope": "SYNTHETIC_TEST_ONLY", + "provider": "DEMO-SUPPLIER-NOT-REAL" + } + ] + }, + "mismatch": { + "title": "One buyer requires a different technical revision: no superficial grouping", + "test_scope": "SYNTHETIC_TEST_ONLY", + "demands": [ + { + "id": "demo-lost-quote-1", + "buyer_id": "DEMO-BUYER-1", + "spec_digest": "45fb81e09beb1bff53d8519b84cdbed21291af89a197a41f760471fd54248182", + "spec_revision": "REV-C", + "process": "SLS", + "material": "PA12", + "qty": 20, + "budget_cents": 78000, + "due_date": "2026-12-10", + "consent_scope": "coalition_discovery", + "source_scope": "SYNTHETIC_TEST_ONLY", + "revoked": false + }, + { + "id": "demo-lost-quote-2", + "buyer_id": "DEMO-BUYER-2", + "spec_digest": "45fb81e09beb1bff53d8519b84cdbed21291af89a197a41f760471fd54248182", + "spec_revision": "REV-C", + "process": "SLS", + "material": "PA12", + "qty": 20, + "budget_cents": 78000, + "due_date": "2026-12-10", + "consent_scope": "coalition_discovery", + "source_scope": "SYNTHETIC_TEST_ONLY", + "revoked": false + }, + { + "id": "demo-lost-quote-3", + "buyer_id": "DEMO-BUYER-3", + "spec_digest": "45fb81e09beb1bff53d8519b84cdbed21291af89a197a41f760471fd54248182", + "spec_revision": "REV-C", + "process": "SLS", + "material": "PA12", + "qty": 20, + "budget_cents": 78000, + "due_date": "2026-12-10", + "consent_scope": "coalition_discovery", + "source_scope": "SYNTHETIC_TEST_ONLY", + "revoked": false + }, + { + "id": "demo-lost-quote-4", + "buyer_id": "DEMO-BUYER-4", + "spec_digest": "45fb81e09beb1bff53d8519b84cdbed21291af89a197a41f760471fd54248182", + "spec_revision": "REV-C", + "process": "SLS", + "material": "PA12", + "qty": 20, + "budget_cents": 78000, + "due_date": "2026-12-10", + "consent_scope": "coalition_discovery", + "source_scope": "SYNTHETIC_TEST_ONLY", + "revoked": false + }, + { + "id": "demo-lost-quote-5", + "buyer_id": "DEMO-BUYER-5", + "spec_digest": "45fb81e09beb1bff53d8519b84cdbed21291af89a197a41f760471fd54248182", + "spec_revision": "REV-D", + "process": "SLS", + "material": "PA12", + "qty": 20, + "budget_cents": 78000, + "due_date": "2026-12-10", + "consent_scope": "coalition_discovery", + "source_scope": "SYNTHETIC_TEST_ONLY", + "revoked": false + } + ], + "offers": [ + { + "route": "DIRECT", + "spec_digest": "45fb81e09beb1bff53d8519b84cdbed21291af89a197a41f760471fd54248182", + "spec_revision": "REV-C", + "process": "SLS", + "material": "PA12", + "capacity_units": 120, + "moq_units": 1, + "landed_cents": 385000, + "due_date": "2026-12-05", + "source_scope": "SYNTHETIC_TEST_ONLY", + "provider": "DEMO-SUPPLIER-NOT-REAL" + }, + { + "route": "ADDITIVE_SINGLE", + "spec_digest": "45fb81e09beb1bff53d8519b84cdbed21291af89a197a41f760471fd54248182", + "spec_revision": "REV-C", + "process": "SLS", + "material": "PA12", + "capacity_units": 120, + "moq_units": 1, + "landed_cents": 410000, + "due_date": "2026-12-05", + "source_scope": "SYNTHETIC_TEST_ONLY", + "provider": "DEMO-SUPPLIER-NOT-REAL" + }, + { + "route": "SPLIT_SUPPLY", + "spec_digest": "45fb81e09beb1bff53d8519b84cdbed21291af89a197a41f760471fd54248182", + "spec_revision": "REV-C", + "process": "SLS", + "material": "PA12", + "capacity_units": 120, + "moq_units": 1, + "landed_cents": 340000, + "due_date": "2026-12-05", + "source_scope": "SYNTHETIC_TEST_ONLY", + "provider": "DEMO-SUPPLIER-NOT-REAL" + }, + { + "route": "COALITION", + "spec_digest": "45fb81e09beb1bff53d8519b84cdbed21291af89a197a41f760471fd54248182", + "spec_revision": "REV-C", + "process": "SLS", + "material": "PA12", + "capacity_units": 120, + "moq_units": 100, + "landed_cents": 230000, + "due_date": "2026-12-05", + "source_scope": "SYNTHETIC_TEST_ONLY", + "provider": "DEMO-SUPPLIER-NOT-REAL" + } + ] + } +} diff --git a/deal_rescue/industrial/data/sources.json b/deal_rescue/industrial/data/sources.json new file mode 100644 index 0000000..f060be5 --- /dev/null +++ b/deal_rescue/industrial/data/sources.json @@ -0,0 +1,1119 @@ +{ + "created": "2026-11-10", + "registry_status": "36 directly researched seed entrypoints + 48 names indexed from HP directory (includes 3 aliases) + 3 additional official sources; not exhaustive and no qualified suppliers or quotes", + "records": [ + { + "id": "P001", + "name": "Xometry", + "type": "manufacturing_marketplace", + "official_source": "https://www.xometry.com/capabilities/3d-printing-service/", + "observed_capability": "3D printing, CNC; immediate quotes; provider match", + "status": "T_PROVIDER_DESCRIPTION_ONLY", + "quote_status": "Z", + "available_api": "Z_UNLESS_SPECIFICALLY_DOCUMENTED", + "authorized_access": "Z" + }, + { + "id": "P002", + "name": "Protolabs", + "type": "contract_manufacturer", + "official_source": "https://www.protolabs.com/services/3d-printing/", + "observed_capability": "Certified 3D printing including metal", + "status": "T_PROVIDER_DESCRIPTION_ONLY", + "quote_status": "Z", + "available_api": "Z_UNLESS_SPECIFICALLY_DOCUMENTED", + "authorized_access": "Z" + }, + { + "id": "P003", + "name": "Protolabs Network (formerly Hubs)", + "type": "manufacturing_network", + "official_source": "https://www.hubs.com/3d-printing/", + "observed_capability": "Network of 3D print shops; distinct brand within Protolabs", + "status": "T_PROVIDER_DESCRIPTION_ONLY", + "quote_status": "Z", + "available_api": "Z_UNLESS_SPECIFICALLY_DOCUMENTED", + "authorized_access": "Z" + }, + { + "id": "P004", + "name": "Craftcloud", + "type": "manufacturing_marketplace", + "official_source": "https://craftcloud3d.com/", + "observed_capability": "Global multi-provider price comparison", + "status": "T_PROVIDER_DESCRIPTION_ONLY", + "quote_status": "Z", + "available_api": "Z_UNLESS_SPECIFICALLY_DOCUMENTED", + "authorized_access": "Z" + }, + { + "id": "P005", + "name": "Treatstock", + "type": "manufacturing_marketplace", + "official_source": "https://www.treatstock.com/", + "observed_capability": "Independent manufacturers, quotes and buyer protection", + "status": "T_PROVIDER_DESCRIPTION_ONLY", + "quote_status": "Z", + "available_api": "Z_UNLESS_SPECIFICALLY_DOCUMENTED", + "authorized_access": "Z" + }, + { + "id": "P006", + "name": "PROTIQ", + "type": "manufacturing_marketplace", + "official_source": "https://www.protiq.com/en/how-protiq-works/", + "observed_capability": "More than 40 manufacturing providers according to provider", + "status": "T_PROVIDER_DESCRIPTION_ONLY", + "quote_status": "Z", + "available_api": "Z_UNLESS_SPECIFICALLY_DOCUMENTED", + "authorized_access": "Z" + }, + { + "id": "P007", + "name": "MakerVerse", + "type": "manufacturing_network", + "official_source": "https://www.makerverse.com/", + "observed_capability": "Managed industrial manufacturing and quality", + "status": "T_PROVIDER_DESCRIPTION_ONLY", + "quote_status": "Z", + "available_api": "Z_UNLESS_SPECIFICALLY_DOCUMENTED", + "authorized_access": "Z" + }, + { + "id": "P008", + "name": "Beamler", + "type": "manufacturing_network", + "official_source": "https://www.beamler.com/", + "observed_capability": "Global production partners, including specialty materials", + "status": "T_PROVIDER_DESCRIPTION_ONLY", + "quote_status": "Z", + "available_api": "Z_UNLESS_SPECIFICALLY_DOCUMENTED", + "authorized_access": "Z" + }, + { + "id": "P009", + "name": "3dfabs", + "type": "manufacturing_marketplace", + "official_source": "https://3dfabs.org/", + "observed_capability": "Open requests and manufacturer matching", + "status": "T_PROVIDER_DESCRIPTION_ONLY", + "quote_status": "Z", + "available_api": "Z_UNLESS_SPECIFICALLY_DOCUMENTED", + "authorized_access": "Z" + }, + { + "id": "P010", + "name": "Sculpteo", + "type": "contract_manufacturer", + "official_source": "https://www.sculpteo.com/en/", + "observed_capability": "Polymer and metal 3D printing", + "status": "T_PROVIDER_DESCRIPTION_ONLY", + "quote_status": "Z", + "available_api": "T_API_DOCUMENTED_ACCESS_BY_REQUEST", + "authorized_access": "Z", + "api_source": "https://www.sculpteo.com/en/services/api-services/" + }, + { + "id": "P011", + "name": "Materialise OnSite", + "type": "contract_manufacturer", + "official_source": "https://www.materialise.com/en/industrial/3d-printing-services/online-3d-printing", + "observed_capability": "Online quoting; verify production-grade requirements separately", + "status": "T_PROVIDER_DESCRIPTION_ONLY", + "quote_status": "Z", + "available_api": "Z_UNLESS_SPECIFICALLY_DOCUMENTED", + "authorized_access": "Z" + }, + { + "id": "P012", + "name": "Fictiv", + "type": "manufacturing_network", + "official_source": "https://www.fictiv.com/help/getting-a-quote/how-long-does-it-take-to-get-a-quote", + "observed_capability": "CAD upload; 3D printing quotes; manual DFM for special features", + "status": "T_PROVIDER_DESCRIPTION_ONLY", + "quote_status": "Z", + "available_api": "Z_UNLESS_SPECIFICALLY_DOCUMENTED", + "authorized_access": "Z" + }, + { + "id": "P013", + "name": "Stratasys Direct", + "type": "contract_manufacturer", + "official_source": "https://www.stratasys.com/en/stratasysdirect/services/3d-printing-services", + "observed_capability": "Industrial polymer 3D printing; not metal as of official FAQ", + "status": "T_PROVIDER_DESCRIPTION_ONLY", + "quote_status": "Z", + "available_api": "Z_UNLESS_SPECIFICALLY_DOCUMENTED", + "authorized_access": "Z" + }, + { + "id": "P014", + "name": "JLC3DP", + "type": "contract_manufacturer", + "official_source": "https://jlc3dp.com/", + "observed_capability": "Plastic and metal 3D printing, including PEEK/PEKK", + "status": "T_PROVIDER_DESCRIPTION_ONLY", + "quote_status": "Z", + "available_api": "Z_UNLESS_SPECIFICALLY_DOCUMENTED", + "authorized_access": "Z" + }, + { + "id": "P015", + "name": "PCBWay", + "type": "contract_manufacturer", + "official_source": "https://www.pcbway.com/rapid-prototyping/", + "observed_capability": "3D printing, CNC, tooling; manual approval of special parts", + "status": "T_PROVIDER_DESCRIPTION_ONLY", + "quote_status": "Z", + "available_api": "Z_UNLESS_SPECIFICALLY_DOCUMENTED", + "authorized_access": "Z" + }, + { + "id": "P016", + "name": "Shapeways", + "type": "contract_manufacturer", + "official_source": "https://www.shapeways.com/business/3d-printing-service", + "observed_capability": "3D print manufacturing; confirm quote availability", + "status": "T_PROVIDER_DESCRIPTION_ONLY", + "quote_status": "Z", + "available_api": "Z_UNLESS_SPECIFICALLY_DOCUMENTED", + "authorized_access": "Z" + }, + { + "id": "P017", + "name": "Quickparts", + "type": "contract_manufacturer", + "official_source": "https://quickparts.com/3d-printing-company/", + "observed_capability": "Hybrid global manufacturing, no minimum order reported", + "status": "T_PROVIDER_DESCRIPTION_ONLY", + "quote_status": "Z", + "available_api": "Z_UNLESS_SPECIFICALLY_DOCUMENTED", + "authorized_access": "Z" + }, + { + "id": "P018", + "name": "Weerg", + "type": "contract_manufacturer", + "official_source": "https://www.weerg.com/faq/what-does-weerg-do", + "observed_capability": "In-house MJF/FDM/MSLA and CNC", + "status": "T_PROVIDER_DESCRIPTION_ONLY", + "quote_status": "Z", + "available_api": "Z_UNLESS_SPECIFICALLY_DOCUMENTED", + "authorized_access": "Z" + }, + { + "id": "P019", + "name": "3DPRINTUK", + "type": "contract_manufacturer", + "official_source": "https://www.3dprint-uk.co.uk/3d-printing-services/", + "observed_capability": "SLS/MJF/SAF, UK; minimum order value", + "status": "T_PROVIDER_DESCRIPTION_ONLY", + "quote_status": "Z", + "available_api": "Z_UNLESS_SPECIFICALLY_DOCUMENTED", + "authorized_access": "Z" + }, + { + "id": "P020", + "name": "FacFox", + "type": "manufacturing_network", + "official_source": "https://facfox.com/service/3d-printing-service", + "observed_capability": "Polymer and metal AM, managed manufacturing", + "status": "T_PROVIDER_DESCRIPTION_ONLY", + "quote_status": "Z", + "available_api": "Z_UNLESS_SPECIFICALLY_DOCUMENTED", + "authorized_access": "Z" + }, + { + "id": "P021", + "name": "JawsTec", + "type": "contract_manufacturer", + "official_source": "https://www.jawstec.com/", + "observed_capability": "3D printing and CNC, US", + "status": "T_PROVIDER_DESCRIPTION_ONLY", + "quote_status": "Z", + "available_api": "Z_UNLESS_SPECIFICALLY_DOCUMENTED", + "authorized_access": "Z" + }, + { + "id": "P022", + "name": "RapidDirect", + "type": "manufacturing_network", + "official_source": "https://www.rapiddirect.com/ru/services/3d-printing/", + "observed_capability": "On-demand polymer and metal 3D printing", + "status": "T_PROVIDER_DESCRIPTION_ONLY", + "quote_status": "Z", + "available_api": "Z_UNLESS_SPECIFICALLY_DOCUMENTED", + "authorized_access": "Z" + }, + { + "id": "P023", + "name": "Prototal Group", + "type": "contract_manufacturer", + "official_source": "https://prototalgroup.com/services/industrial-3d-printing/", + "observed_capability": "European industrial AM service group", + "status": "T_PROVIDER_DESCRIPTION_ONLY", + "quote_status": "Z", + "available_api": "Z_UNLESS_SPECIFICALLY_DOCUMENTED", + "authorized_access": "Z" + }, + { + "id": "P024", + "name": "3ERP", + "type": "contract_manufacturer", + "official_source": "https://www.3erp.com/faqs/", + "observed_capability": "Metal and polymer 3D manufacturing in China", + "status": "T_PROVIDER_DESCRIPTION_ONLY", + "quote_status": "Z", + "available_api": "Z_UNLESS_SPECIFICALLY_DOCUMENTED", + "authorized_access": "Z" + }, + { + "id": "P025", + "name": "Fathom Manufacturing", + "type": "contract_manufacturer", + "official_source": "https://fathommfg.com/capabilities/3d-printing-services/", + "observed_capability": "US industrial AM across multiple processes", + "status": "T_PROVIDER_DESCRIPTION_ONLY", + "quote_status": "Z", + "available_api": "Z_UNLESS_SPECIFICALLY_DOCUMENTED", + "authorized_access": "Z" + }, + { + "id": "P026", + "name": "3D Printer on Demand", + "type": "contract_manufacturer", + "official_source": "https://www.3dprinterondemand.com/services/3d-printing-service", + "observed_capability": "US FDM farm; quotes and low MOQ", + "status": "T_PROVIDER_DESCRIPTION_ONLY", + "quote_status": "Z", + "available_api": "Z_UNLESS_SPECIFICALLY_DOCUMENTED", + "authorized_access": "Z" + }, + { + "id": "P027", + "name": "Uptive / GoProto", + "type": "manufacturing_network", + "official_source": "https://uptivemfg.com/our-brands/goproto/", + "observed_capability": "Manufacturing network with 3D print expertise", + "status": "T_PROVIDER_DESCRIPTION_ONLY", + "quote_status": "Z", + "available_api": "Z_UNLESS_SPECIFICALLY_DOCUMENTED", + "authorized_access": "Z" + }, + { + "id": "P028", + "name": "HP Digital Manufacturing Network", + "type": "supplier_directory", + "official_source": "https://www.hp.com/us-en/printers/3d-printers/learning-center/how-3d-printing-service-helps-business.html", + "observed_capability": "Directory of 3D printing providers; not blanket API permission", + "status": "T_PROVIDER_DESCRIPTION_ONLY", + "quote_status": "Z", + "available_api": "Z_UNLESS_SPECIFICALLY_DOCUMENTED", + "authorized_access": "Z" + }, + { + "id": "P029", + "name": "EOS Manufacturing Partners", + "type": "supplier_directory", + "official_source": "https://www.eos.info/partners/manufacturing-partners", + "observed_capability": "EOS lists 800+ partner companies worldwide", + "status": "T_PROVIDER_DESCRIPTION_ONLY", + "quote_status": "Z", + "available_api": "Z_UNLESS_SPECIFICALLY_DOCUMENTED", + "authorized_access": "Z" + }, + { + "id": "P030", + "name": "Arkema Service Bureaus", + "type": "supplier_directory", + "official_source": "https://hpp.arkema.com/en/markets-and-applications/3d-printing/service-bureaus/", + "observed_capability": "Regional provider directory", + "status": "T_PROVIDER_DESCRIPTION_ONLY", + "quote_status": "Z", + "available_api": "Z_UNLESS_SPECIFICALLY_DOCUMENTED", + "authorized_access": "Z" + }, + { + "id": "P031", + "name": "Thomasnet", + "type": "industrial_supplier_directory", + "official_source": "https://www.thomasnet.com/", + "observed_capability": "Broad supplier discovery; 3D manufacturing can be filtered", + "status": "T_PROVIDER_DESCRIPTION_ONLY", + "quote_status": "Z", + "available_api": "Z_UNLESS_SPECIFICALLY_DOCUMENTED", + "authorized_access": "Z" + }, + { + "id": "P032", + "name": "MFG.com", + "type": "rfq_marketplace", + "official_source": "https://knowledge.mfg.com/what-is-mfg-and-how-do-i-use-it", + "observed_capability": "Buyer RFQ access permission gated", + "status": "T_PROVIDER_DESCRIPTION_ONLY", + "quote_status": "Z", + "available_api": "Z_UNLESS_SPECIFICALLY_DOCUMENTED", + "authorized_access": "Z" + }, + { + "id": "P033", + "name": "Techpilot", + "type": "rfq_marketplace", + "official_source": "https://www.techpilot.com/en/for-buyers", + "observed_capability": "24k+ potential suppliers claimed; requires platform access", + "status": "T_PROVIDER_DESCRIPTION_ONLY", + "quote_status": "Z", + "available_api": "Z_UNLESS_SPECIFICALLY_DOCUMENTED", + "authorized_access": "Z" + }, + { + "id": "P034", + "name": "Xometry RFQ Partner Network", + "type": "rfq_marketplace", + "official_source": "https://www.xometry.com/capabilities/community/", + "observed_capability": "Supplier partner portal; not an unrestricted buyer lead feed", + "status": "T_PROVIDER_DESCRIPTION_ONLY", + "quote_status": "Z", + "available_api": "Z_UNLESS_SPECIFICALLY_DOCUMENTED", + "authorized_access": "Z" + }, + { + "id": "P035", + "name": "Alibaba.com", + "type": "industrial_marketplace", + "official_source": "https://www.alibaba.com/", + "observed_capability": "Supplier listings and RFQs; permissions and listing scope vary", + "status": "T_PROVIDER_DESCRIPTION_ONLY", + "quote_status": "Z", + "available_api": "Z_UNLESS_SPECIFICALLY_DOCUMENTED", + "authorized_access": "Z" + }, + { + "id": "P036", + "name": "AliExpress", + "type": "retail_marketplace", + "official_source": "https://www.aliexpress.com/", + "observed_capability": "Direct retail alternative, not verified wholesale manufacturer", + "status": "T_PROVIDER_DESCRIPTION_ONLY", + "quote_status": "Z", + "available_api": "Z_UNLESS_SPECIFICALLY_DOCUMENTED", + "authorized_access": "Z" + }, + { + "id": "HP1_01", + "name": "3D People Ltd", + "type": "directory_member", + "official_source": "https://reinvent.hp.com/us-en-3dprint-amnetworkdirectory", + "observed_capability": "MJF service bureau listed by HP; exact requested process, material, region, certification and availability unverified", + "status": "Z_DIRECTORY_SNAPSHOT_MEMBER_NOT_DIRECTLY_VERIFIED", + "directory_tier": "HP_LISTED_PARTNER", + "listing_provenance": "INDEXED_SEARCH_RESULT_2026-11-10; directory direct HTML is dynamic and does not expose member list in fetched text", + "linked_existing_registry_id": null, + "quote_status": "Z", + "available_api": "Z", + "authorized_access": "Z" + }, + { + "id": "HP1_02", + "name": "3D Prod", + "type": "directory_member", + "official_source": "https://reinvent.hp.com/us-en-3dprint-amnetworkdirectory", + "observed_capability": "MJF service bureau listed by HP; exact requested process, material, region, certification and availability unverified", + "status": "Z_DIRECTORY_SNAPSHOT_MEMBER_NOT_DIRECTLY_VERIFIED", + "directory_tier": "HP_LISTED_PARTNER", + "listing_provenance": "INDEXED_SEARCH_RESULT_2026-11-10; directory direct HTML is dynamic and does not expose member list in fetched text", + "linked_existing_registry_id": null, + "quote_status": "Z", + "available_api": "Z", + "authorized_access": "Z" + }, + { + "id": "HP1_03", + "name": "3d-Profidruck AG", + "type": "directory_member", + "official_source": "https://reinvent.hp.com/us-en-3dprint-amnetworkdirectory", + "observed_capability": "MJF service bureau listed by HP; exact requested process, material, region, certification and availability unverified", + "status": "Z_DIRECTORY_SNAPSHOT_MEMBER_NOT_DIRECTLY_VERIFIED", + "directory_tier": "HP_LISTED_PARTNER", + "listing_provenance": "INDEXED_SEARCH_RESULT_2026-11-10; directory direct HTML is dynamic and does not expose member list in fetched text", + "linked_existing_registry_id": null, + "quote_status": "Z", + "available_api": "Z", + "authorized_access": "Z" + }, + { + "id": "HP1_04", + "name": "3DPRINTUK Ltd", + "type": "directory_member", + "official_source": "https://reinvent.hp.com/us-en-3dprint-amnetworkdirectory", + "observed_capability": "MJF service bureau listed by HP; exact requested process, material, region, certification and availability unverified", + "status": "Z_DIRECTORY_SNAPSHOT_MEMBER_NOT_DIRECTLY_VERIFIED", + "directory_tier": "HP_LISTED_PARTNER", + "listing_provenance": "INDEXED_SEARCH_RESULT_2026-11-10; directory direct HTML is dynamic and does not expose member list in fetched text", + "linked_existing_registry_id": "P019", + "quote_status": "Z", + "available_api": "Z", + "authorized_access": "Z" + }, + { + "id": "HP1_05", + "name": "3Faktur GmbH", + "type": "directory_member", + "official_source": "https://reinvent.hp.com/us-en-3dprint-amnetworkdirectory", + "observed_capability": "MJF service bureau listed by HP; exact requested process, material, region, certification and availability unverified", + "status": "Z_DIRECTORY_SNAPSHOT_MEMBER_NOT_DIRECTLY_VERIFIED", + "directory_tier": "HP_LISTED_PARTNER", + "listing_provenance": "INDEXED_SEARCH_RESULT_2026-11-10; directory direct HTML is dynamic and does not expose member list in fetched text", + "linked_existing_registry_id": null, + "quote_status": "Z", + "available_api": "Z", + "authorized_access": "Z" + }, + { + "id": "HP1_06", + "name": "3iD", + "type": "directory_member", + "official_source": "https://reinvent.hp.com/us-en-3dprint-amnetworkdirectory", + "observed_capability": "MJF service bureau listed by HP; exact requested process, material, region, certification and availability unverified", + "status": "Z_DIRECTORY_SNAPSHOT_MEMBER_NOT_DIRECTLY_VERIFIED", + "directory_tier": "HP_LISTED_PARTNER", + "listing_provenance": "INDEXED_SEARCH_RESULT_2026-11-10; directory direct HTML is dynamic and does not expose member list in fetched text", + "linked_existing_registry_id": null, + "quote_status": "Z", + "available_api": "Z", + "authorized_access": "Z" + }, + { + "id": "HP1_07", + "name": "ABCorp 3D Inc.", + "type": "directory_member", + "official_source": "https://reinvent.hp.com/us-en-3dprint-amnetworkdirectory", + "observed_capability": "MJF service bureau listed by HP; exact requested process, material, region, certification and availability unverified", + "status": "Z_DIRECTORY_SNAPSHOT_MEMBER_NOT_DIRECTLY_VERIFIED", + "directory_tier": "HP_LISTED_PARTNER", + "listing_provenance": "INDEXED_SEARCH_RESULT_2026-11-10; directory direct HTML is dynamic and does not expose member list in fetched text", + "linked_existing_registry_id": null, + "quote_status": "Z", + "available_api": "Z", + "authorized_access": "Z" + }, + { + "id": "HP1_08", + "name": "AMufacture", + "type": "directory_member", + "official_source": "https://reinvent.hp.com/us-en-3dprint-amnetworkdirectory", + "observed_capability": "MJF service bureau listed by HP; exact requested process, material, region, certification and availability unverified", + "status": "Z_DIRECTORY_SNAPSHOT_MEMBER_NOT_DIRECTLY_VERIFIED", + "directory_tier": "HP_LISTED_PARTNER", + "listing_provenance": "INDEXED_SEARCH_RESULT_2026-11-10; directory direct HTML is dynamic and does not expose member list in fetched text", + "linked_existing_registry_id": null, + "quote_status": "Z", + "available_api": "Z", + "authorized_access": "Z" + }, + { + "id": "HP1_09", + "name": "AMUSE 3D", + "type": "directory_member", + "official_source": "https://reinvent.hp.com/us-en-3dprint-amnetworkdirectory", + "observed_capability": "MJF service bureau listed by HP; exact requested process, material, region, certification and availability unverified", + "status": "Z_DIRECTORY_SNAPSHOT_MEMBER_NOT_DIRECTLY_VERIFIED", + "directory_tier": "HP_LISTED_PARTNER", + "listing_provenance": "INDEXED_SEARCH_RESULT_2026-11-10; directory direct HTML is dynamic and does not expose member list in fetched text", + "linked_existing_registry_id": null, + "quote_status": "Z", + "available_api": "Z", + "authorized_access": "Z" + }, + { + "id": "HP1_10", + "name": "Bronymec", + "type": "directory_member", + "official_source": "https://reinvent.hp.com/us-en-3dprint-amnetworkdirectory", + "observed_capability": "MJF service bureau listed by HP; exact requested process, material, region, certification and availability unverified", + "status": "Z_DIRECTORY_SNAPSHOT_MEMBER_NOT_DIRECTLY_VERIFIED", + "directory_tier": "HP_LISTED_PARTNER", + "listing_provenance": "INDEXED_SEARCH_RESULT_2026-11-10; directory direct HTML is dynamic and does not expose member list in fetched text", + "linked_existing_registry_id": null, + "quote_status": "Z", + "available_api": "Z", + "authorized_access": "Z" + }, + { + "id": "HP1_11", + "name": "Douglass Innovations, Inc dba DI Labs", + "type": "directory_member", + "official_source": "https://reinvent.hp.com/us-en-3dprint-amnetworkdirectory", + "observed_capability": "MJF service bureau listed by HP; exact requested process, material, region, certification and availability unverified", + "status": "Z_DIRECTORY_SNAPSHOT_MEMBER_NOT_DIRECTLY_VERIFIED", + "directory_tier": "HP_LISTED_PARTNER", + "listing_provenance": "INDEXED_SEARCH_RESULT_2026-11-10; directory direct HTML is dynamic and does not expose member list in fetched text", + "linked_existing_registry_id": null, + "quote_status": "Z", + "available_api": "Z", + "authorized_access": "Z" + }, + { + "id": "HP1_12", + "name": "Endeavor 3D", + "type": "directory_member", + "official_source": "https://reinvent.hp.com/us-en-3dprint-amnetworkdirectory", + "observed_capability": "MJF service bureau listed by HP; exact requested process, material, region, certification and availability unverified", + "status": "Z_DIRECTORY_SNAPSHOT_MEMBER_NOT_DIRECTLY_VERIFIED", + "directory_tier": "HP_LISTED_PARTNER", + "listing_provenance": "INDEXED_SEARCH_RESULT_2026-11-10; directory direct HTML is dynamic and does not expose member list in fetched text", + "linked_existing_registry_id": null, + "quote_status": "Z", + "available_api": "Z", + "authorized_access": "Z" + }, + { + "id": "HP1_13", + "name": "Fantinelli srl", + "type": "directory_member", + "official_source": "https://reinvent.hp.com/us-en-3dprint-amnetworkdirectory", + "observed_capability": "MJF service bureau listed by HP; exact requested process, material, region, certification and availability unverified", + "status": "Z_DIRECTORY_SNAPSHOT_MEMBER_NOT_DIRECTLY_VERIFIED", + "directory_tier": "HP_LISTED_PARTNER", + "listing_provenance": "INDEXED_SEARCH_RESULT_2026-11-10; directory direct HTML is dynamic and does not expose member list in fetched text", + "linked_existing_registry_id": null, + "quote_status": "Z", + "available_api": "Z", + "authorized_access": "Z" + }, + { + "id": "HP1_14", + "name": "i-SOLIDS", + "type": "directory_member", + "official_source": "https://reinvent.hp.com/us-en-3dprint-amnetworkdirectory", + "observed_capability": "MJF service bureau listed by HP; exact requested process, material, region, certification and availability unverified", + "status": "Z_DIRECTORY_SNAPSHOT_MEMBER_NOT_DIRECTLY_VERIFIED", + "directory_tier": "HP_LISTED_PARTNER", + "listing_provenance": "INDEXED_SEARCH_RESULT_2026-11-10; directory direct HTML is dynamic and does not expose member list in fetched text", + "linked_existing_registry_id": null, + "quote_status": "Z", + "available_api": "Z", + "authorized_access": "Z" + }, + { + "id": "HP1_15", + "name": "Imaginarium Rapid Pvt. Ltd.", + "type": "directory_member", + "official_source": "https://reinvent.hp.com/us-en-3dprint-amnetworkdirectory", + "observed_capability": "MJF service bureau listed by HP; exact requested process, material, region, certification and availability unverified", + "status": "Z_DIRECTORY_SNAPSHOT_MEMBER_NOT_DIRECTLY_VERIFIED", + "directory_tier": "HP_LISTED_PARTNER", + "listing_provenance": "INDEXED_SEARCH_RESULT_2026-11-10; directory direct HTML is dynamic and does not expose member list in fetched text", + "linked_existing_registry_id": null, + "quote_status": "Z", + "available_api": "Z", + "authorized_access": "Z" + }, + { + "id": "HP1_16", + "name": "MAKERLY", + "type": "directory_member", + "official_source": "https://reinvent.hp.com/us-en-3dprint-amnetworkdirectory", + "observed_capability": "MJF service bureau listed by HP; exact requested process, material, region, certification and availability unverified", + "status": "Z_DIRECTORY_SNAPSHOT_MEMBER_NOT_DIRECTLY_VERIFIED", + "directory_tier": "HP_LISTED_PARTNER", + "listing_provenance": "INDEXED_SEARCH_RESULT_2026-11-10; directory direct HTML is dynamic and does not expose member list in fetched text", + "linked_existing_registry_id": null, + "quote_status": "Z", + "available_api": "Z", + "authorized_access": "Z" + }, + { + "id": "HP1_17", + "name": "MAUSA3D,S.L.", + "type": "directory_member", + "official_source": "https://reinvent.hp.com/us-en-3dprint-amnetworkdirectory", + "observed_capability": "MJF service bureau listed by HP; exact requested process, material, region, certification and availability unverified", + "status": "Z_DIRECTORY_SNAPSHOT_MEMBER_NOT_DIRECTLY_VERIFIED", + "directory_tier": "HP_LISTED_PARTNER", + "listing_provenance": "INDEXED_SEARCH_RESULT_2026-11-10; directory direct HTML is dynamic and does not expose member list in fetched text", + "linked_existing_registry_id": null, + "quote_status": "Z", + "available_api": "Z", + "authorized_access": "Z" + }, + { + "id": "HP1_18", + "name": "MK Machining LLC", + "type": "directory_member", + "official_source": "https://reinvent.hp.com/us-en-3dprint-amnetworkdirectory", + "observed_capability": "MJF service bureau listed by HP; exact requested process, material, region, certification and availability unverified", + "status": "Z_DIRECTORY_SNAPSHOT_MEMBER_NOT_DIRECTLY_VERIFIED", + "directory_tier": "HP_LISTED_PARTNER", + "listing_provenance": "INDEXED_SEARCH_RESULT_2026-11-10; directory direct HTML is dynamic and does not expose member list in fetched text", + "linked_existing_registry_id": null, + "quote_status": "Z", + "available_api": "Z", + "authorized_access": "Z" + }, + { + "id": "HP1_19", + "name": "NECO", + "type": "directory_member", + "official_source": "https://reinvent.hp.com/us-en-3dprint-amnetworkdirectory", + "observed_capability": "MJF service bureau listed by HP; exact requested process, material, region, certification and availability unverified", + "status": "Z_DIRECTORY_SNAPSHOT_MEMBER_NOT_DIRECTLY_VERIFIED", + "directory_tier": "HP_LISTED_PARTNER", + "listing_provenance": "INDEXED_SEARCH_RESULT_2026-11-10; directory direct HTML is dynamic and does not expose member list in fetched text", + "linked_existing_registry_id": null, + "quote_status": "Z", + "available_api": "Z", + "authorized_access": "Z" + }, + { + "id": "HP1_20", + "name": "Oechsler", + "type": "directory_member", + "official_source": "https://reinvent.hp.com/us-en-3dprint-amnetworkdirectory", + "observed_capability": "MJF service bureau listed by HP; exact requested process, material, region, certification and availability unverified", + "status": "Z_DIRECTORY_SNAPSHOT_MEMBER_NOT_DIRECTLY_VERIFIED", + "directory_tier": "HP_LISTED_PARTNER", + "listing_provenance": "INDEXED_SEARCH_RESULT_2026-11-10; directory direct HTML is dynamic and does not expose member list in fetched text", + "linked_existing_registry_id": null, + "quote_status": "Z", + "available_api": "Z", + "authorized_access": "Z" + }, + { + "id": "HP1_21", + "name": "Pantur", + "type": "directory_member", + "official_source": "https://reinvent.hp.com/us-en-3dprint-amnetworkdirectory", + "observed_capability": "MJF service bureau listed by HP; exact requested process, material, region, certification and availability unverified", + "status": "Z_DIRECTORY_SNAPSHOT_MEMBER_NOT_DIRECTLY_VERIFIED", + "directory_tier": "HP_LISTED_PARTNER", + "listing_provenance": "INDEXED_SEARCH_RESULT_2026-11-10; directory direct HTML is dynamic and does not expose member list in fetched text", + "linked_existing_registry_id": null, + "quote_status": "Z", + "available_api": "Z", + "authorized_access": "Z" + }, + { + "id": "HP1_22", + "name": "PolyD Srl", + "type": "directory_member", + "official_source": "https://reinvent.hp.com/us-en-3dprint-amnetworkdirectory", + "observed_capability": "MJF service bureau listed by HP; exact requested process, material, region, certification and availability unverified", + "status": "Z_DIRECTORY_SNAPSHOT_MEMBER_NOT_DIRECTLY_VERIFIED", + "directory_tier": "HP_LISTED_PARTNER", + "listing_provenance": "INDEXED_SEARCH_RESULT_2026-11-10; directory direct HTML is dynamic and does not expose member list in fetched text", + "linked_existing_registry_id": null, + "quote_status": "Z", + "available_api": "Z", + "authorized_access": "Z" + }, + { + "id": "HP1_23", + "name": "Prodartis AG", + "type": "directory_member", + "official_source": "https://reinvent.hp.com/us-en-3dprint-amnetworkdirectory", + "observed_capability": "MJF service bureau listed by HP; exact requested process, material, region, certification and availability unverified", + "status": "Z_DIRECTORY_SNAPSHOT_MEMBER_NOT_DIRECTLY_VERIFIED", + "directory_tier": "HP_LISTED_PARTNER", + "listing_provenance": "INDEXED_SEARCH_RESULT_2026-11-10; directory direct HTML is dynamic and does not expose member list in fetched text", + "linked_existing_registry_id": null, + "quote_status": "Z", + "available_api": "Z", + "authorized_access": "Z" + }, + { + "id": "HP1_24", + "name": "Prototal Industries", + "type": "directory_member", + "official_source": "https://reinvent.hp.com/us-en-3dprint-amnetworkdirectory", + "observed_capability": "MJF service bureau listed by HP; exact requested process, material, region, certification and availability unverified", + "status": "Z_DIRECTORY_SNAPSHOT_MEMBER_NOT_DIRECTLY_VERIFIED", + "directory_tier": "HP_LISTED_PARTNER", + "listing_provenance": "INDEXED_SEARCH_RESULT_2026-11-10; directory direct HTML is dynamic and does not expose member list in fetched text", + "linked_existing_registry_id": "P023", + "quote_status": "Z", + "available_api": "Z", + "authorized_access": "Z" + }, + { + "id": "HP1_25", + "name": "RapidCenter", + "type": "directory_member", + "official_source": "https://reinvent.hp.com/us-en-3dprint-amnetworkdirectory", + "observed_capability": "MJF service bureau listed by HP; exact requested process, material, region, certification and availability unverified", + "status": "Z_DIRECTORY_SNAPSHOT_MEMBER_NOT_DIRECTLY_VERIFIED", + "directory_tier": "HP_LISTED_PARTNER", + "listing_provenance": "INDEXED_SEARCH_RESULT_2026-11-10; directory direct HTML is dynamic and does not expose member list in fetched text", + "linked_existing_registry_id": null, + "quote_status": "Z", + "available_api": "Z", + "authorized_access": "Z" + }, + { + "id": "HP1_26", + "name": "RP2industrial", + "type": "directory_member", + "official_source": "https://reinvent.hp.com/us-en-3dprint-amnetworkdirectory", + "observed_capability": "MJF service bureau listed by HP; exact requested process, material, region, certification and availability unverified", + "status": "Z_DIRECTORY_SNAPSHOT_MEMBER_NOT_DIRECTLY_VERIFIED", + "directory_tier": "HP_LISTED_PARTNER", + "listing_provenance": "INDEXED_SEARCH_RESULT_2026-11-10; directory direct HTML is dynamic and does not expose member list in fetched text", + "linked_existing_registry_id": null, + "quote_status": "Z", + "available_api": "Z", + "authorized_access": "Z" + }, + { + "id": "HP1_27", + "name": "Shift 3D Manufacturing", + "type": "directory_member", + "official_source": "https://reinvent.hp.com/us-en-3dprint-amnetworkdirectory", + "observed_capability": "MJF service bureau listed by HP; exact requested process, material, region, certification and availability unverified", + "status": "Z_DIRECTORY_SNAPSHOT_MEMBER_NOT_DIRECTLY_VERIFIED", + "directory_tier": "HP_LISTED_PARTNER", + "listing_provenance": "INDEXED_SEARCH_RESULT_2026-11-10; directory direct HTML is dynamic and does not expose member list in fetched text", + "linked_existing_registry_id": null, + "quote_status": "Z", + "available_api": "Z", + "authorized_access": "Z" + }, + { + "id": "HP1_28", + "name": "Streamline 3D", + "type": "directory_member", + "official_source": "https://reinvent.hp.com/us-en-3dprint-amnetworkdirectory", + "observed_capability": "MJF service bureau listed by HP; exact requested process, material, region, certification and availability unverified", + "status": "Z_DIRECTORY_SNAPSHOT_MEMBER_NOT_DIRECTLY_VERIFIED", + "directory_tier": "HP_LISTED_PARTNER", + "listing_provenance": "INDEXED_SEARCH_RESULT_2026-11-10; directory direct HTML is dynamic and does not expose member list in fetched text", + "linked_existing_registry_id": null, + "quote_status": "Z", + "available_api": "Z", + "authorized_access": "Z" + }, + { + "id": "HP1_29", + "name": "Treddy S.r.l.", + "type": "directory_member", + "official_source": "https://reinvent.hp.com/us-en-3dprint-amnetworkdirectory", + "observed_capability": "MJF service bureau listed by HP; exact requested process, material, region, certification and availability unverified", + "status": "Z_DIRECTORY_SNAPSHOT_MEMBER_NOT_DIRECTLY_VERIFIED", + "directory_tier": "HP_LISTED_PARTNER", + "listing_provenance": "INDEXED_SEARCH_RESULT_2026-11-10; directory direct HTML is dynamic and does not expose member list in fetched text", + "linked_existing_registry_id": null, + "quote_status": "Z", + "available_api": "Z", + "authorized_access": "Z" + }, + { + "id": "HP1_30", + "name": "Uptive LLC", + "type": "directory_member", + "official_source": "https://reinvent.hp.com/us-en-3dprint-amnetworkdirectory", + "observed_capability": "MJF service bureau listed by HP; exact requested process, material, region, certification and availability unverified", + "status": "Z_DIRECTORY_SNAPSHOT_MEMBER_NOT_DIRECTLY_VERIFIED", + "directory_tier": "HP_LISTED_PARTNER", + "listing_provenance": "INDEXED_SEARCH_RESULT_2026-11-10; directory direct HTML is dynamic and does not expose member list in fetched text", + "linked_existing_registry_id": "P027", + "quote_status": "Z", + "available_api": "Z", + "authorized_access": "Z" + }, + { + "id": "HP1_31", + "name": "Ziggzagg NV", + "type": "directory_member", + "official_source": "https://reinvent.hp.com/us-en-3dprint-amnetworkdirectory", + "observed_capability": "MJF service bureau listed by HP; exact requested process, material, region, certification and availability unverified", + "status": "Z_DIRECTORY_SNAPSHOT_MEMBER_NOT_DIRECTLY_VERIFIED", + "directory_tier": "HP_LISTED_PARTNER", + "listing_provenance": "INDEXED_SEARCH_RESULT_2026-11-10; directory direct HTML is dynamic and does not expose member list in fetched text", + "linked_existing_registry_id": null, + "quote_status": "Z", + "available_api": "Z", + "authorized_access": "Z" + }, + { + "id": "HP2_01", + "name": "3DBAVARIA GmbH", + "type": "directory_member", + "official_source": "https://reinvent.hp.com/us-en-3dprint-amnetworkdirectory", + "observed_capability": "MJF service bureau listed by HP; exact requested process, material, region, certification and availability unverified", + "status": "Z_DIRECTORY_SNAPSHOT_MEMBER_NOT_DIRECTLY_VERIFIED", + "directory_tier": "HP_LISTED_CERTIFIED_PROVIDER", + "listing_provenance": "INDEXED_SEARCH_RESULT_2026-11-10; directory direct HTML is dynamic and does not expose member list in fetched text", + "linked_existing_registry_id": null, + "quote_status": "Z", + "available_api": "Z", + "authorized_access": "Z" + }, + { + "id": "HP2_02", + "name": "3DStep Oy", + "type": "directory_member", + "official_source": "https://reinvent.hp.com/us-en-3dprint-amnetworkdirectory", + "observed_capability": "MJF service bureau listed by HP; exact requested process, material, region, certification and availability unverified", + "status": "Z_DIRECTORY_SNAPSHOT_MEMBER_NOT_DIRECTLY_VERIFIED", + "directory_tier": "HP_LISTED_CERTIFIED_PROVIDER", + "listing_provenance": "INDEXED_SEARCH_RESULT_2026-11-10; directory direct HTML is dynamic and does not expose member list in fetched text", + "linked_existing_registry_id": null, + "quote_status": "Z", + "available_api": "Z", + "authorized_access": "Z" + }, + { + "id": "HP2_03", + "name": "AITIIP", + "type": "directory_member", + "official_source": "https://reinvent.hp.com/us-en-3dprint-amnetworkdirectory", + "observed_capability": "MJF service bureau listed by HP; exact requested process, material, region, certification and availability unverified", + "status": "Z_DIRECTORY_SNAPSHOT_MEMBER_NOT_DIRECTLY_VERIFIED", + "directory_tier": "HP_LISTED_CERTIFIED_PROVIDER", + "listing_provenance": "INDEXED_SEARCH_RESULT_2026-11-10; directory direct HTML is dynamic and does not expose member list in fetched text", + "linked_existing_registry_id": null, + "quote_status": "Z", + "available_api": "Z", + "authorized_access": "Z" + }, + { + "id": "HP2_04", + "name": "Ajatec Prototyping Oy", + "type": "directory_member", + "official_source": "https://reinvent.hp.com/us-en-3dprint-amnetworkdirectory", + "observed_capability": "MJF service bureau listed by HP; exact requested process, material, region, certification and availability unverified", + "status": "Z_DIRECTORY_SNAPSHOT_MEMBER_NOT_DIRECTLY_VERIFIED", + "directory_tier": "HP_LISTED_CERTIFIED_PROVIDER", + "listing_provenance": "INDEXED_SEARCH_RESULT_2026-11-10; directory direct HTML is dynamic and does not expose member list in fetched text", + "linked_existing_registry_id": null, + "quote_status": "Z", + "available_api": "Z", + "authorized_access": "Z" + }, + { + "id": "HP2_05", + "name": "BDL3D Ltd", + "type": "directory_member", + "official_source": "https://reinvent.hp.com/us-en-3dprint-amnetworkdirectory", + "observed_capability": "MJF service bureau listed by HP; exact requested process, material, region, certification and availability unverified", + "status": "Z_DIRECTORY_SNAPSHOT_MEMBER_NOT_DIRECTLY_VERIFIED", + "directory_tier": "HP_LISTED_CERTIFIED_PROVIDER", + "listing_provenance": "INDEXED_SEARCH_RESULT_2026-11-10; directory direct HTML is dynamic and does not expose member list in fetched text", + "linked_existing_registry_id": null, + "quote_status": "Z", + "available_api": "Z", + "authorized_access": "Z" + }, + { + "id": "HP2_06", + "name": "Blumak3d", + "type": "directory_member", + "official_source": "https://reinvent.hp.com/us-en-3dprint-amnetworkdirectory", + "observed_capability": "MJF service bureau listed by HP; exact requested process, material, region, certification and availability unverified", + "status": "Z_DIRECTORY_SNAPSHOT_MEMBER_NOT_DIRECTLY_VERIFIED", + "directory_tier": "HP_LISTED_CERTIFIED_PROVIDER", + "listing_provenance": "INDEXED_SEARCH_RESULT_2026-11-10; directory direct HTML is dynamic and does not expose member list in fetched text", + "linked_existing_registry_id": null, + "quote_status": "Z", + "available_api": "Z", + "authorized_access": "Z" + }, + { + "id": "HP2_07", + "name": "Immaculate3D by quick parts solutions private limited", + "type": "directory_member", + "official_source": "https://reinvent.hp.com/us-en-3dprint-amnetworkdirectory", + "observed_capability": "MJF service bureau listed by HP; exact requested process, material, region, certification and availability unverified", + "status": "Z_DIRECTORY_SNAPSHOT_MEMBER_NOT_DIRECTLY_VERIFIED", + "directory_tier": "HP_LISTED_CERTIFIED_PROVIDER", + "listing_provenance": "INDEXED_SEARCH_RESULT_2026-11-10; directory direct HTML is dynamic and does not expose member list in fetched text", + "linked_existing_registry_id": null, + "quote_status": "Z", + "available_api": "Z", + "authorized_access": "Z" + }, + { + "id": "HP2_08", + "name": "Link Solution Co., Ltd.", + "type": "directory_member", + "official_source": "https://reinvent.hp.com/us-en-3dprint-amnetworkdirectory", + "observed_capability": "MJF service bureau listed by HP; exact requested process, material, region, certification and availability unverified", + "status": "Z_DIRECTORY_SNAPSHOT_MEMBER_NOT_DIRECTLY_VERIFIED", + "directory_tier": "HP_LISTED_CERTIFIED_PROVIDER", + "listing_provenance": "INDEXED_SEARCH_RESULT_2026-11-10; directory direct HTML is dynamic and does not expose member list in fetched text", + "linked_existing_registry_id": null, + "quote_status": "Z", + "available_api": "Z", + "authorized_access": "Z" + }, + { + "id": "HP2_09", + "name": "Moonshot 3D LLC", + "type": "directory_member", + "official_source": "https://reinvent.hp.com/us-en-3dprint-amnetworkdirectory", + "observed_capability": "MJF service bureau listed by HP; exact requested process, material, region, certification and availability unverified", + "status": "Z_DIRECTORY_SNAPSHOT_MEMBER_NOT_DIRECTLY_VERIFIED", + "directory_tier": "HP_LISTED_CERTIFIED_PROVIDER", + "listing_provenance": "INDEXED_SEARCH_RESULT_2026-11-10; directory direct HTML is dynamic and does not expose member list in fetched text", + "linked_existing_registry_id": null, + "quote_status": "Z", + "available_api": "Z", + "authorized_access": "Z" + }, + { + "id": "HP2_10", + "name": "Norra Additive Manufacturing AB", + "type": "directory_member", + "official_source": "https://reinvent.hp.com/us-en-3dprint-amnetworkdirectory", + "observed_capability": "MJF service bureau listed by HP; exact requested process, material, region, certification and availability unverified", + "status": "Z_DIRECTORY_SNAPSHOT_MEMBER_NOT_DIRECTLY_VERIFIED", + "directory_tier": "HP_LISTED_CERTIFIED_PROVIDER", + "listing_provenance": "INDEXED_SEARCH_RESULT_2026-11-10; directory direct HTML is dynamic and does not expose member list in fetched text", + "linked_existing_registry_id": null, + "quote_status": "Z", + "available_api": "Z", + "authorized_access": "Z" + }, + { + "id": "HP2_11", + "name": "Paccalini srl", + "type": "directory_member", + "official_source": "https://reinvent.hp.com/us-en-3dprint-amnetworkdirectory", + "observed_capability": "MJF service bureau listed by HP; exact requested process, material, region, certification and availability unverified", + "status": "Z_DIRECTORY_SNAPSHOT_MEMBER_NOT_DIRECTLY_VERIFIED", + "directory_tier": "HP_LISTED_CERTIFIED_PROVIDER", + "listing_provenance": "INDEXED_SEARCH_RESULT_2026-11-10; directory direct HTML is dynamic and does not expose member list in fetched text", + "linked_existing_registry_id": null, + "quote_status": "Z", + "available_api": "Z", + "authorized_access": "Z" + }, + { + "id": "HP2_12", + "name": "PRIMAEAM SOLUTIONS PRIVATE LIMITED", + "type": "directory_member", + "official_source": "https://reinvent.hp.com/us-en-3dprint-amnetworkdirectory", + "observed_capability": "MJF service bureau listed by HP; exact requested process, material, region, certification and availability unverified", + "status": "Z_DIRECTORY_SNAPSHOT_MEMBER_NOT_DIRECTLY_VERIFIED", + "directory_tier": "HP_LISTED_CERTIFIED_PROVIDER", + "listing_provenance": "INDEXED_SEARCH_RESULT_2026-11-10; directory direct HTML is dynamic and does not expose member list in fetched text", + "linked_existing_registry_id": null, + "quote_status": "Z", + "available_api": "Z", + "authorized_access": "Z" + }, + { + "id": "HP2_13", + "name": "Procom Information Technology", + "type": "directory_member", + "official_source": "https://reinvent.hp.com/us-en-3dprint-amnetworkdirectory", + "observed_capability": "MJF service bureau listed by HP; exact requested process, material, region, certification and availability unverified", + "status": "Z_DIRECTORY_SNAPSHOT_MEMBER_NOT_DIRECTLY_VERIFIED", + "directory_tier": "HP_LISTED_CERTIFIED_PROVIDER", + "listing_provenance": "INDEXED_SEARCH_RESULT_2026-11-10; directory direct HTML is dynamic and does not expose member list in fetched text", + "linked_existing_registry_id": null, + "quote_status": "Z", + "available_api": "Z", + "authorized_access": "Z" + }, + { + "id": "HP2_14", + "name": "TECO Image Systems. Co., Ltd.", + "type": "directory_member", + "official_source": "https://reinvent.hp.com/us-en-3dprint-amnetworkdirectory", + "observed_capability": "MJF service bureau listed by HP; exact requested process, material, region, certification and availability unverified", + "status": "Z_DIRECTORY_SNAPSHOT_MEMBER_NOT_DIRECTLY_VERIFIED", + "directory_tier": "HP_LISTED_CERTIFIED_PROVIDER", + "listing_provenance": "INDEXED_SEARCH_RESULT_2026-11-10; directory direct HTML is dynamic and does not expose member list in fetched text", + "linked_existing_registry_id": null, + "quote_status": "Z", + "available_api": "Z", + "authorized_access": "Z" + }, + { + "id": "HP2_15", + "name": "There You Have It 3D", + "type": "directory_member", + "official_source": "https://reinvent.hp.com/us-en-3dprint-amnetworkdirectory", + "observed_capability": "MJF service bureau listed by HP; exact requested process, material, region, certification and availability unverified", + "status": "Z_DIRECTORY_SNAPSHOT_MEMBER_NOT_DIRECTLY_VERIFIED", + "directory_tier": "HP_LISTED_CERTIFIED_PROVIDER", + "listing_provenance": "INDEXED_SEARCH_RESULT_2026-11-10; directory direct HTML is dynamic and does not expose member list in fetched text", + "linked_existing_registry_id": null, + "quote_status": "Z", + "available_api": "Z", + "authorized_access": "Z" + }, + { + "id": "HP2_16", + "name": "Vexma Technologies Pvt Ltd", + "type": "directory_member", + "official_source": "https://reinvent.hp.com/us-en-3dprint-amnetworkdirectory", + "observed_capability": "MJF service bureau listed by HP; exact requested process, material, region, certification and availability unverified", + "status": "Z_DIRECTORY_SNAPSHOT_MEMBER_NOT_DIRECTLY_VERIFIED", + "directory_tier": "HP_LISTED_CERTIFIED_PROVIDER", + "listing_provenance": "INDEXED_SEARCH_RESULT_2026-11-10; directory direct HTML is dynamic and does not expose member list in fetched text", + "linked_existing_registry_id": null, + "quote_status": "Z", + "available_api": "Z", + "authorized_access": "Z" + }, + { + "id": "HP2_17", + "name": "X3d", + "type": "directory_member", + "official_source": "https://reinvent.hp.com/us-en-3dprint-amnetworkdirectory", + "observed_capability": "MJF service bureau listed by HP; exact requested process, material, region, certification and availability unverified", + "status": "Z_DIRECTORY_SNAPSHOT_MEMBER_NOT_DIRECTLY_VERIFIED", + "directory_tier": "HP_LISTED_CERTIFIED_PROVIDER", + "listing_provenance": "INDEXED_SEARCH_RESULT_2026-11-10; directory direct HTML is dynamic and does not expose member list in fetched text", + "linked_existing_registry_id": null, + "quote_status": "Z", + "available_api": "Z", + "authorized_access": "Z" + }, + { + "id": "X001", + "name": "Dassault 3DEXPERIENCE Make", + "type": "manufacturing_marketplace", + "official_source": "https://www.3ds.com/make/service/3d-printing-service/", + "observed_capability": "On-demand comparison of manufacturing service provider quotes, no live quote obtained", + "status": "T_PROVIDER_DESCRIPTION_ONLY", + "quote_status": "Z", + "available_api": "Z", + "authorized_access": "Z" + }, + { + "id": "X002", + "name": "Unionfab", + "type": "contract_manufacturer", + "official_source": "https://www.unionfab.com/services/3d-printing", + "observed_capability": "3D printing services across production processes; advertised online quotations", + "status": "T_PROVIDER_DESCRIPTION_ONLY", + "quote_status": "Z", + "available_api": "Z", + "authorized_access": "Z" + }, + { + "id": "X003", + "name": "MakeNow", + "type": "contract_manufacturer", + "official_source": "https://makenow.cc/", + "observed_capability": "Online quoting for FDM SLA SLS MJF CNC and metal; independently verify offering and fulfillment", + "status": "T_PROVIDER_DESCRIPTION_ONLY", + "quote_status": "Z", + "available_api": "Z", + "authorized_access": "Z" + } + ], + "updated": "2026-11-10", + "source_scope": { + "directly_researched_entrypoints": 39, + "hp_directory_indexed_members": 48, + "hp_directory_duplicate_aliases": 3, + "worldwide_completeness": "Z", + "hp_directory_source": "https://reinvent.hp.com/us-en-3dprint-amnetworkdirectory", + "hp_members_method": "indexed page snapshot (the live directory HTML renders its members dynamically)", + "buyer_RFQ_access": "NOT_GRANTED", + "commercial_quotations": "NONE" + } +} diff --git a/deal_rescue/server.py b/deal_rescue/server.py index cfa2c4c..9b046cc 100644 --- a/deal_rescue/server.py +++ b/deal_rescue/server.py @@ -10,6 +10,7 @@ import mimetypes from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer from pathlib import Path +from deal_rescue.industrial import core as industrial from urllib.parse import parse_qs, urlparse WEB = Path(__file__).parent / "web" @@ -57,6 +58,20 @@ def do_GET(self): if WEB.resolve() not in p.parents: return self.send(404, {"error": "not found"}) return self.send(200, p.read_bytes(), mimetypes.guess_type(str(p))[0] or "application/octet-stream") + if u.path == "/api/industrial/registry": + return self.send(200, industrial.source_registry()) + if u.path == "/api/industrial/cases": + return self.send(200, industrial.cases_index()) + if u.path == "/api/industrial/decision": + return self.send(200, industrial.run_case(q.get("case", "coalition"))) + if u.path == "/api/industrial/passport": + case = q.get("case", "coalition") + return self.send(200, industrial.run_case(case), "application/json", + {"Content-Disposition": 'attachment; filename="INDUSTRIAL_PASSPORT.json"'}) + if u.path == "/api/industrial/rfq": + case = q.get("case", "coalition") + return self.send(200, industrial.supplier_rfq(case).encode("utf-8"), "text/plain; charset=utf-8", + {"Content-Disposition": 'attachment; filename="RFQ_DRAFT_NOT_SENT.txt"'}) if u.path == "/api/runs": return self.send(200, [{"run_id": k, "evidence_mode": json.loads((d / "DEAL_DOSSIER.json").read_text())["evidence_mode"]} for k, (_, d) in RUNS.items()]) diff --git a/deal_rescue/web/index.html b/deal_rescue/web/index.html index 11c8ed6..f7ee4bf 100644 --- a/deal_rescue/web/index.html +++ b/deal_rescue/web/index.html @@ -356,5 +356,6 @@

Denied acts

${d.denied_actions.map((x) => ` diff --git a/deal_rescue/web/industrial.js b/deal_rescue/web/industrial.js new file mode 100644 index 0000000..1c3a236 --- /dev/null +++ b/deal_rescue/web/industrial.js @@ -0,0 +1,72 @@ +/* LEGION Industrial Sourcing embedded in the existing Deal Rescue page. + Read-only APIs, no credentials, no data export to providers, no payment action. */ +(() => { + 'use strict'; + const esc = s => String(s ?? '').replace(/[&<>"']/g, v => ({'&':'&','<':'<','>':'>','"':'"',"'":'''}[v])); + const fmt = c => c == null ? 'Unknown' : '$' + (c / 100).toLocaleString('en-US',{minimumFractionDigits:2,maximumFractionDigits:2}); + let panel, active = 'coalition'; + const GET = async path => { + const r = await fetch(path,{cache:'no-store'}); + if (!r.ok) throw new Error(`Request failed: HTTP ${r.status}`); + return r.json(); + }; + function mount() { + if (document.getElementById('legion-industrial-button')) return; + const nav = document.querySelector('header') || document.body; + const btn = document.createElement('button'); + btn.id='legion-industrial-button'; btn.textContent='Industrial Sourcing'; + btn.setAttribute('aria-label','Open industrial sourcing and coalition discovery'); + btn.style.cssText='background:#1749be;color:white;border:0;border-radius:8px;padding:9px 14px;cursor:pointer;font-weight:650'; + nav.appendChild(btn); btn.onclick = () => open(); + panel = document.createElement('section'); panel.id = 'legion-industrial-panel'; + panel.setAttribute('role','dialog'); panel.setAttribute('aria-modal','true'); + panel.setAttribute('aria-label','Industrial sourcing'); + panel.style.cssText='display:none;position:fixed;inset:3vh 3vw;background:#f6f7fa;z-index:9999;overflow:auto;padding:24px;box-shadow:0 12px 90px #17255466;border-radius:16px;color:#14181f;font:14px/1.5 system-ui'; + document.body.appendChild(panel); + } + async function open() { + mount(); panel.style.display='block'; + panel.innerHTML='

Loading industrial sourcing...

'; + try { + const [cases,registry,decision] = await Promise.all([ + GET('/api/industrial/cases'),GET('/api/industrial/registry'),GET('/api/industrial/decision?case='+encodeURIComponent(active))]); + render(cases,registry,decision); + } catch (e) { + panel.textContent = 'Sourcing evidence unavailable: ' + e.message; + const b=document.createElement('button');b.textContent='Close';b.onclick=close;panel.appendChild(b); + } + } + function close() { if(panel) panel.style.display='none'; } + function render(cases,registry,d) { + const route=d.route_decision, group=d.demand.group, statuses=d.gates; + const row = Object.entries(statuses).map(([k,v])=>``).join(''); + const offers=(route.alternatives||[]).map(a=>``).join(''); + const sources=registry.records.map(s=>``).join(''); + panel.innerHTML=` +
+

LEGION · Industrial Sourcing

Engineering constraints → buyer discovery → supplier alternatives → federation proposal.

+
+

Test-only demonstration. No verified real customer demand, supplier quotation, ZTL engineering proof, manufacturing commitment or new PayPal capture. Existing historical PayPal evidence remains separate.

+
+ + Download evidence passport + Download draft supplier RFQ
+
+
Buyer demand

${group.member_count||0} prospects · ${group.units||0} units

Same specification hash & version required. Permissioned inputs only.

+
Production discovery

${registry.total} source entrypoints

Providers, networks, directories and RFQ sources. Not 36 onboarded suppliers.

+
Best route within fixture

${esc((route.route||'HOLD').replaceAll('_',' '))}

${fmt(route.landed_cents)} · illustrative, not a binding quote.

+
+
+

Commercial alternatives

${esc(k.replaceAll('_',' '))}${esc(v)}
${esc(a.route.replaceAll('_',' '))}${fmt(a.landed_cents)}${a.route===route.route?'Lowest illustrative route':'Compared'}
${esc(s.name)}${esc(s.kind.replaceAll('_',' '))}Official site${esc(s.quote_verdict)}
${offers}
RouteAll-in syntheticDecision

Budget, MOQ, capacity, due date and exact spec are enforced before route selection.

+

Trust / engineering / authority

${row}
ObligationT/F/Z

Federation: ${esc(d.federation_proposal.reliance)}. PayPal: 0 captures for this new contract.

+ +

Industrial supplier discovery (${registry.total} entrypoints)

+

Only public, source-linked discovery. No claimed stock, manufacturing capacity, quotation or API permission.

+
${sources}
Company / networkClassSourceQuote
+

Evidence passport SHA-256: ${esc(d.passport_sha256)}. No external effects. Scope: ${esc(d.test_scope)}.

`; + panel.querySelector('#li-close').onclick=close; + panel.querySelector('#li-case').onchange=e=>{active=e.target.value;open()}; + } + if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',mount);else mount(); + document.addEventListener('keydown',e=>{if(e.key==='Escape')close()}); +})(); diff --git a/docs/INDUSTRIAL_SOURCING.md b/docs/INDUSTRIAL_SOURCING.md new file mode 100644 index 0000000..ec09f94 --- /dev/null +++ b/docs/INDUSTRIAL_SOURCING.md @@ -0,0 +1,36 @@ +# Industrial sourcing and coalition discovery + +This page documents a **read-only research and candidate-formation component** integrated into the existing Deal Rescue merchant app. It does not create orders, charge PayPal, contact potential buyers, or admit a contract to LEGION Federation. + +Open Deal Rescue normally. Click **Industrial Sourcing** in the header. Three fixture scenarios are available: + +- **Coalition**: five separate synthetic, explicitly opted-in procurement enquiries for the same illustrative SLS/PA12 bracket, revision C, 20 units each. With fixture-only all-in pricing, the coalition is $2,300 versus direct $3,850, split $3,400 and single additive manufacturing $4,100. This is **not a live supplier quotation**. +- **Direct**: change only the fixture direct route to $2,000; system must choose direct procurement instead of inventing a rescue. +- **Mismatch**: buyer five has a different revision; it cannot be pooled with the other four. A 100-unit MOQ quotation fails for the remaining 80 units. + +The supplier registry combines 36 researched marketplace/factory/directory entrypoints, an indexed 48-member HP Additive Manufacturing Network snapshot (3 names overlap), and 3 new primary company sources. **87 records; 84 net of observed aliases.** This is neither all 3D printing manufacturers worldwide nor evidence any record will accept a specific order. Indexed HP directory members are not individually authenticated by LEGION. The HP page renders its directory dynamically, so the indexed snapshot is not a complete independently fetched census. + +**Evidence boundaries** + +- Buyer prospects: opt-in evidence required for actual outreach, not assumed from a public marketplace listing. Synthetic fixtures are never real buyer consent. +- Technical scope: identical spec digest, revision, process and material are necessary for grouping, but not sufficient to prove manufacture or mechanical performance. CAD/DFM is separate. +- ZTL Engineering: `verify_ztl_binding()` is the pinned independent-verifier contract. Without an authenticated ZTL Engineering endpoint and an externally verified proof receipt for a supported engineering model, verdict is **Z**. An unsupported arbitrary STEP/STL geometry cannot be declared Lean-proved. +- Supplier discovery: companies listed in directories are not approved suppliers. Pricing, process capacity, actual stock, authentic firm quotations, delivery and warranty remain **Z** until independently verified. +- Federation: existing runtime remains unchanged. New records are **proposals only**, not authorized commitments. +- PayPal: the separately evidenced five historical Sandbox captures remain in their original contract; this integration records **0 new captures**. + +**Read-only API** + +`GET /api/industrial/registry` — source-linked discovery entries and uncertainty. + +`GET /api/industrial/cases` — test-only cases. + +`GET /api/industrial/decision?case=coalition|direct|mismatch` — decision, gate status, sourcing candidates. + +`GET /api/industrial/passport?case=...` — download proposal and T/F/Z passport. + +`GET /api/industrial/rfq?case=...` — download a non-binding unsent RFQ without buyer identifiers or private CAD. + +No corresponding POST handler is added. + +**Next integration gate**: independent ZTL Engineering proof receipt for a supported engineering formula; one genuine buyer-authorized demand; supplier-confirmed landed quotation; independently authenticated multi-owner consent; matching Federation admission; only then a new, separately authorized PayPal Sandbox payment and independent provider readback. diff --git a/tests/test_industrial.py b/tests/test_industrial.py new file mode 100644 index 0000000..fc7328a --- /dev/null +++ b/tests/test_industrial.py @@ -0,0 +1,163 @@ +"""Industrial sourcing controls, data provenance and cross-contract safety.""" +import copy +import importlib.util +import json +import tempfile +import unittest +from pathlib import Path + +from deal_rescue.industrial import core + +CASES=core.read_json('cases.json') + +class Registry(unittest.TestCase): + def test_87_discovery_entries_not_quoted(self): + r=core.source_registry() + self.assertEqual(r['total'],87) + self.assertTrue(all(x['quote_verdict']=='Z' for x in r['records'])) + self.assertTrue(all(x['supplier_commitment_verdict']=='Z' for x in r['records'])) + self.assertEqual(len(set(x['id'] for x in r['records'])),87) + self.assertEqual(len([x for x in r['records'] if x['kind'] in ('contract_manufacturer','manufacturing_network','manufacturing_marketplace')]),30) + def test_hp_48_member_index_exact_and_no_double_claim(self): + r=core.source_registry(); hp=[x for x in r['records'] if x['id'].startswith('HP')] + self.assertEqual(len(hp),48) + self.assertTrue(all(x['quote_verdict']=='Z' for x in hp)) + self.assertEqual(len([v for v in core.read_json('sources.json')['records'] if v.get('linked_existing_registry_id')]),3) + def test_no_filename_traversal(self): + for n in ('../cases.json','x/y.json','..\\.json','cases.txt'): + with self.subTest(n=n),self.assertRaises(ValueError):core.read_json(n) + def test_shortlist_unknown_capability(self): + rows=core.shortlist_sources('SLS') + self.assertGreaterEqual(len(rows),12) + self.assertTrue(all(x['exact_process_capability']=='Z' for x in rows)) + +class Demand(unittest.TestCase): + def setUp(self):self.d=copy.deepcopy(CASES['coalition']['demands'][0]) + def test_demo_opt_in_is_not_live_authority(self): + self.assertEqual(core.valid_demand(self.d,demonstration=False)['verdict'],'Z') + self.assertEqual(core.valid_demand(self.d,demonstration=True)['verdict'],'T') + def test_missing_fields_hold(self): + for field in ('buyer_id','spec_digest','qty','budget_cents','consent_scope','due_date'): + d=dict(self.d);d.pop(field) + with self.subTest(field=field):self.assertEqual(core.valid_demand(d,demonstration=True)['verdict'],'Z') + def test_invalid_qty_budget_fails(self): + for k,v in [('qty',0),('qty',-1),('qty',1.0),('budget_cents',-1),('budget_cents',False)]: + d=dict(self.d);d[k]=v + with self.subTest(k=k,v=v):self.assertEqual(core.valid_demand(d,demonstration=True)['verdict'],'F') + def test_revocation_and_consent_scope(self): + for k,v in [('revoked',True),('consent_scope','marketing'),('consent_scope',''),('consent_scope','no')]: + d=dict(self.d);d[k]=v + with self.subTest(k=k):self.assertEqual(core.valid_demand(d,demonstration=True)['verdict'],'F' if v else 'Z') + def test_real_unverified_optin_unknown(self): + d=dict(self.d,source_scope='CRM',source_ref='crm/197',consent_receipt='signed_by_me') + self.assertEqual(core.valid_demand(d,demonstration=False)['verdict'],'Z') + def test_self_attested_real_optin_does_not_pass(self): + d=dict(self.d,source_scope='CRM',source_ref='crm/197',consent_receipt='abc',consent_authentication='EXTERNALLY_VERIFIED') + self.assertEqual(core.valid_demand(d,demonstration=False)['verdict'],'Z') + def test_duplicate_buyer_is_denied(self): + d=copy.deepcopy(self.d); d['id']='other' + r=core.group_demand([self.d,d],demonstration=True) + self.assertEqual(len(r['excluded']),1) + self.assertEqual(r['excluded'][0]['verdict'],'F') + def test_spec_revision_prevents_superficial_merge(self): + g=core.group_demand(CASES['mismatch']['demands'],demonstration=True)['groups'] + self.assertEqual(sorted(x['units'] for x in g),[20,80]) + def test_material_process_or_hash_prevents_merge(self): + for k,v in [('material','ABS'),('process','MJF'),('spec_digest','0'*64)]: + d=copy.deepcopy(self.d);d['id']='another';d['buyer_id']='another';d[k]=v + g=core.group_demand([self.d,d],demonstration=True)['groups'] + with self.subTest(k=k):self.assertEqual(len(g),2) + +class Quotations(unittest.TestCase): + def setUp(self): + self.g=core.group_demand(CASES['coalition']['demands'],demonstration=True)['groups'][0] + self.q=copy.deepcopy(CASES['coalition']['offers'][-1]) + def test_fixture_only_not_actual_supplier_quote(self): + self.assertEqual(core.evaluate_quote(self.q,self.g,demonstration=True)['verdict'],'T') + self.assertEqual(core.evaluate_quote(self.q,self.g,demonstration=False)['verdict'],'Z') + def test_missing_quote_fields_do_not_pass(self): + for key in ('route','spec_digest','material','due_date','landed_cents','moq_units','capacity_units'): + q=dict(self.q);q.pop(key) + with self.subTest(key=key):self.assertEqual(core.evaluate_quote(q,self.g,demonstration=True)['verdict'],'Z') + def test_wrong_revision_digest_material_rejected(self): + for key,value in [('spec_digest','f'*64),('spec_revision','REV-X'),('material','ABS'),('process','FDM')]: + q=dict(self.q);q[key]=value + with self.subTest(key=key):self.assertEqual(core.evaluate_quote(q,self.g,demonstration=True)['verdict'],'F') + def test_capacity_and_moq_negative(self): + for key,value in [('capacity_units',99),('moq_units',101),('landed_cents',-1),('landed_cents',1.0)]: + q=dict(self.q);q[key]=value + with self.subTest(key=key):self.assertEqual(core.evaluate_quote(q,self.g,demonstration=True)['verdict'],'F') + def test_due_date_critical(self): + q=dict(self.q,due_date='2027-01-01') + self.assertEqual(core.evaluate_quote(q,self.g,demonstration=True)['verdict'],'F') + def test_quotes_research_only_when_unconfirmed(self): + q=dict(self.q,source_scope='ALIBABA_PUBLIC_LISTING',landed_cents=1) + self.assertEqual(core.evaluate_quote(q,self.g,demonstration=False)['verdict'],'Z') + def test_self_attested_supplier_quote_does_not_pass(self): + q=dict(self.q,source_scope='REAL_SUPPLIER',signed_quote_digest='hash',signature_validated_externally=True, + merchant_identity_verified=True,quote_not_expired=True) + self.assertEqual(core.evaluate_quote(q,self.g,demonstration=False)['verdict'],'Z') + def test_nonbinding_budget_blocks(self): + g=copy.deepcopy(self.g);g['demands'][0]['budget_cents']=0 + decision=core.choose_route(g,CASES['coalition']['offers'],demonstration=True) + self.assertIsNone(decision['route']) + +class Proofs(unittest.TestCase): + def setUp(self):self.req={'model':'resistor','range':[1,2]} + def test_no_ztl_receipt_is_Z(self): + self.assertEqual(core.verify_ztl_binding(self.req)['verdict'],'Z') + def test_claimed_proof_without_independent_verifier_is_Z(self): + r={'request_sha256':core.digest(self.req),'verdict':'T','theorem_id':'fake'} + self.assertEqual(core.verify_ztl_binding(self.req,r)['verdict'],'Z') + def test_forged_request_digest_F(self): + r={'request_sha256':'f'*64,'model_id':'resistor','theorem_id':'demo','engine_pin':'x','epoch':'1','verifier_pin':'p'} + self.assertEqual(core.verify_ztl_binding(self.req,r,lambda a,b:True,expected_verifier_pin='p')['verdict'],'F') + def test_wrong_verifier_pin_F(self): + r={'request_sha256':core.digest(self.req),'model_id':'resistor','theorem_id':'demo','engine_pin':'x','epoch':'1','verifier_pin':'wrong'} + self.assertEqual(core.verify_ztl_binding(self.req,r,lambda a,b:True,expected_verifier_pin='p')['verdict'],'F') + def test_external_rejection_cannot_be_faked(self): + r={'request_sha256':core.digest(self.req),'model_id':'resistor','theorem_id':'demo','engine_pin':'x','epoch':'1','verifier_pin':'p'} + self.assertEqual(core.verify_ztl_binding(self.req,r,lambda a,b:False,expected_verifier_pin='p')['verdict'],'F') + self.assertEqual(core.verify_ztl_binding(self.req,r,lambda a,b:None,expected_verifier_pin='p')['verdict'],'Z') + def test_stubbed_positive_isolated_contract_only(self): + r={'request_sha256':core.digest(self.req),'model_id':'resistor','theorem_id':'demo','engine_pin':'x','epoch':'1','verifier_pin':'TEST_VERIFIER_PIN'} + v=core.verify_ztl_binding(self.req,r,lambda a,b:True,expected_verifier_pin='TEST_VERIFIER_PIN') + self.assertEqual(v['verdict'],'T') # a stub; never present as an actual ZTL result + +class EndToEnd(unittest.TestCase): + def test_coalition_route_numerical_on_demo_fixture(self): + r=core.run_case('coalition') + self.assertEqual(r['route_decision']['route'],'COALITION') + self.assertEqual(r['route_decision']['landed_cents'],230000) + self.assertEqual(sum(x['allocated_cents'] for x in r['route_decision']['allocation']),230000) + self.assertEqual(r['demand']['group']['member_count'],5) + self.assertEqual(r['demand']['group']['units'],100) + self.assertEqual(r['outcome'],'SYNTHETIC_ROUTE_CHOSEN_NOT_ADMITTED') + def test_direct_route_must_win_when_cheaper(self): + self.assertEqual(core.run_case('direct')['route_decision']['route'],'DIRECT') + def test_changed_revision_no_false_coalition(self): + r=core.run_case('mismatch') + self.assertEqual(r['demand']['group']['units'],80) + self.assertIsNone(r['route_decision']['route']) + def test_no_z_to_t_and_no_payment_transfer(self): + for c in ('coalition','direct','mismatch'): + r=core.run_case(c) + with self.subTest(c=c): + self.assertEqual(r['gates']['ztl_engineering'],'Z') + self.assertEqual(r['gates']['paypal_authority'],'Z') + self.assertEqual(r['gates']['federation_admission'],'Z') + self.assertEqual(r['federation_proposal']['external_effects'],0) + self.assertEqual(r['federation_proposal']['paypal_captures_on_this_new_contract'],0) + self.assertEqual(r['federation_proposal']['reliance'],'NOT_ADMITTED_TO_EXISTING_FEDERATION') + def test_rfq_excludes_private_buyer_identity_or_cad(self): + r=core.supplier_rfq('coalition') + self.assertIn('NOT SENT',r) + for b in CASES['coalition']['demands']: + self.assertNotIn(b['buyer_id'],r) + self.assertNotIn('PAYPAL',r) + def test_passport_deterministic(self): + self.assertEqual(core.run_case('coalition')['passport_sha256'],core.run_case('coalition')['passport_sha256']) + def test_missing_case_rejected(self): + with self.assertRaises(ValueError):core.run_case('../secrets') + +if __name__=='__main__':unittest.main()