TenantAtlas/specs/141-shared-diff-presentation-foundation/contracts/shared-diff-presentation.openapi.yaml
ahmido 0b5cadc234 feat: add shared diff presentation foundation (#170)
## 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
2026-03-14 12:32:08 +00:00

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