- Rename logging-helper to logging for consistency
- Remove git-commit-helper (superseded by /commit command)
- Add git-workflow skill for Git Flow operations
Co-Authored-By: Claude <noreply@anthropic.com>
- Rename skill directory from tailwind-isa to tailwind
- Update skill name in frontmatter metadata
- Update all references in CLAUDE.md (2 locations)
Simplifies naming while maintaining clear purpose. The skill provides
Tailwind CSS utilities and design system guidance for the ISA project.
- Create comprehensive html-template skill with 3 reference files
- E2E Testing Attributes (data-what, data-which patterns)
- ARIA Accessibility Attributes (roles, properties, states, WCAG)
- Combined Patterns (real-world examples with both)
- Move E2E attribute guidance from command to skill
- Add extensive ARIA accessibility documentation
- Update angular-template skill with cross-references
- Remove dev-add-e2e-attrs command (functionality now in skill)
The new skill provides 3,322 lines of comprehensive documentation
covering both testing and accessibility best practices for HTML
templates, with practical examples for forms, navigation, tables,
dialogs, and more.
Benefits:
- Clean separation: Angular syntax vs HTML attributes
- Reusable: html-template works with any HTML context
- Comprehensive: E2E + ARIA in one place
- Integrated: Works seamlessly with angular-template skill
feat(crm-data-access,checkout): improve primary bonus card selection logic
Enhance getPrimaryBonusCard helper to sort cards alphabetically by code
when multiple primary cards exist or when no primary card is designated.
This ensures deterministic card selection across the application.
Add comprehensive test coverage for edge cases including:
- Multiple primary cards (returns first alphabetically)
- No primary cards (returns first alphabetically)
- Empty bonus cards array (returns undefined)
Add TODO comments in ShoppingCartService for future refactoring of
cart handling logic to improve code organization and reusability.
Ref: #5407
Add changelog file following Keep a Changelog format.
Documents recent additions including checkout reward features, stock info
batching, CRM improvements, and Angular/Tailwind development skills.
Add two new Claude Code slash commands for developer workflow:
- /eod-report: Generate daily work summaries from git commits
- /generate-changelog: Create changelog entries from git tags
Both commands support flexible date ranges and output formatting.
fix(checkout): resolve currency constraint violations in price handling
- Add ensureCurrencyDefaults() helper to normalize price objects with EUR defaults
- Fix currency constraint violation in shopping cart item additions (bug #5405)
- Apply price normalization across availability, checkout, and shopping cart services
- Update 8 locations: availability.adapter, checkout.service, shopping-cart.service,
get-availability-params.adapter, availability-transformers, reward quantity control
- Refactor OrderType to @isa/common/data-access for cross-domain reusability
- Remove duplicate availability service from catalogue library
- Enhance PriceValue and VatValue schemas with proper currency defaults
- Add availability-transformers.spec.ts test coverage
- Fix QuantityControl fallback from 0 to 1 to prevent invalid state warnings
Resolves issue where POST requests to /checkout/v6/store/shoppingcart/{id}/item
were sending price objects without required currency/currencySymbol fields,
causing 400 Bad Request with 'Currency: Constraint violation: NotNull' error.
Related work items: #5405
🐛 fix(reward-order-confirmation): group items by item-level delivery type
Fix incorrect delivery type headers by grouping order items based on
item.features.orderType instead of order.features.orderType, since items
within a single order can have different delivery types.
Changes:
- Add groupDisplayOrderItemsByDeliveryType helper to group items by delivery type
- Add groupDisplayOrderItemsByBranch helper to group items by branch
- Refactor OrderConfirmationItemListComponent to use item-level grouping
- Move list rendering and grouping logic from parent to child component
- Update template to use branchGroup.items instead of branchGroup.allItems
Fixes#5403
Related work items: #5403
fix(reward-confirmation): improve action card visibility and status messages
Refactor confirmation action card to only display for items with 'Rücklage' feature.
Replace boolean completion check with state-based system using ProcessingStatusState
enum (Cancelled, NotFound, Collected). Add specific completion messages for each
state to provide clearer user feedback.
Changes:
- Add displayActionCard computed signal to check for 'Rücklage' feature
- Replace getProcessingStatusCompleted with getProcessingStatusState helper
- Add ProcessingStatusState enum with three states (Cancelled, NotFound, Collected)
- Update completion messages in template to use @switch based on processingStatus
- Wrap entire action card in @if block checking displayActionCard
- Add proper test coverage for new helper function
- Update component spec to provide required dependencies
Ref: #5391, #5404, #5406
feat(checkout-summary): add navigation to reward cart after order completion
Add conditional button to navigate to reward cart on checkout summary page.
The button appears only when the customer has a primary card and items
in their reward shopping cart.
Implementation details:
- Inject SelectedRewardShoppingCartResource and PrimaryCustomerCardResource
- Add computed signal displayRewardNavigation() to determine button visibility
- Add navigateToReward() method to handle navigation
- Provide SelectedRewardShoppingCartResource in module providers
- Update template with conditional button using new control flow syntax
Ref: #5311
fix(reward-order-confirmation): correct typo and add loading state to collect action
- Fix typo in "Rechnugsadresse" → "Rechnungsadresse"
- Add loading state signal to prevent duplicate collect operations
- Bind pending and disabled states to collect button
- Wrap collect operation in try-finally to ensure loading state cleanup
- Add comprehensive unit tests for loading state behavior
The loading state prevents users from triggering multiple concurrent
collect operations by disabling the button during API calls.
Ref: #5396
fix(customer-card): implement navigation flow from customer card to reward selection
Add navigation logic to Kundenkarte component that allows users to select
a customer and navigate to the reward shop. The flow now properly preserves
navigation context using NavigationStateService scoped to the active tab.
Changes include:
- Add customerId input to KundenkarteComponent for customer identification
- Replace placeholder onRewardShop() with navigateToReward() method
- Preserve navigation context with returnUrl and autoTriggerContinueFn flag
- Update kundenkarte-main-view to pass customerId to child component
- Modify details-main-view to auto-trigger continue() when returning from
Kundenkarte with the appropriate context flag
- Add loading state handling during navigation from customer card
- Update button disabled logic to check both card availability and loading
The navigation context is automatically scoped to the current tab and cleaned
up after use, ensuring proper isolation between tabs.
Ref: #5400
Add comprehensive skill documentation for @isa/core/logging usage:
- SKILL.md: Core principles, patterns, and best practices
- examples.md: Real-world usage scenarios across components/services
- reference.md: Quick API reference and configuration guide
- troubleshooting.md: Common issues and solutions
Provides guidance for consistent logging patterns throughout the codebase.
Update the logging library to accept context as either direct objects
or functions (MaybeLoggerContextFn), providing better ergonomics while
maintaining performance optimization through lazy evaluation.
Changes:
- Add MaybeLoggerContextFn type for flexible context handling
- Update logger() factory to accept context as object or function
- Update all LoggerApi methods to support both context formats
- Enhance README with comprehensive examples and migration guide
- Document performance benefits of function-based context
- Add backward compatibility notes for v2.1.0 enhancement
The new API is fully backward compatible - both direct objects and
function wrappers work seamlessly.
Add comprehensive skill for ISA-specific Tailwind CSS:
- Component-first approach (prefer @isa/ui/* libraries)
- ISA-prefixed color system (bg-isa-accent-red, etc.)
- Typography utilities (isa-text-*)
- Responsive breakpoint service integration
- Spacing patterns with rem-based utilities
- Complete design system reference documentation
- Anti-patterns and best practices guidance
Enforces design system consistency and component reuse
throughout the Angular monorepo.
Configure Figma Desktop MCP server for design-to-code workflows:
- HTTP connection on localhost:3845
- Enables design context and code generation from Figma
Add standardized branch naming pattern for features and bugfixes:
- Format: feature/{task-id}-{short-description}
- Use English kebab-case
- Start with task/issue ID
- Include example for clarity
Add .mcp.json with Context7, Nx MCP, and Angular MCP server configurations.
Remove .mcp.json and .memory.json from gitignore to allow tracking MCP configuration.
Implement comprehensive system to disable specific purchase options (e.g., B2B delivery) for reward flows while providing flexible UI control.
Key Features:
- `disabledPurchaseOptions`: Array to specify options to disable (skips API calls)
- `hideDisabledPurchaseOptions`: Toggle to hide or show disabled options
- true (default): Completely hidden from UI
- false: Shown with disabled visual state (grayed out, not clickable)
Implementation:
- Store: Added state field and isOptionDisabled() helper method
- Availability loading: Skip API calls for disabled options in _loadAvailabilities()
- UI: Base directive prevents clicks, applies .disabled CSS class
- Visual: CSS styling for disabled state (opacity, cursor, background)
- Component: Updated showOption() logic to respect hide flag
Reward Integration:
- Applied to reward-catalog: Disable B2B delivery for reward redemption
- Applied to reward-shopping-cart: Disable B2B delivery for cart items
Documentation:
- Comprehensive README.md with usage examples and architecture
- JSDoc comments on all interfaces, methods, and directives
- Migration notes for breaking change (hidePurchaseOptions renamed)
Breaking Change:
Renamed `hidePurchaseOptions` → `disabledPurchaseOptions` for clarity
Affected Files:
- Core: modal data, service, component, store, state
- Tiles: base directive, CSS styling
- Reward: catalog action, shopping cart item
Add preSelectOption configuration to purchase options modal when adding
reward items, defaulting to 'in-store' purchase option.
This improves UX by automatically selecting the most common purchase
method for reward items, reducing the number of steps required for the
user to complete their reward redemption.
Fix customer features mapping in purchase options store to use feature.key
instead of feature.value for both key and value in the customerFeatures record.
This ensures consistent feature key mapping across the purchase options flow.
Consolidate the separate continueReward() and continue() methods in the customer
details view into a single unified continue() method that handles both reward
selection and regular checkout flows.
Key changes:
- Remove separate continueReward() method
- Move hasReturnUrl() check to end of continue() method
- Share all validation and setup logic between both flows:
* Customer validation (canAddCustomer, canAddShippingAddress)
* Destination updates
* Guest with order checks
* Customer/buyer/payer/shipping setup
* Notification channel updates
- Diverge only at navigation step based on hasReturnUrl()
- Simplify template from 3 conditional buttons to 1 unified button with
conditional content
Benefits:
- Reduced code duplication (~39 lines removed)
- Consistent validation for both flows
- Enhanced reward flow with full business rule checks
- Single point of maintenance
- Cleaner template with reduced conditional complexity
Related to #5262 (Prämienshop-Modus)
feat(checkout): implement hierarchical grouping on rewards order confirmation page
Implements correct grouping by delivery option and target address on the
rewards order confirmation page (Prämien-Abschlussseite).
Changes:
- Add hierarchical grouping: primary by delivery type, secondary by branch
- Show branch name only when multiple branches exist within same delivery type
- Remove duplicate "Abholfiliale" section from addresses component
- Fix undefined shoppingCartItem error by providing fallback with DisplayOrderItem features
- Fix partial order creation error handling in checkout orchestrator
Implementation:
- New helpers: groupDisplayOrdersByDeliveryType, groupDisplayOrdersByBranch
- Updated reward-order-confirmation component with groupedOrders computed signal
- Added comprehensive unit tests (15 new tests, all passing)
- Graceful error handling for backend responses with partial order creation
Bug Fixes:
- Prevent undefined features error when shopping cart item not found
- Extract orders from HTTP error responses when backend returns warnings
- Add German documentation for error handling with TODO for user feedback
Related to: #5397
Related work items: #5397
Relocates helper functions from feature-specific reward-selection-dialog to shared data-access library, enabling cross-feature usage. Renames get-loyalty-points and get-price helpers to better reflect their calculation purpose.
Add comprehensive Claude Code tooling:
- Agents: docs-researcher, docs-researcher-advanced for documentation research
- Commands: dev:add-e2e-attrs, docs:library, docs:refresh-reference, quality:bundle-analyze, quality:coverage
- Skills: 8 specialized skills including api-change-analyzer, architecture-enforcer, library-scaffolder, and more
Update documentation:
- Comprehensive CLAUDE.md overhaul with library reference system
- Update testing guidelines in docs/guidelines/testing.md
- Update READMEs for checkout, icons, scanner, and scroll-position libraries
Remove outdated checkout-completion-flow-documentation.md
Update .gitignore for Claude Code files