## Summary - add a shared diff presentation layer under `app/Support/Diff` with deterministic row classification, summary derivation, and value stringification - centralize diff-state badge semantics through `BadgeCatalog` with a dedicated `DiffRowStatusBadge` - add reusable Filament diff partials, focused Pest coverage, and the full SpecKit artifact set for spec 141 ## Testing - `vendor/bin/sail artisan test --compact tests/Unit/Support/Diff/DiffRowStatusTest.php tests/Unit/Support/Diff/DiffRowTest.php tests/Unit/Support/Diff/DiffPresenterTest.php tests/Unit/Support/Diff/ValueStringifierTest.php tests/Unit/Badges/DiffRowStatusBadgeTest.php tests/Feature/Support/Diff/SharedDiffSummaryPartialTest.php tests/Feature/Support/Diff/SharedDiffRowPartialTest.php tests/Feature/Support/Diff/SharedInlineListDiffPartialTest.php` - `vendor/bin/sail bin pint --dirty --format agent` ## Filament / Livewire Contract - Livewire v4.0+ compliance: unchanged and respected; this feature adds presentation support only within the existing Filament v5 / Livewire v4 stack - Provider registration: unchanged; no panel/provider changes were required, so `bootstrap/providers.php` remains the correct registration location - Global search: unchanged; no Resource or global-search behavior was added or modified - Destructive actions: none introduced in this feature - Asset strategy: no new registered Filament assets; shared Blade partials rely on the existing asset pipeline and standard deploy step for `php artisan filament:assets` when assets change generally - Testing coverage: presenter, DTOs, stringifier, badge semantics, summary partial, row partial, and inline-list partial are covered by focused Pest unit and feature tests ## Notes - Spec checklist status is complete for `specs/141-shared-diff-presentation-foundation/checklists/requirements.md` - This PR preserves specialized diff renderers and documents incremental adoption rather than forcing migration in the same change Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de> Reviewed-on: #170
122 lines
2.8 KiB
YAML
122 lines
2.8 KiB
YAML
openapi: 3.1.0
|
|
info:
|
|
title: Shared Diff Presentation Foundation Contract
|
|
version: 0.1.0
|
|
description: >-
|
|
Internal presentation contract for Spec 141. This feature introduces no new HTTP
|
|
routes. The component schemas document the supported input and output shapes for the
|
|
shared diff presenter and Blade partials so follow-up consumer specs can adopt the
|
|
foundation consistently.
|
|
paths: {}
|
|
components:
|
|
schemas:
|
|
StructuredCompareInput:
|
|
type: object
|
|
additionalProperties: false
|
|
properties:
|
|
baseline:
|
|
type: object
|
|
additionalProperties: true
|
|
current:
|
|
type: object
|
|
additionalProperties: true
|
|
changedKeys:
|
|
type: array
|
|
items:
|
|
type: string
|
|
labels:
|
|
type: object
|
|
additionalProperties:
|
|
type: string
|
|
meta:
|
|
type: object
|
|
additionalProperties:
|
|
type: object
|
|
additionalProperties: true
|
|
required:
|
|
- baseline
|
|
- current
|
|
DiffRowStatus:
|
|
type: string
|
|
enum:
|
|
- unchanged
|
|
- changed
|
|
- added
|
|
- removed
|
|
DiffRow:
|
|
type: object
|
|
additionalProperties: false
|
|
properties:
|
|
key:
|
|
type: string
|
|
label:
|
|
type: string
|
|
status:
|
|
$ref: '#/components/schemas/DiffRowStatus'
|
|
oldValue:
|
|
nullable: true
|
|
newValue:
|
|
nullable: true
|
|
isListLike:
|
|
type: boolean
|
|
addedItems:
|
|
type: array
|
|
items: {}
|
|
removedItems:
|
|
type: array
|
|
items: {}
|
|
unchangedItems:
|
|
type: array
|
|
items: {}
|
|
meta:
|
|
type: object
|
|
additionalProperties: true
|
|
required:
|
|
- key
|
|
- label
|
|
- status
|
|
- isListLike
|
|
- addedItems
|
|
- removedItems
|
|
- unchangedItems
|
|
- meta
|
|
DiffSummary:
|
|
type: object
|
|
additionalProperties: false
|
|
properties:
|
|
changedCount:
|
|
type: integer
|
|
minimum: 0
|
|
addedCount:
|
|
type: integer
|
|
minimum: 0
|
|
removedCount:
|
|
type: integer
|
|
minimum: 0
|
|
unchangedCount:
|
|
type: integer
|
|
minimum: 0
|
|
hasRows:
|
|
type: boolean
|
|
message:
|
|
type: string
|
|
nullable: true
|
|
required:
|
|
- changedCount
|
|
- addedCount
|
|
- removedCount
|
|
- unchangedCount
|
|
- hasRows
|
|
DiffPresentation:
|
|
type: object
|
|
additionalProperties: false
|
|
properties:
|
|
summary:
|
|
$ref: '#/components/schemas/DiffSummary'
|
|
rows:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/DiffRow'
|
|
required:
|
|
- summary
|
|
- rows |