Skip to content

Fix PROGRESS.md to show all blockers including cross-repo deps - #11

Merged
atc964 merged 1 commit into
mainfrom
fix/progress-blockers
Mar 9, 2026
Merged

Fix PROGRESS.md to show all blockers including cross-repo deps#11
atc964 merged 1 commit into
mainfrom
fix/progress-blockers

Conversation

@atc964

@atc964 atc964 commented Mar 9, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Update generate_progress.py to show cross-repo blockers (seller beads blocking buyer work)
  • Add missing dependency: buyer-8ih (Multi-Seller Orchestration) → buyer-hu7 (Deals API Client)
  • Sync JSONL with 6 closed Phase 1 beads

Before: 0% progress, no blockers shown, Phase 1 beads not marked complete
After: 26% progress, 9 blocked items visible with specific blocker IDs, Phase 1 checked off

🤖 Generated with Claude Code

- Add cross-repo blocker support to generate_progress.py
  (seller-a3k, seller-dcd, seller-awh blocked buyer beads)
- Add buyer-8ih → buyer-hu7 dependency
- Sync JSONL with closed Phase 1 beads
- Fix dead hook symlinks (ad_ranch → agent_range)

bead: buyer-69a

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@atc964
atc964 merged commit 067ad2e into main Mar 9, 2026
@atc964
atc964 deleted the fix/progress-blockers branch March 9, 2026 20:23
aleksUIX pushed a commit to aleksUIX/buyer-agent that referenced this pull request Jul 26, 2026
…ave A)

Wire negotiation into the buyer's real booking path. When a seller's
quote exceeds the buyer's max_cpm ceiling but sits within a configurable
negotiation band (default ceiling x 1.25, mirroring the reference SDK's
negotiation_band_per_mille=1250), the MultiSellerOrchestrator now
attempts a deterministic negotiation via the seller's negotiation
surface before discarding the quote -- closing the run IABTechLab#11 gap where a
$15 quote against a $12 ceiling (floor $10) was walked away from
(AVAILS_GAP_STORY 7.4).

Deterministic policy (no LLM in the negotiation decision):
- open a proposal-led negotiation at the buyer's target CPM, clamped to
  never exceed the ceiling (the seller's canonical
  POST /api/v1/negotiations/messages surface rejects quote-led opens, so
  the buyer submits POST /proposals first; its counter_terms are round 1),
- hold the standing offer while evaluating seller counters, accept the
  FIRST seller price <= ceiling, walk after negotiation_max_rounds
  (default 3) seller responses, on a terminal reject, or when the
  seller's final offer stays above the ceiling,
- on agreement at P, re-request a quote with target_cpm=P (the seller's
  quote engine honors an acceptable target as final_cpm) and book the
  FRESH quote -- the only contract-clean way to book a negotiated price;
  the fresh quote is verified <= ceiling before entering the ranked
  list, and the budget/spend-ceiling gates stay the final arbiter.

Money invariants: the buyer never offers, accepts, nor books above
max_cpm -- even if the post-negotiation re-quote comes back high.

Config-gated via Settings (default ON): NEGOTIATION_ENABLED,
NEGOTIATION_BAND, NEGOTIATION_MAX_ROUNDS; NegotiationConfig(band=1.0)
or enabled=False restores the strict legacy filter. Negotiation emits
NEGOTIATION_STARTED / NEGOTIATION_ROUND / NEGOTIATION_CONCLUDED in the
orchestrator's existing event idiom and surfaces per-attempt records on
OrchestrationResult.negotiations.

Adds NegotiationClient.submit_proposal (buyer adapted to the seller's
proposal-led contract). Seller-side contract gaps found (noted, not
changed here): quote-led negotiation unsupported (400); proposals are
never persisted server-side, so POST /api/v1/negotiations/messages 404s
on any fresh negotiation (the buyer walks honestly); book_deal strikes
the stored quote price and ignores negotiation state (hence the
re-quote-at-agreed-price step).

Tests: 16 new in tests/unit/test_orchestrator_negotiation.py (negotiate
then book, single-round proposal accept, honest walks, band/config
gates, round bound, money invariants, events). Full suite 3319 -> 3335
passed, 0 failed, 78 skipped; ruff clean.

bead: ar-cc3n

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KuoSai9uDgCEkbqYmxQpQ6
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant