Problem / Context
Erli "borrows" Allegro's category/attribute taxonomy by design (ADR-023 §40/§83, ADR-025, #1045) — ErliOfferManagerAdapter declares TaxonomyBorrower.getBorrowedTaxonomy() → 'allegro' but implements neither CategoryBrowser nor CategoryParametersReader. Today the Erli single-offer wizard (apps/web/src/features/listings/components/erli/erli-create-offer-wizard.tsx) only has a plain-text "Category ID" field and no parameters step — unlike AllegroCreateOfferWizard.tsx, which lets the operator browse a category tree and fill required parameters (e.g. "Stan"/condition).
Diagnosis confirmed Allegro's /sale/categories and /sale/categories/{id}/parameters are public catalog endpoints reachable via grant_type=client_credentials (app-level auth, no seller/user OAuth context) — so this can be solved without requiring every Erli operator to own and connect a real Allegro seller account.
Proposed Solution
See the full implementation plan and architecture decision:
Three sequential sub-tasks, merged onto one integration branch, with a single final PR (full functionality) opened to main for review:
Classification
Type: Integration (Erli) + Interface (FE wizard)
Layer: Application / Infrastructure (backend), Interface (frontend)
File(s): libs/integrations/erli/**, apps/web/src/features/listings/components/erli/**, apps/web/src/plugins/erli/**
Dependencies
- None — this is the tracking epic. Child issues depend on each other sequentially (1 → 2 → 3).
Assumptions
- No cross-plugin dependency between
@openlinker/integrations-erli and @openlinker/integrations-allegro (ADR-030).
- No database migration — new fields live in the existing encrypted
credentialsRef JSON blob and the existing config JSON column.
- v1 scope: per-connection Allegro app credentials (not a shared, system-wide credential) — see ADR-030 for the deferred alternative.
Acceptance Criteria
Problem / Context
Erli "borrows" Allegro's category/attribute taxonomy by design (ADR-023 §40/§83, ADR-025, #1045) —
ErliOfferManagerAdapterdeclaresTaxonomyBorrower.getBorrowedTaxonomy() → 'allegro'but implements neitherCategoryBrowsernorCategoryParametersReader. Today the Erli single-offer wizard (apps/web/src/features/listings/components/erli/erli-create-offer-wizard.tsx) only has a plain-text "Category ID" field and no parameters step — unlikeAllegroCreateOfferWizard.tsx, which lets the operator browse a category tree and fill required parameters (e.g. "Stan"/condition).Diagnosis confirmed Allegro's
/sale/categoriesand/sale/categories/{id}/parametersare public catalog endpoints reachable viagrant_type=client_credentials(app-level auth, no seller/user OAuth context) — so this can be solved without requiring every Erli operator to own and connect a real Allegro seller account.Proposed Solution
See the full implementation plan and architecture decision:
docs/plans/implementation-plan-erli-allegro-category-catalog.md(merged via docs(plan): Erli category/parameter browsing via Erli-owned Allegro client-credentials token #1380)docs/architecture/adrs/031-erli-allegro-category-catalog-via-client-credentials.md— decision: an Erli-ownedclient_credentialsHTTP client, with per-connection-instance dynamic capability wiring (avoiding a regression of the [BUG] Frontend — bulk offer wizard hides category-parameter step for Allegro (required "Stan" unsettable) #1367 bulk-wizard capability gate). Correction found during [TASK] Integration — Erli adapter capability wiring + credentials/config validators for Allegro category access #1383:connection.supportedCapabilitiesis a static, per-adapterKey manifest value, not per-connection-instance — the actual FE-visible signal is a new non-secretErliConnectionConfig.allegroCategoryAccessEnabledboolean instead (see ADR-031 "Correction"). Rejected alternatives: requiring a real Allegro connection, a cross-plugin package dependency, and a shared system-wide credential (all documented in the ADR).apps/webdesign tokens.Three sequential sub-tasks, merged onto one integration branch, with a single final PR (full functionality) opened to
mainfor review:client_credentialscategory-catalog client (Plan § Sub-task 1 / Phase 1)Classification
Type: Integration (Erli) + Interface (FE wizard)
Layer: Application / Infrastructure (backend), Interface (frontend)
File(s):
libs/integrations/erli/**,apps/web/src/features/listings/components/erli/**,apps/web/src/plugins/erli/**Dependencies
Assumptions
@openlinker/integrations-erliand@openlinker/integrations-allegro(ADR-030).credentialsRefJSON blob and the existingconfigJSON column.Acceptance Criteria
main, referencingCloses #1381config.allegroCategoryAccessEnabled: trueand its resolved adapter instance passesisCategoryBrowser/isCategoryParametersReader; one without has neither (note:connection.supportedCapabilitiesitself is unaffected — it's static per-adapterKey, not a per-connection signal)