Auction Monitoring System (AMP-extended) — Multi-Asset, Multi-Platform¶
Maintained by: chat-MC1 with corrections from Brandon
Summary¶
Comprehensive auction-monitoring system: continuously scan external auction platforms + marketplaces for any asset that has a place in the truck lifecycle — whole salvage trucks (rebuild pipeline), parts donor trucks (CTP recovery), used water tanks (component inventory), specialty pumps (per-product-line builds), and equipment for adjacent operations (DET trailers when active). Each asset class has its own buy-box, its own evaluation criteria, and its own destination in the value chain.
The substrate is in place (AMP routes import from amp_harness_shim; substrate v1.0 LIVE 5/23). What's missing is continuous discovery across asset classes and platforms plus a decision review surface for Brandon.
No live bids in any phase pre-ratification. Q021 + bedrock-#1 + Brandon explicit per-bid authorization gates remain in force throughout Phase 1-3. Phase 4 (live bidding) requires separate Brandon ratification per asset class.
Asset class taxonomy¶
The system monitors 5+ distinct asset classes, each with its own buy-box and destination:
| Asset class | Destination | Economic logic | Per-unit value |
|---|---|---|---|
| Whole salvage trucks (chassis for rebuild) | AMP → SEQ build pipeline | Rebuild into water truck; $40-90K retail | $15-25K acquisition |
| Parts donor trucks (not viable for rebuild) | CTP directly (part-out) | Recover parts value from non-rebuildable chassis | $5-15K acquisition; $15-30K parts recovery |
| Used 2,000 gal water tanks | SEQ component inventory | Save vs new ($7.5-9.5K); margin upside on builds | $1-3K acquisition target |
| Used 4,000 gal water tanks | SEQ component inventory | Save vs new ($7.5-9.5K); higher demand | $1-3K acquisition target |
| Specialty pumps (Hale electronic, Genkins GK420E, PTO pumps) | SEQ component inventory per product line | Per-product-line specific (Tactical Fire, Horse Corral, Wildland) | $500-3K depending on type |
| Other specialty components | SEQ inventory per spec need | Cab-forward chassis, body parts, specific accessories | varies |
| DET trailers / transport equipment | DET when activated | Future activation per desert-equipment-transport.md |
deferred |
Economic note: the used-tank pipeline alone is potentially worth $40-64K/month in margin upside ($5-8K/build × 8 builds/month, assuming consistent used-tank availability). Worth aggressive sourcing once platform coverage is in place.
Platform coverage matrix¶
| Platform | Whole trucks | Parts trucks | Tanks | Pumps | Notes |
|---|---|---|---|---|---|
| Copart | ✓ Phase 1 | ✓ Phase 2 | rare | rare | Salvage; primary truck source |
| IronPlanet | ✓ Phase 2 | ✓ Phase 2 | ✓ Phase 2 | ✓ Phase 2 | Heavy equipment; tank-rich |
| Ritchie Bros | ✓ Phase 3 | ✓ Phase 3 | ✓ Phase 3 | ✓ Phase 3 | Scheduled auctions; cross-border hypothesis |
| Facebook Marketplace | ✓ Phase 2 | ✓ Phase 2 | ✓ Phase 2 | ✓ Phase 2 | Local; bilingual common; messy data |
| eBay Motors | Phase 3+ | Phase 3+ | Phase 3+ | Phase 3+ | Commercial vehicle category |
| GovDeals / Public Surplus | Phase 3+ | Phase 3+ | Phase 3+ | Phase 3+ | Municipal surplus; fire-department trade-ins |
| AuctionsPlus | Phase 3+ | Phase 3+ | Phase 3+ | Phase 3+ | Heavy equipment |
Per-platform integration follows the SourceAdapter protocol (Phase 1 deliverable). Each adapter implements discover_lots(asset_class, buybox) -> list[LotStub] + enrich_lot(url) -> dict.
Routing logic — asset → consumer¶
Every discovered asset gets routed to its appropriate downstream consumer:
Whole salvage truck → AMP evaluate_fit → build pipeline (if fit=fit)
→ part-out path (if fit=marginal/no_fit)
Parts donor truck → CTP part-out queue (directly)
Used water tank → SEQ component inventory queue
Specialty pump → SEQ component inventory per product line
DET trailer/equip → DET queue (held until activation)
Other components → SEQ inventory with spec-need tag
Cross-asset opportunities: if AMP finds a whole truck that's borderline (marginal fit), the parts-trucks pipeline becomes the destination automatically — same lot, different ROI calculation. CTP escape-valve logic from cactus-truck-parts.md extends here.
What's already built¶
| Component | Path | State |
|---|---|---|
| AMP package | D:\Projects\auction-manager-pro |
LIVE, 132/132 tests pass |
| Substrate adoption | routes/lots.py:33 imports from amp_harness_shim |
Done 5/23 |
| Copart lot enricher | chrome_enricher.py |
Read-only via Brandon's logged-in Chrome session |
| Lot ingest | lifecycle.ingest_lot() + POST /lots |
Working; manual entry today |
| Buy-box specs | BuyBox dataclass in fit.py |
Generic 2K + 4K + Horse Corral 1500 wired |
| Fit evaluator | fit.evaluate_fit() |
Working |
| Pricing pipeline | pricing.estimate_*() |
Working: retail / repair / transport / build cost |
| Bid path | lifecycle.place_or_escalate_bid() via amp_harness_shim |
HOLD_FOR_REVIEW by default; passes bedrock-#3 + Q021 |
| Decisions endpoint | GET /decisions/pending |
Returns pending bid recommendations |
| Static-scan Q021 gate | tests/test_q021_live_bid_gate.py |
Refuses place_bid / submit_bid etc. in src/ |
What's missing (the integration work)¶
- Continuous listing discovery. Today
ingest_lotis manual — someone POSTs a Copart URL + AMP enriches. Need a polling loop that scans Copart search results matching buy-box criteria + ingests new lots automatically. - Multi-platform. Only Copart wired. Need IronPlanet, Auction.com (mentioned in canonical), Ritchie Bros (per RB VP visit hypothesis).
- Decision review surface.
/decisions/pendingreturns JSON; Brandon needs a dashboard view to approve/reject/comment. - Pre-bid photo analysis. Canonical doc flags "Auction photos systematically stage damage minimization" as planned-not-built. Run lot photos through Claude vision to flag damage minimization patterns BEFORE bid recommendation.
- Per-product-line profit floors. Q021 set $47K floor (from generic-commercial math). Horse Corral max margin is $25K — would render horse-corral invisible to autonomous sourcing. Need per-product-line floors before broad bid recommendation goes live.
Phasing (revised per scope expansion 2026-05-25)¶
Phase 1 — Copart continuous discovery + decision review surface + per-asset-class data model (this week, 3-5 days)¶
SE-App:
- Extend chrome_enricher.py to scrape Copart search results pages (currently only fetches lot-detail pages by URL). Brandon's logged-in Chrome session is the source.
- Build a polling loop: every 15-30 min, query Copart for new lots matching buy-box geography + truck class + price range
- For each new lot: ingest_lot → evaluate_lot → write to amp_decisions table (HOLD path; no bid placement)
- Run as nssm service: extend existing claude-amp (port 8810) to include the polling loop OR new service claude-amp-discovery
WDM:
- Dashboard view at copperstatetruckparts.com/amp/ (or similar) showing pending decisions: lot photo + key specs + AMP's recommendation + cost-in + projected margin
- "Approve" / "Reject" / "Hold for me to review" buttons
- "Approve" doesn't trigger live bid; queues for Phase 4 explicit authorization
IT: - Confirm Brandon's Copart account credentials accessible via Chrome session (existing pattern) - No new account work for Phase 1
SE-Infra: - Per-platform rate limit predicate (don't slam Copart with too many requests/min) - Already-in-place harness gates fire on every ingest → audit log surfaces every lot evaluated
Phase 2 — IronPlanet + Ritchie Bros + FB Marketplace, all asset classes (2-5 weeks)¶
This is the big expansion. Add three platforms and full asset-class coverage simultaneously since the per-asset evaluator + SourceAdapter abstraction from Phase 1 makes per-platform-per-asset combinations cheap.
SE-App:
- IronPlanet adapter — heavy equipment platform; tank-rich; commercial truck inventory. Same chrome-enricher pattern; Brandon's logged-in IronPlanet session.
- Ritchie Bros adapter — scheduled auctions; cross-border conduit hypothesis per ctp-mx-ritchie-bros.md. Different polling cadence (scheduled events vs continuous listings).
- Facebook Marketplace adapter — local; bilingual common; messy data. Per-asset-class search queries. Chrome-attached to Brandon's logged-in FB session. Geographic filtering critical (only lots within reasonable transport distance, e.g., <500 mi from Phoenix).
- Per-asset-class evaluators — extend fit.evaluate_fit to handle tanks, pumps, parts-trucks (each gets its own evaluator function with class-specific criteria; not just truck-style buy-box).
- Cross-asset routing — a discovered lot gets routed to its asset class first; whole-trucks get marginal-fit fallback to parts-truck destination.
IT: - IronPlanet account credentials if Brandon doesn't have one already - Ritchie Bros account if applicable - FB Marketplace uses Brandon's personal FB session (existing Chrome integration)
chat-MC1 (strategic):
- Ratify per-asset-class buy-box specs as Brandon clarifies them (probably iterative via the suggest-correction workflow on /strategy/amp-integrations.html)
- Per-platform polling cadence (Copart frequent, IronPlanet daily, Ritchie Bros event-driven, FB Marketplace 2-3×/day)
Phase 3 — eBay Motors + GovDeals + Public Surplus + pre-bid photo analysis (4-8 weeks)¶
SE-App: - eBay Motors adapter (commercial vehicle category) - GovDeals + Public Surplus (municipal surplus; fire-department trade-ins; potentially great Wildland-Mop-Up sources) - Pre-bid photo analysis using Claude vision: detect damage-minimization patterns (cropping, lighting, angle bias) and flag elevated-risk lots before they reach Brandon
chat-MC1 / Brandon: - Per-product-line profit floors (Horse Corral, Tactical Fire, Wildland Mop-Up) — ratify before any product-line-specific bidding goes live - Per-asset-class profit floors (tanks, pumps need different floors than whole trucks)
Phase 4 — Live bidding (gated; LATER)¶
Requires separate Brandon ratification. Sequence: - Brandon approves a specific bid via dashboard (per-bid authorization) - AMP places via platform API or browser automation - HOLD_FOR_REVIEW fires + Q021 banned-name scan + bedrock-#1 daily monetary cap predicate - Audit log captures full chain: lot ingested → fit evaluated → recommendation produced → Brandon authorized → bid placed → outcome recorded
Bedrock alignment¶
- #1 (Aggregate harm cap): every bid declares
monetary_impact_cents; daily-cap predicate fires at $45K aggregate per the conservative-fallback math inamp-harness-shim. Phase 1-3 has $0 monetary impact (no bids placed). - #2 (No harm to customers): AMP doesn't interact with customers; this principle is N/A here.
- #3 (Reversibility): Phase 1-3 actions are all reversible (ingest, evaluate, recommend). Phase 4 places bids — irreversible at moment of placement. HOLD_FOR_REVIEW is the structural protection.
- #4 (Truthfulness): AMP recommendations include uncertainty signals (price confidence, damage assessment confidence). No false-confidence projections.
- #5 (Scope): AMP stays in auction-sourcing lane. Doesn't email customers, doesn't decide product strategy.
- #6 (Source preservation): Original auction listing data preserved verbatim alongside AMP enrichment. Brandon can always see what the platform showed vs what AMP interpreted.
- #7 (Continuity): All decisions logged to
amp_decisions+ audit log; restart-safe.
Open questions (chat-MC1 strategic ratification)¶
- Per-product-line profit floors. Q021 = $47K (generic-commercial). Horse Corral max margin = $25K. Need per-product-line floors before Horse Corral lots are recommendable. Brandon ratifies via Q021 amendment.
- Polling cadence per platform. Copart updates throughout the day; IronPlanet has slower turnover; Ritchie Bros has scheduled auctions. Per-platform schedules tunable; chat-MC1 + SE-App propose, Brandon ratifies.
- Geographic filter. Phoenix-area lots get transport cost advantage. DET activation (currently dormant per desert-equipment-transport.md) changes the geography math. Today: filter to <500 mi from Phoenix; revisit at DET activation.
- Live-bidding go criteria. What conditions trigger Phase 4? My recommendation: Phase 1-3 running clean for 4 weeks + 100+ HOLD_FOR_REVIEW decisions reviewed by Brandon + per-product-line profit floors ratified.
What you'll see on dashboards as this lands¶
/substrate/— audit log volume grows substantially (every Copart poll = 1+ audit rows for each lot evaluated)/amp/(Phase 1 deliverable) — pending decisions queue, per-lot detail view, approve/reject UI- Brandon's email/MM — alerts when high-confidence lots match buy-box (notification threshold configurable)
/strategy/— this doc gets corrections via annotation as Brandon iterates buy-box specs
Strategic context¶
- Feeds atg-operations.md sourcing pipeline (the entry-point of the 13-stage truck lifecycle)
- Bad-buy escape valve via cactus-truck-parts.md when AMP recommendations don't pan out post-acquisition
- Transport cost reduction depends on desert-equipment-transport.md activation
- Cross-border parts hypothesis via ctp-mx-ritchie-bros.md (RB integration enables this)
- Substrate-gated end-to-end per ai-organization.md
Brandon's corrections¶
- [pending]
Version history¶
- v0.1 (2026-05-25): Initial scoping per Brandon's "start the auction integrations functionality" directive; MC1-Code authored as Tier 4 cross-arm initiative