SuperSeller3000/migrations
Simon Kuehn c19637465b feat: Frappe ERP matching, pipeline model cache, ACL, stock field, specs by type
Frappe ERP:
- findExistingCustomer() on FrappeErpAdapter — two-step name+address lookup
- FrappeHttpClient: add put() method; switch invoice submit to PUT docstatus=1 (Frappe v16)
- buildItemDescription() uses specsText + inventory number + serial number
- Integration tests: find Simon Kühn, create real 1337€ invoice, cancel+delete in tearDown
- FRAPPE_GENERIC_ITEM_CODE=SKU002 added to .env.local and bin/test-integration

Pipeline — model cache:
- PhotoUploadHandler: after vision, check DB for existing article with same modelNumber
- On match: copy ebayTitle/ebayDescription/specsText/attributes, skip specs+JSON+eBay steps
- DraftArticleHandler: apply model_match data and mark job complete directly
- ArticleRepository: findCompletedByModelNumber() query

Pipeline — specs by article type:
- SpecsResearchAgent: accept attributeFields list, format as bullet list in {{fields}} var
- SpecsResearchHandler: derive attribute names from ArticleType, pass to agent
- SpecsResearchMessage: add attributeFields param
- Prompt migration: replace hardcoded laptop spec list with {{fields}} placeholder

Article:
- specsText field (nullable text column + migration)
- stock field visible on index and editable in CRUD form
- addAttributeValue()/removeAttributeValue() adder-remover pair for Symfony form binding
- AttributeValue::getArticle() getter
- AttributeValueFormType: detect required attributes from ArticleType assignments, set required=true
- ManualIngestType: add stock/quantity field (default 1, min 1)

Users / ACL:
- PermissionVoter: define named permission constants + allPermissions()
- User: getGrantedPermissions()/setGrantedPermissions() helpers
- UserCrudController: permissions checkbox group on edit form

UI / assets:
- public/css/admin/custom.css: red asterisk for required fields
- DashboardController: register custom CSS

Infra:
- PipelineJobFailureListener: mark job failed (with real error) when Messenger exhausts retries
- doctrine.yaml: exclude app.inventory_seq from schema diff
- ErpAdapterInterface: add findExistingCustomer()

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 16:42:15 +00:00
..
.gitignore feat: add initial migration — app/logs/logs_archive schemas with all base tables and GIN fulltext index 2026-05-14 04:34:32 +00:00
Version20260514043343.php feat: add initial migration — app/logs/logs_archive schemas with all base tables and GIN fulltext index 2026-05-14 04:34:32 +00:00
Version20260514050204.php feat: implement Plan 2 — Article Management API 2026-05-14 05:19:20 +00:00
Version20260514053908.php feat: add console commands, remaining migrations and config wiring 2026-05-17 22:44:11 +00:00
Version20260514054123.php feat: add console commands, remaining migrations and config wiring 2026-05-17 22:44:11 +00:00
Version20260514054903.php feat: add console commands, remaining migrations and config wiring 2026-05-17 22:44:11 +00:00
Version20260517222701.php feat: required/optional attribute sections in ArticleType form 2026-05-17 22:43:42 +00:00
Version20260517230000.php feat: add step tracking, retry and article lookup to AIPipelineJob 2026-05-18 07:18:29 +00:00
Version20260517240000.php feat: add manufacturer/model fields to Article and propagate through pipeline 2026-05-18 07:18:24 +00:00
Version20260518150000.php feat: Frappe ERP matching, pipeline model cache, ACL, stock field, specs by type 2026-05-18 16:42:15 +00:00
Version20260518160000.php feat: Frappe ERP matching, pipeline model cache, ACL, stock field, specs by type 2026-05-18 16:42:15 +00:00
Version20260519000000.php feat: editable AI prompt templates and articleType context in specs research 2026-05-18 07:19:02 +00:00
Version20260519010000.php feat: seed default AI prompt templates into database 2026-05-18 07:23:56 +00:00
Version20260519020000.php feat: live pipeline status notifications via SSE 2026-05-18 07:36:03 +00:00
Version20260520000000.php feat: DB-backed translations editable in admin 2026-05-18 07:53:52 +00:00
Version20260520010000.php feat: DB-backed translations editable in admin 2026-05-18 07:53:52 +00:00
Version20260520020000.php feat: replace Mistral web_search with Tavily for specs research 2026-05-18 08:35:52 +00:00
Version20260520030000.php feat: add optional modelName field to Article 2026-05-18 10:06:36 +00:00
Version20260520040000.php chore: migration to update vision_analyze prompt in DB 2026-05-18 10:22:40 +00:00
Version20260520050000.php feat: specs research agent reports corrected model number 2026-05-18 11:00:41 +00:00
Version20260520060000.php fix: cascade delete attribute values when attribute definition is removed 2026-05-18 11:02:46 +00:00
Version20260520070000.php feat: strip --- delimiters from eBay text output, commercial listing prompt 2026-05-18 11:18:40 +00:00